您的位置:首页 > 产品设计 > UI/UE

Android跑马灯Marquee

2016-01-07 17:18 477 查看
转载请标明出处:/article/8809962.html

本文出自【吴孝城的CSDN博客】


Android中的TextView里的内容过多时,会在后面用"..."省略没有显示的内容

有时我们想要内容滚动,可添加ellipsize,将其设置为Marquee,的方法来实现。

要用android:singleLine="true"将要显示的内容设置为一行,

android:marqueeRepeatLimit="marquee_forever"让它一直滚动,可以改为数字

android:focusable="true" 要显示该跑马灯,就得让该view获得焦点,这样跑马灯才会实现

如果只设置一个TextView实现跑马灯的话,直接在xml文件里设置TextView属性就行

如下

<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:ellipsize="marquee"
android:focusable="true"
android:focusableInTouchMode="true"
android:marqueeRepeatLimit="2"
android:singleLine="true"
android:text="@string/hello_world" />


当设置多个TextView时,会发现只有一个会动,其他还是不会动。

这时我们可以用自定义TextView来实现

新建一个类

MarqueeText.java

package cn.wuxiaocheng.marquee;

import android.content.Context;
import android.util.AttributeSet;
import android.widget.TextView;

public class MarqueeText extends TextView {

public MarqueeText(Context context) {
super(context);
// TODO Auto-generated constructor stub
}

public MarqueeText(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
// TODO Auto-generated constructor stub
}

public MarqueeText(Context context, AttributeSet attrs) {
super(context, attrs);
// TODO Auto-generated constructor stub
}

@Override
public boolean isFocused() {
return true;
//一直返回true,假装这个控件一直获取着焦点
}
}
然后让布局中的TextView使用它

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context="cn.wuxiaocheng.marquee.MainActivity" >

<cn.wuxiaocheng.marquee.MarqueeText
android:id="@+id/tv"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:ellipsize="marquee"
android:focusable="true"
android:focusableInTouchMode="true"
android:marqueeRepeatLimit="marquee_forever"
android:singleLine="true"
android:text="@string/hello_world" />

<cn.wuxiaocheng.marquee.MarqueeText
android:id="@+id/tv2"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_below="@id/tv"
android:layout_marginTop="10dp"
android:ellipsize="marquee"
android:focusable="true"
android:focusableInTouchMode="true"
android:marqueeRepeatLimit="marquee_forever"
android:singleLine="true"
android:text="@string/hello_world" />

</RelativeLayout>


这样便可让两个TextView都实现跑马灯的效果了

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: