android原生TextView怎么控制是否开始跑走马灯
2017-01-23 10:19
363 查看
在实际项目中,经常遇到文本超出控件宽度,显示不全,此时android提供了一个方法:
此方法意思就是设置文本超出宽度的展示效果。TruncateAt定义如下:
MARQUEE: 表示在文本展示不全时候,以走马灯形式滚动
MIDDLE:表示在文本展示不全时候,在文本中间尾显示省略号
START:表示在文本展示不全时候,在文本开始处显示省略号
默认不设置,表示无以上效果。超出控件部分文字会被截断显示。
所以,可以使用null关闭ellipsize。即:
另外,以上属性设置是立即生效的。即如果文本是MARQUEEN,走马灯滚动状态,
如果设置为null时候,在滚动的走马灯马上会回到初始状态。且文本被截断。
如果设置为END,在滚动的走马灯会回到末尾有省略号的样式。
控制走马灯滚动可以如下设置:
android样进行走马灯滚动前提是该控件在焦点状态,且可以聚焦。但是很多时候文本不聚焦也需要滚动提示用户。
如果不自定义view,那么android系统的TextView怎么样才能达到效果呢?
答案就是复写TextView的isFocused方法:
另外,setSingleLine()或setHorizontallyScrolling(bool)来限制为单行文本。
如果setMaxLines(int)被用来设置两行或两行以上的文本,只有END和MARQUEE被ellipsize方法支持(其他ellipsiz类型将不会做任何事情)。
示列:
public class MarqueeTextView extends TextView{
public MarqueeTextView(Context context) {
super(context);
}
public MarqueeTextView(Context context, AttributeSet attrs) {
super(context, attrs);
init();
}
public MarqueeTextView(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
init();
}
private void init() {
this.setScrollbarFadingEnabled(true);
this.setHorizontallyScrolling(true);
this.setHorizontalFadingEdgeEnabled(true);
this.setSingleLine(true);
this.setFocusable(true);
this.setMarqueeRepeatLimit(-1);
this.setMaxLines(1);
}
@Override
public boolean isFocused() {
return true;
}
}
void android.widget.TextView.setEllipsize(TruncateAt where)
此方法意思就是设置文本超出宽度的展示效果。TruncateAt定义如下:
public static enum TruncateAt { END, MARQUEE, MIDDLE, START; private TruncateAt() { } }END: 表示在文本展示不全时候,在文本末尾显示省略号
MARQUEE: 表示在文本展示不全时候,以走马灯形式滚动
MIDDLE:表示在文本展示不全时候,在文本中间尾显示省略号
START:表示在文本展示不全时候,在文本开始处显示省略号
默认不设置,表示无以上效果。超出控件部分文字会被截断显示。
所以,可以使用null关闭ellipsize。即:
setEllipsize(null);
另外,以上属性设置是立即生效的。即如果文本是MARQUEEN,走马灯滚动状态,
如果设置为null时候,在滚动的走马灯马上会回到初始状态。且文本被截断。
如果设置为END,在滚动的走马灯会回到末尾有省略号的样式。
控制走马灯滚动可以如下设置:
// 开始滚动 public void startScroll() { setEllipsize(TextUtils.TruncateAt.MARQUEE); } // 停止滚动,回到起点 public void stopScroll() { setEllipsize(TextUtils.TruncateAt.END);或者setEllipsize(null); }
android样进行走马灯滚动前提是该控件在焦点状态,且可以聚焦。但是很多时候文本不聚焦也需要滚动提示用户。
如果不自定义view,那么android系统的TextView怎么样才能达到效果呢?
答案就是复写TextView的isFocused方法:
//默认滚动 @Override public boolean isFocused() { return true; }
另外,setSingleLine()或setHorizontallyScrolling(bool)来限制为单行文本。
如果setMaxLines(int)被用来设置两行或两行以上的文本,只有END和MARQUEE被ellipsize方法支持(其他ellipsiz类型将不会做任何事情)。
示列:
<?xml version="1.0" encoding="utf-8"?> <FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="match_parent" android:layout_height="match_parent" > <com.starcor.hunan.MarqueeTextView android:id="@+id/textView" android:layout_width="match_parent" android:layout_height="wrap_content" android:maxLines="1" android:scrollHorizontally="true" android:layout_centerInParent="true" android:singleLine="true" android:textColor="#ff0000" android:focusable="true" android:textSize="24px" android:marqueeRepeatLimit="marquee_forever" android:focusableInTouchMode="true"/> </FrameLayout>
public class MarqueeTextView extends TextView{
public MarqueeTextView(Context context) {
super(context);
}
public MarqueeTextView(Context context, AttributeSet attrs) {
super(context, attrs);
init();
}
public MarqueeTextView(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
init();
}
private void init() {
this.setScrollbarFadingEnabled(true);
this.setHorizontallyScrolling(true);
this.setHorizontalFadingEdgeEnabled(true);
this.setSingleLine(true);
this.setFocusable(true);
this.setMarqueeRepeatLimit(-1);
this.setMaxLines(1);
}
@Override
public boolean isFocused() {
return true;
}
}
相关文章推荐
- Android设置TextView的Selector来控制点击的颜色
- Android玄铁剑之TextView之跑跑马灯
- android TextView不会自动换行怎么办,教你使用staticlayout解决换行
- Android判断是否触发ellipsize="end"(即textview是否换行)
- Android TextView 判断文字内容是否超出显示省略号
- Android设置TextView的Selector来控制点击的颜色
- activity怎么控制fragment中的textview组件
- Android 判断TextView 是否为空
- Android TextView 如何判断是否已经省略
- Android VideoView播放视频控制:开始、暂停、快进(3)
- android布局时,左侧宽度固定而右侧textview高度变化,怎么9png实现左侧高度与右侧相等?
- activity怎么控制fragment中的textview组件
- Android设置TextView的Selector来控制点击的颜色
- Android VideoView播放视频控制:开始、暂停、快进(3)
- android给 TextView 加上效果和事件响应 判断是否点击函数
- Android玄铁剑之TextView之跑跑马灯
- Android判断TextView是否超出加省略号
- android中怎么给TextView的部分字段加下划线并设置监听事件
- Android VideoView播放视频控制:开始、暂停、快进
- Android设置TextView的Selector来控制点击的颜色