- _nosay
如何让TextView中的文字水平滚动
2017-12-27 12:51:14
其实让一段文字水平滚动,并不复杂。我们只需要在布局文件中加上几个参数就可以了,如下
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:orientation="vertical" android:layout_width="match_parent"
android:layout_height="match_parent">
<TextView
android:id="@+id/textView1"
android:text="@string/long_value"
android:layout_width="wrap_content"
android:singleLine="true"
android:ellipsize="marquee"
android:focusable="true"
android:focusableInTouchMode="true"
android:textSize="10dp"
android:layout_height="wrap_content" />
</LinearLayout>
但是问题是,如果我们想在加一个textview,把布局文件变成
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:orientation="vertical" android:layout_width="match_parent"
android:layout_height="match_parent">
<TextView
android:id="@+id/textView1"
android:text="@string/long_value"
android:layout_width="wrap_content"
android:singleLine="true"
android:ellipsize="marquee"
android:focusable="true"
android:focusableInTouchMode="true"
android:textSize="10dp"
android:layout_height="wrap_content" />
<TextView
android:id="@+id/textView2"
android:text="@string/long_value"
android:layout_width="wrap_content"
android:singleLine="true"
android:ellipsize="marquee"
android:focusable="true"
android:focusableInTouchMode="true"
android:textSize="10dp"
android:layout_height="wrap_content" />
</LinearLayout>
运行的时候发现只有一个textview是水平滚动的,那如果我们想要让它们两个都滚动的话,那么我们只能使用自定义的textView控件了
新建MarqueeText.java文件,内容为
package com.example.nosay.myapplication;
import android.content.Context;
import android.util.AttributeSet;
/**
* Created by nosay on 12/27/17.
*/
public class MarqueeText extends android.support.v7.widget.AppCompatTextView {
public MarqueeText(Context context) {
super(context);
}
public MarqueeText(Context context, AttributeSet attrs) {
super(context, attrs);
}
public MarqueeText(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
}
@Override
public boolean isFocused() {
return true;
}
}
相应的布局文件改为
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:orientation="vertical" android:layout_width="match_parent"
android:layout_height="match_parent">
<com.example.nosay.myapplication.MarqueeText
android:id="@+id/textView1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:ellipsize="marquee"
android:focusable="true"
android:focusableInTouchMode="true"
android:singleLine="true"
android:text="@string/long_value" />
<com.example.nosay.myapplication.MarqueeText
android:id="@+id/textView2"
android:layout_below="@id/textView1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:ellipsize="marquee"
android:focusable="true"
android:focusableInTouchMode="true"
android:singleLine="true"
android:layout_marginTop="20dp"
android:text="@string/long_value" />
</LinearLayout>
再运行,实现两行文件的水平滚动效果。