在android中,如果設置了TextView控件為單行顯示,且顯示的文本太長的話,默認情況下會造成顯示不全的情況,這種情況下我們需要設置該控件屬性如下:
<TextView 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:text="@string/hello_world" />
注意上述標記顏色的3個屬性,按照上述設置這3個屬性,此TextView空間就會滾動顯示文本內容,保證了文本的完全顯示。
但是,上述方式只適用於界面中只有1個TextView的情況,當一個界面之中有多個TextView設置了相同屬性,有且只有一個控件會滾動顯示,其他TextView控件則不會滾動顯示。
造成這種情況的原因是TextView空間在滾動顯示的時候必須獲得焦點,但是默認情況下,只能有一個TextView空間獲得焦點,所以造成上述情況。
解決的方法很簡單,重寫類TextView的方法 isFocused(),使其總是返回true,即總是屬於被選中的狀態,這樣就能夠保證多個TextView控件都有滾動顯示的效果。
首先是繼承TextView的類:
package com.example.administrator.test_hello_world; import android.content.Context; import android.util.AttributeSet; import android.widget.TextView; /** * Created by Administrator on 2016/3/17. * 實現跑馬燈效果的TextView */ public class marqueeText extends TextView { 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); } //返回textview是否處在選中的狀態 //而只有選中的textview才能夠實現跑馬燈效果 @Override public boolean isFocused() { return true; } }
接下來是布局文件:
activity_main.xml
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" > <!--singleLine只能是單行顯示--> <com.example.administrator.test_hello_world.marqueeText 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:text="@string/hello_world" /> <com.example.administrator.test_hello_world.marqueeText android:id="@+id/tv2" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginTop="10dp" android:singleLine="true" android:ellipsize="marquee" android:focusable="true" android:focusableInTouchMode="true" android:text="@string/hello_world" /> </LinearLayout>
最后是Activity:
MainActivity.java
package com.example.administrator.test_hello_world; import android.app.Activity; import android.os.Bundle; import android.view.View; import android.widget.Button; public class MainActivity extends Activity { void init_view() { } @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); super.setContentView(R.layout.activity_main); init_view(); } }