Android中長TextViewがランニングライト効果を実現


 Android            TextView         ,                           。
  :
<TextView
        android:id="@+id/textview1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="  TextView,  TextView,  TextView,  TextView"
        />
    TextView         ,            ,                   :
 android:singleLine="true"

これでテキストは1行にしか表示されませんが、効果を実行すると不完全なテキストに省略記号が表示され、追加できます.
android:ellipsize="marquee"

プロパティの設定は、省略記号の問題を解決できますが、ランニングランプの効果は実現できません.ランニングランプの効果を実現するには、2つのプロパティを追加する必要があります.
android:focusable="true"
android:focusableInTouchMode="true"

これでランニングライト効果が実現します.しかし、これで終わりだと思っています.間違っています.このとき、レイアウトを少し複雑にして、テキストボックスの下にテキストボックスを追加して、同じように上のテキストボックスで設定しましょう.実行すると、理想は豊満で、現実は骨感があります.2番目のテキストボックスにはランニングランプの効果が表示されず、多くの仲間が驚いています.これはなぜですか.最初のテキストボックスに設定されたプロパティandroid:focusable="true"は簡単です.このときのフォーカスは最初のテキストボックスに配置され、trueに戻ります.そのため、2番目のテキストボックスに設定されたフォーカスプロパティは使いません.このとき、2つのテキストボックスがフォーカスできるように別の方法を考えます.TextViewコンポーネントを自分で書き換える方法を教えてあげます.コードは以下の通りです.
public class MyTextView extends TextView {

    public MyTextView(Context context) {
        super(context);
        // TODO Auto-generated constructor stub
    }

    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
    }
    @Override
    public boolean isFocused() {
        // TODO Auto-generated method stub
        return true;
    }

}

その後、TextViewコンポーネントを自分で書き直したMyTextViewに置き換えると完璧に解決できます.OK興味のある仲間に会って自分でやってみましょう!