Android中使用TextView实现文字跑马灯效果

发布时间 - 2026-01-11 00:32:00    点击率:

通常情况下我们想实现文字的走马灯效果需要在xml文件中这样设置

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

大家都懂的就不解释了。

singleLine :boolean型的是否让文字只显示在一行而不是多行显示

ellipsize:滚动效果,里面有(none,start,middle,end,marquee),其中none表示正常显示文字,即使一行显示不完全,也无任何效果。star,就是假如文字在一行显示不完全,在开头显示...,同理,end一行的最后一个文字后面加...,middle就是所有文字显示在一行,如果文字太多,在中间加入...。可能我解释的不清楚,大概就是这样 读者可以自己测试一下。至于marquee就是文字走马灯效果啦。

当然,如果你只设置了这些文字还是不会滚动的。还要使TextView获取焦点。

focusable:是否能够焦点,boolean型的

focusableInTouchMode:boolean型的。

在触摸模式下是否获取焦点。

当你设置了这些部署在手机上,很明显会实现走马灯效果。效果如下:

可是如果你在这个Activity实例中再添加一个编辑框控件,点击编辑框后就会发现走马灯效果消失了.

就像这样

这是为什么呢?

因为点击编辑框,编辑框会获取屏幕焦点,由于通常情况下屏幕的焦点只能有一个,TextView失去了焦点,也就不会滚动了。这时候我们要怎么办呢?

那就欺骗系统呗。告诉它我们的TextView也是有焦点的。没错 两个焦点。

如何做?我们就新建一个我们自己的TextView呗。

首先我们新建一个名为MyTextView继承TextView的类,重写里面的方法,其中有三个方法是必须的,就像我们总在MainActivity里面重写OnCreate方法一样,作用是什么 我也不清楚。好奇的同学请百度。哈哈~

我们要知道系统是如何判断一个控件是否获取焦点了呢?

public boolean isFocused() { 
  // TODO Auto-generated method stub 
  return super.isFocused(); 
} 

就是这个方法。前面说了 我们要欺骗系统 我们的TextViwe是有焦点的。所以我们在这个方法里面一直return true就好了 哈哈

做完了这些别忘记把我们的TextView部署到布局文件中哦

布局代码:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
  android:layout_width="fill_parent" 
  android:layout_height="fill_parent" 
  android:orientation="vertical" > 
  <com.example.textview.MyTextView 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:ellipsize="marquee" 
    android:singleLine="true" 
    android:text="@string/lyric" /> 
  <EditText 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" /> 
</LinearLayout> 

MainActivity.class

package com.example.textview; 
import android.os.Bundle; 
import android.app.Activity; 
import android.view.Menu; 
public class MainActivity extends Activity { 
  @Override 
  protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 
  } 
} 

MyTextView.class

package com.example.textview; 
import android.content.Context; 
import android.util.AttributeSet; 
import android.view.WindowId.FocusObserver; 
import android.widget.TextView; 
public class MyTextView extends TextView{ 
  public MyTextView(Context context, AttributeSet attrs, int defStyle) { 
    super(context, attrs, defStyle); 
    // TODO Auto-generated constructor stub 
  } 
  public MyTextView(Context context, AttributeSet attrs) { 
    super(context, attrs); 
    // TODO Auto-generated constructor stub 
  } 
  public MyTextView(Context context) { 
    super(context); 
    // TODO Auto-generated constructor stub 
  } 
  @Override 
  public boolean isFocused() { 
    // TODO Auto-generated method stub 
    return true; 
  } 
} 

对了 附上效果图。都看到光标在编辑框了~

以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,同时也希望多多支持!


# textview 走马灯效果  # textview跑马灯  # android textview  # textview 跑马灯效果  # 走马灯  # 就像  # 在这个  # 是有  # 不清楚  # 重写  # 不完全  # 新建一个  # 自己的  # 这是  # 情况下  # 我也  # 就会  # 如果你  # 太多  # 那就  # 大家都  # 也就  # 就不  # 说了 


相关栏目: 【 网站优化151355 】 【 网络推广146373 】 【 网络技术251813 】 【 AI营销90571


相关推荐: 如何选择PHP开源工具快速搭建网站?  Laravel辅助函数有哪些_Laravel Helpers常用助手函数大全  Bootstrap整体框架之CSS12栅格系统  Laravel怎么配置S3云存储驱动_Laravel集成阿里云OSS或AWS S3存储桶【教程】  关于BootStrap modal 在IOS9中不能弹出的解决方法(IOS 9 bootstrap modal ios 9 noticework)  Laravel如何获取当前登录用户信息_Laravel Auth门面使用与Session用户读取【技巧】  米侠浏览器网页背景异常怎么办 米侠显示修复  晋江文学城电脑版官网 晋江文学城网页版直接进入  Laravel如何使用模型观察者?(Observer代码示例)  JavaScript如何实现路由_前端路由原理是什么  Laravel怎么实现搜索功能_Laravel使用Eloquent实现模糊查询与多条件搜索【实例】  如何在HTML表单中获取用户输入并用JavaScript动态控制复利计算循环  Bootstrap CSS布局之列表  EditPlus中的正则表达式 实战(2)  Android 常见的图片加载框架详细介绍  车管所网站制作流程,交警当场开简易程序处罚决定书,在交警网站查询不到怎么办?  *服务器网站为何频现安全漏洞?  如何快速上传自定义模板至建站之星?  免费网站制作appp,免费制作app哪个平台好?  如何在沈阳梯子盘古建站优化SEO排名与功能模块?  Java解压缩zip - 解压缩多个文件或文件夹实例  电视网站制作tvbox接口,云海电视怎样自定义添加电视源?  Laravel如何使用Eloquent进行子查询  猎豹浏览器开发者工具怎么打开 猎豹浏览器F12调试工具使用【前端必备】  html如何与html链接_实现多个HTML页面互相链接【互相】  Laravel队列由Redis驱动怎么配置_Laravel Redis队列使用教程  html5的keygen标签为什么废弃_替代方案说明【解答】  Angular 表单中正确绑定输入值以确保提交与验证正常工作  清除minerd进程的简单方法  齐河建站公司:营销型网站建设与SEO优化双核驱动策略  微信h5制作网站有哪些,免费微信H5页面制作工具?  详解Oracle修改字段类型方法总结  如何基于云服务器快速搭建网站及云盘系统?  jquery插件bootstrapValidator表单验证详解  Windows驱动无法加载错误解决方法_驱动签名验证失败处理步骤  如何快速配置高效服务器建站软件?  Laravel怎么设置路由分组Prefix_Laravel多级路由嵌套与命名空间隔离【步骤】  JS去除重复并统计数量的实现方法  如何在腾讯云服务器上快速搭建个人网站?  Laravel如何实现登录错误次数限制_Laravel自带LoginThrottles限流配置【方法】  微信小程序 require机制详解及实例代码  Laravel如何实现全文搜索功能?(Scout和Algolia示例)  Laravel任务队列怎么用_Laravel Queues异步处理任务提升应用性能  高端建站如何打造兼具美学与转化的品牌官网?  中国移动官方网站首页入口 中国移动官网网页登录  C#如何调用原生C++ COM对象详解  网站图片在线制作软件,怎么在图片上做链接?  java中使用zxing批量生成二维码立牌  网站制作大概要多少钱一个,做一个平台网站大概多少钱?  jQuery validate插件功能与用法详解