问题:使用TextView实现文字从右到左滚动显示,属性设置可在布局文件和代码文件中设置,经过多次试验,在布局文件中设置其属性无法实现滚动效果。
Android版本:9
在手机上调试需打开USB调试(仅安卓机)
一、使用TextView实现文字从右到左滚动显示
TextView实现滚动显示的属性:android:marqueeRepeatLimit="marquee_forever"
在代码中设置的属性(因为在布局文件中设置无效)
textView.setMovementMethod(LinkMovementMethod.getInstance());
textView.setEllipsize(TextUtils.TruncateAt.MARQUEE);
textView.setSingleLine(true);
textView.setSelected(true);
textView.setFocusable(true);
textView.setFocusableInTouchMode(true);
通过以上的属性设置,即可实现TextView文字滚动!
二、在此基础上实现文字滚动过程中,点击关键词实现跳转网页。
这个可以在显示的数据中设置
例如:
显示的文本数据为:
安卓是一种基于Linux内核(不包含GNU组件)的自由及开放源代码的操作系统。主要使用于移动设备,如智能手机和平板电脑,由美国Google公司和开放手机联盟领导及开发。Android操作系统最初由Andy Rubin开发,主要支持手机。2005年8月由Google收购注资。2007年11月,Google与84家硬件制造商、软件开发商及电信营运商组建开放手机联盟共同研发改良Android系统。随后Google以Apache开源许可证的授权方式,发布了Android的源代码。
在文本的“智能手机”前后加上链接如下:
安卓是一种基于Linux内核(不包含GNU组件)的自由及开放源代码的操作系统。主要使用于移动设备,如<a href = ‘https://baike.baidu.com/item/%E6%99%BA%E8%83%BD%E6%89%8B%E6%9C%BA’智能手机和平板电脑,由美国Google公司和开放手机联盟领导及开发。Android操作系统最初由Andy Rubin开发,主要支持手机。2005年8月由Google收购注资。2007年11月,Google与84家硬件制造商、软件开发商及电信营运商组建开放手机联盟共同研发改良Android系统。随后Google以Apache开源许可证的授权方式,发布了Android的源代码。
注意:链接需使用单引号
三、完整代码如下:
布局:
package com.example.textview_paomadeng;
import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle;
import android.text.Html;
import android.text.TextUtils;
import android.text.method.LinkMovementMethod;
import android.widget.TextView;
public class MainActivity extends AppCompatActivity {
private TextView textView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
textView = (TextView)this.findViewById(R.id.New);
String html = "据中国日报,当地时间6月23日,加拿大不列颠哥伦比亚省高等法院和<a href = 'https://baike.baidu.com/item/%E5%AD%9F%E6%99%9A%E8%88%9F/131792?fr=aladdin'>孟晚舟</a>引渡案的控、辩双方达成共识,对引渡案的全部日程进行确认,同意于8月17日恢复引渡听证会,对加拿大和美国当局提供的信息的证据可采纳性进行讨论;而关于美加是否滥用司法程序的辩论将于2021年2月16日开始。";
CharSequence charSequence = Html.fromHtml(html);
textView.setText(charSequence);
textView.setMovementMethod(LinkMovementMethod.getInstance());
textView.setEllipsize(TextUtils.TruncateAt.MARQUEE);
textView.setSingleLine(true);
textView.setSelected(true);
textView.setFocusable(true);
textView.setFocusableInTouchMode(true);
}
}
Java:
public class MainActivity extends AppCompatActivity {
private TextView textView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
textView = (TextView)this.findViewById(R.id.New);
String html = "据中国日报,当地时间6月23日,加拿大不列颠哥伦比亚省高等法院和<a href = 'https://baike.baidu.com/item/%E5%AD%9F%E6%99%9A%E8%88%9F/131792?fr=aladdin'>孟晚舟</a>引渡案的控、辩双方达成共识,对引渡案的全部日程进行确认,同意于8月17日恢复引渡听证会,对加拿大和美国当局提供的信息的证据可采纳性进行讨论;而关于美加是否滥用司法程序的辩论将于2021年2月16日开始。";
CharSequence charSequence = Html.fromHtml(html);
textView.setText(charSequence);
textView.setMovementMethod(LinkMovementMethod.getInstance());
textView.setEllipsize(TextUtils.TruncateAt.MARQUEE);
textView.setSingleLine(true);
textView.setSelected(true);
textView.setFocusable(true);
textView.setFocusableInTouchMode(true);
}
}
四、运行结果如下:
运行后的效果:
点击后的效果:
在最后可加入更多的TextView以实现新闻浏览的效果;也可加入更多的效果!(下期试试改一下)