android TextView實現滾動顯示效果


    在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();
    }
}

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM