TextView的跑马灯效果实现

问题描述

当文字内容过长,但是只允许显示一行时,可以将文字显示为跑马灯效果,即文字滚动显示。

代码实现

第一种方法实现

先查询TextView控件的属性,得到以下信息:

  • android:ellipsize=”marquee”
    TextView采用跑马灯属性.
  • android:marqueeRepeatLimit=”marquee_forever”
    设置重复滚动的次数,marquee_forever表示无限次.

在设置了上面两个属性之后,还需要设置两个属性,使得TextView可以获得焦点,滚动起来,不获取焦点,TextView并不会滚动。

  • android:focusableInTouchMode=”true”
    在Touch模式下可以获取焦点。
  • android:focusable=”true”
    TextView可以获取焦点。

TextView的设置属性如下:

<TextView
android:id="@+id/tv"
android:layout_width="400dp"
android:layout_height="wrap_content"
android:layout_centerInParent="true"
android:ellipsize="marquee"
android:focusableInTouchMode="true"
android:focusable="true"
android:gravity="center"
android:marqueeRepeatLimit="marquee_forever"
android:singleLine="true"
android:text="Hello World!相当长的内容,只能显示一行,内容太多,显示不下,所以采用跑马灯方式显示,哈哈哈哈哈。。。"
/>

这种方法实现存在一个问题,就是当其他控件获取焦点之后,TextView没有了焦点,则会停止跑马灯效果。
在TextView控件下面添加一个EditText控件,当点击EditText控件时,EditText控件将会获得焦点,TextView将会失去焦点,代码如下:

    <TextView
android:id="@+id/tv"
android:layout_width="400dp"
android:layout_height="wrap_content"
android:layout_centerInParent="true"
android:ellipsize="marquee"
android:focusableInTouchMode="true"
android:focusable="true"
android:gravity="center"
android:marqueeRepeatLimit="marquee_forever"
android:singleLine="true"
android:text="Hello World!相当长的内容,只能显示一行,内容太多,显示不下,所以采用跑马灯方式显示,哈哈哈哈哈。。。" /> <EditText
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="10dp"
android:layout_below="@id/tv"
/>

运行代码之后,点击EditText,上面的TextView就会停止跑马灯效果,所以如果布局上有其他控件就不适合第一种方式。

第二种方法实现

通过修改TextView的isFocus()方法,使其返回为true,可以一直获取焦点。代码如下:

public class FocusTextView extends TextView{

    public FocusTextView(Context context) {
super(context);
} public FocusTextView(Context context, @Nullable AttributeSet attrs) {
super(context, attrs);
} public FocusTextView(Context context, @Nullable AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
} @Override
public boolean isFocused() {
return true;
}
}

FocusTextView的使用为:

<com.zhangmiao.sixproject.FocusTextView
android:id="@+id/focus_tv"
android:layout_width="400dp"
android:layout_height="wrap_content"
android:layout_centerInParent="true"
android:ellipsize="marquee"
android:gravity="center"
android:marqueeRepeatLimit="marquee_forever"
android:singleLine="true"
android:layout_below="@id/tv"
android:text="Hello World!相当长的内容,只能显示一行,内容太多,显示不下,所以采用跑马灯方式显示,哈哈哈哈哈。。。"
/>

这种方式就不会有第一种方式的问题。

总结

第一种方式实现方便快捷,但是存在被其他控件夺取焦点之后效果消失的问题。
第二种方式需要实现一个类去继承TextView,重写isFocus()方法,没有第一种方式的问题。
推荐第二种方式。

联系方式:1006299425@qq.com,有问题欢迎大家指出。

TextView的跑马灯效果实现的更多相关文章

  1. Android界面(1) 使用TextView实现跑马灯效果

    方法一:(只能实现单个TextView的跑马灯效果)在TextView添加以下控件 android:singleLine="true"只能单行,超出的文字显示为"...& ...

  2. ListView 中的TextView实现跑马灯效果

    案例:怎么样在一个ListView中含有TextView的item中实现字母滚动呢.这个在一些特定的场合经常用得到.如下图,当焦点位于某个item的时候其内容就自动滚动显示 要实现这样的效果,废话不多 ...

  3. TextView的跑马灯效果(AS开发实战第二章学习笔记)

    TextView的跑马灯效果跑马灯用到的属性与方法说明singleLine 指定文本是否单行显示ellipsize 指定文本超出范围后的省略方式focusable 指定是否获得焦点,跑马灯效果要求设置 ...

  4. Android使用TextView实现跑马灯效果(自定义控件)

    对于一个长的TetxView 折行显示是一个很好的办法,另一种方法就是跑马灯显示(单行滚动) 1.折行显示的长TextView <LinearLayout xmlns:android=" ...

  5. TextView 实现跑马灯效果

    在String.xml中添加: <string name="txt">跑马灯效果,我跑啊跑</string>在layout/mian.xml中添加TextV ...

  6. Android 使用TextView实现跑马灯效果

    前言 我们在开发中经常会遇到一个小问题.比如下面一个小例子: 这个文字太长,单行中导致无法全部显示出来,这就是今天要实现的功能. 当然,百度中也有很多这种解决方案. 其中有一种,例如: <Tex ...

  7. andriod给ListView中的TextView增加跑马灯效果

    正常情况下跑马灯效果只需要在TextView中添加android:ellipsize="marquee" android:singleLine="true" a ...

  8. 安卓之文本视图TextView及跑马灯效果

    一.基本属性和设置方法 二.跑马灯用到的属性与方法说明 三.省略方式的取值说明 四.跑马灯效果案例代码   (1)布局xml文件 <?xml version="1.0" en ...

  9. Android开发之TextView实现跑马灯效果

    TextView及其子类,当字符内容太长显示不下时可以省略号代替未显示的字符:省略号可以在显示区域的起始,中间,结束位置,或者以跑马灯的方式显示文字(textview的状态为被选中). 其实现只需在x ...

随机推荐

  1. Windows10开机pin界面循环重启解决办法

    昨天电脑在开机时,进入pin界面,输入pin码之后系统没反应,也不显示登陆成功,大概一分钟之后自动重启,遂百度答案:大部分建议都是在开机显示win图标时强制关机,强制关机两次即自动进入疑难解答页面,以 ...

  2. Vue中观察者模式的实现

    Vue中实现观察者模式的方法可以有三种: 1.v-on方法 exp: <div id='test'> <button v-on:event='functionName'>but ...

  3. 为什么23种设计模式没有 MVC

    MVC的是为了把数据(Model)和视图(View)分离开来,然后用控制器(Controller)来粘合M和V之间的关系. MVC是观察者模式(Observer), 策略模式(Strategy)和组合 ...

  4. gitlab 修改root密码

    [root@svr34 bin]# gitlab-rails console production Loading production environment (Rails 4.2.5.2) irb ...

  5. http://www.cnblogs.com/langjt/p/4281477.html

    http://www.cnblogs.com/langjt/p/4281477.html

  6. 计蒜客 2019 蓝桥杯省赛 B 组模拟赛(三)一笔画

    #include<iostream> #include<cstring> #include<cstdio> #include<algorithm> us ...

  7. 转载两篇dedecms的漏洞修复教程

    Dedecms安全步骤,安装之后的操作 1 将文件夹dede改名为其他,比如 /256256.com/ 2 搜索ad.dedecms.com,文件D:\WebSite\256256.com\www\g ...

  8. xpath json操作符说明

    XPath JSONPath Description / $ the root object/element . @ the current object/element / . or [] chil ...

  9. 人工智能&物联网开发的目录

    走进嵌入式开发的世界,企业级项目课程让你达到企业嵌入式应用开发要求.名师在线答疑,解决疑难.科学评测体系,系统评估学习.核心项目实........ 30 门课程 241小时12分钟 824 人学习 学 ...

  10. tomcat配置层了解一下 idea打包 java打包部署

    Tomcat的所有配置都放在conf文件夹之中,里面的server.xml文件是配置的核心文件. 如果想修改Tomcat服务器的启动端口,则可以在server.xml配置文件中的Connector节点 ...