Refactor marquee setup for multi-line TextViews
This commit is contained in:
parent
2706210cef
commit
53e1a62afe
|
@ -35,7 +35,6 @@ import android.support.v4.app.FragmentManager;
|
|||
import android.support.v4.content.ContextCompat;
|
||||
import android.support.v4.widget.NestedScrollView;
|
||||
import android.support.v4.widget.SwipeRefreshLayout;
|
||||
import android.support.v4.widget.TextViewCompat;
|
||||
import android.text.TextUtils;
|
||||
import android.util.DisplayMetrics;
|
||||
import android.view.LayoutInflater;
|
||||
|
@ -375,31 +374,7 @@ abstract public class AbstractInfoFragment extends AbstractFragment
|
|||
@SuppressLint("StringFormatInvalid")
|
||||
protected void updateView(DataHolder dataHolder) {
|
||||
titleTextView.setText(dataHolder.getTitle());
|
||||
titleTextView.post(new Runnable() {
|
||||
@Override
|
||||
public void run() {
|
||||
int lines = titleTextView.getLineCount();
|
||||
int maxLines = TextViewCompat.getMaxLines(titleTextView);
|
||||
if (lines > maxLines) {
|
||||
titleTextView.setEllipsize(TextUtils.TruncateAt.END);
|
||||
titleTextView.setClickable(true);
|
||||
titleTextView.setOnClickListener(new View.OnClickListener() {
|
||||
@Override
|
||||
public void onClick(View v) {
|
||||
v.setSelected(!v.isSelected());
|
||||
TextUtils.TruncateAt ellipsize;
|
||||
if (v.isSelected()) {
|
||||
ellipsize = TextUtils.TruncateAt.MARQUEE;
|
||||
} else {
|
||||
ellipsize = TextUtils.TruncateAt.END;
|
||||
}
|
||||
titleTextView.setEllipsize(ellipsize);
|
||||
titleTextView.setHorizontallyScrolling(v.isSelected());
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
});
|
||||
titleTextView.post(UIUtils.getMarqueeToggleableAction(titleTextView));
|
||||
underTitleTextView.setText(dataHolder.getUnderTitle());
|
||||
detailsRightTextView.setText(dataHolder.getDetails());
|
||||
|
||||
|
|
|
@ -20,7 +20,6 @@ import android.content.res.Resources;
|
|||
import android.os.Bundle;
|
||||
import android.os.Handler;
|
||||
import android.support.v4.app.Fragment;
|
||||
import android.support.v4.widget.TextViewCompat;
|
||||
import android.text.TextUtils;
|
||||
import android.util.DisplayMetrics;
|
||||
import android.view.LayoutInflater;
|
||||
|
@ -753,31 +752,7 @@ public class NowPlayingFragment extends Fragment
|
|||
}
|
||||
|
||||
mediaTitle.setText(title);
|
||||
mediaTitle.post(new Runnable() {
|
||||
@Override
|
||||
public void run() {
|
||||
int lines = mediaTitle.getLineCount();
|
||||
int maxLines = TextViewCompat.getMaxLines(mediaTitle);
|
||||
if (lines > maxLines) {
|
||||
mediaTitle.setEllipsize(TextUtils.TruncateAt.END);
|
||||
mediaTitle.setClickable(true);
|
||||
mediaTitle.setOnClickListener(new View.OnClickListener() {
|
||||
@Override
|
||||
public void onClick(View v) {
|
||||
v.setSelected(!v.isSelected());
|
||||
TextUtils.TruncateAt ellipsize;
|
||||
if (v.isSelected()) {
|
||||
ellipsize = TextUtils.TruncateAt.MARQUEE;
|
||||
} else {
|
||||
ellipsize = TextUtils.TruncateAt.END;
|
||||
}
|
||||
mediaTitle.setEllipsize(ellipsize);
|
||||
mediaTitle.setHorizontallyScrolling(v.isSelected());
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
});
|
||||
mediaTitle.post(UIUtils.getMarqueeToggleableAction(mediaTitle));
|
||||
mediaUndertitle.setText(underTitle);
|
||||
|
||||
mediaProgressIndicator.setOnProgressChangeListener(this);
|
||||
|
|
|
@ -29,6 +29,7 @@ import android.os.Vibrator;
|
|||
import android.preference.PreferenceManager;
|
||||
import android.support.annotation.NonNull;
|
||||
import android.support.v4.widget.SwipeRefreshLayout;
|
||||
import android.support.v4.widget.TextViewCompat;
|
||||
import android.support.v7.app.AlertDialog;
|
||||
import android.text.SpannableStringBuilder;
|
||||
import android.text.TextUtils;
|
||||
|
@ -612,6 +613,42 @@ public class UIUtils {
|
|||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns a {@link Runnable} that sets up toggleable scrolling behavior on a {@link TextView}
|
||||
* if the number of lines to be displayed exceeds the maximum lines limit supported by the TextView.
|
||||
* Can be applied by using {@link View#post(Runnable)}.
|
||||
*
|
||||
* @param textView TextView that the Runnable should apply against
|
||||
* @return Runnable
|
||||
*/
|
||||
public static Runnable getMarqueeToggleableAction(final TextView textView) {
|
||||
return new Runnable() {
|
||||
@Override
|
||||
public void run() {
|
||||
int lines = textView.getLineCount();
|
||||
int maxLines = TextViewCompat.getMaxLines(textView);
|
||||
if (lines > maxLines) {
|
||||
textView.setEllipsize(TextUtils.TruncateAt.END);
|
||||
textView.setClickable(true);
|
||||
textView.setOnClickListener(new View.OnClickListener() {
|
||||
@Override
|
||||
public void onClick(View v) {
|
||||
v.setSelected(!v.isSelected());
|
||||
TextUtils.TruncateAt ellipsize;
|
||||
if (v.isSelected()) {
|
||||
ellipsize = TextUtils.TruncateAt.MARQUEE;
|
||||
} else {
|
||||
ellipsize = TextUtils.TruncateAt.END;
|
||||
}
|
||||
textView.setEllipsize(ellipsize);
|
||||
textView.setHorizontallyScrolling(v.isSelected());
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
/**
|
||||
* Replaces some BBCode-ish tagged text with styled spans.
|
||||
* <p>
|
||||
|
|
Loading…
Reference in New Issue