Android入门笔记之MarqueeText

来源:互联网 发布:小强软件测试 编辑:程序博客网 时间:2024/03/29 20:49

关于Marquee效果

在安卓的一个布局中,如果一个文本长度过长,并且属性被设置为singleline的时候,会出现文本显示不全的问题。这时候我们可以把这个文本设置为滚动文本,这样在应用中能完整的显示整个长文本的所有内容。

第一种实现方式

对于仅仅存在一个长文本的情况下,我们可以通过配置activity对应的layout的xml文件对长文本的滚动效果进行配置。

  1. 首先新建一个android工程,在mainactivity的布局中加入一个长文本控件,设置singleLine属性为true
    <TextView
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:singleLine="true"
    android:layout_alignParentLeft="true"
    android:layout_alignParentRight="true"
    android:layout_centerVertical="true"
    android:text="@string/hello_world" />

    此时长文本只能显示其中的一部分,剩余部分用省略号表示。

  2. 为了实现该长文本的滚动效果,需要在它的配置中加入如下三项:
    android:ellipsize="marquee"
    android:focusable="true"
    android:focusableInTouchMode="true"

  3. 配置完成后在测试机上进行测试,可以看到长文本已经实现了滚动效果。

  4. 这种配置方法仅仅适用于只有一个长文本的情况,如果有两个或以上的长文本,这种配置方法只有第一个配置的长文本可以取到焦点,实现滚动效果,其他的长文本都无法滚动,如果要让所有的长文本都实现滚动效果,需要通过第二种方法。

第二种实现方式

第二种实现方式通过继承TextView类,重写其isFocused()函数来实现滚动显示效果,这种方式没有文本数量限制。

首先定义一个自定义的类,让它继承TextView类。定义构造方法,重写isFocused函数,使他返回值为true

package com.example.testmarqueetext;import android.content.Context;import android.util.AttributeSet;import android.widget.TextView;/** * @author GuiltyCrown 2016-09-24 */public class MyMarqueeText extends TextView {    /**     * @param context     */    public MyMarqueeText(Context context) {        super(context);    }    /**     * @param context     * @param attrs     * @param defStyleAttr     * @param defStyleRes     */    public MyMarqueeText(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) {        super(context, attrs, defStyleAttr, defStyleRes);    }    /**     * @param context     * @param attrs     * @param defStyleAttr     */    public MyMarqueeText(Context context, AttributeSet attrs, int defStyleAttr) {        super(context, attrs, defStyleAttr);    }    /**     * @param context     * @param attrs     */    public MyMarqueeText(Context context, AttributeSet attrs) {        super(context, attrs);    }    @Override    public boolean isFocused()    {        return true;    }}

布局中加入三个长文本控件

<com.example.testmarqueetext.MyMarqueeText        android:id="@+id/tv1"        android:layout_width="wrap_content"        android:layout_height="wrap_content"        android:singleLine="true"        android:ellipsize="marquee"        android:focusable="true"        android:focusableInTouchMode="true"        android:layout_alignParentLeft="true"        android:layout_alignParentRight="true"        android:layout_centerVertical="true"        android:text="@string/hello_world1" />    <com.example.testmarqueetext.MyMarqueeText        android:id="@+id/tv3"        android:layout_width="wrap_content"        android:layout_height="wrap_content"        android:layout_above="@+id/tv1"        android:layout_alignLeft="@+id/tv1"        android:layout_marginBottom="22dp"        android:ellipsize="marquee"        android:focusable="true"        android:focusableInTouchMode="true"        android:singleLine="true"        android:text="@string/hello_world2" />    <com.example.testmarqueetext.MyMarqueeText        android:id="@+id/tv2"        android:layout_width="wrap_content"        android:layout_height="wrap_content"        android:layout_alignLeft="@+id/tv1"        android:layout_below="@+id/tv1"        android:layout_marginTop="27dp"        android:ellipsize="marquee"        android:focusable="true"        android:focusableInTouchMode="true"        android:singleLine="true"        android:text="@string/hello_world3" />

测试结果如下

可以看到,三个长文本都实现了滚动效果。

0 0
原创粉丝点击