TextView跑馬燈效果與addStatesFromChildren屬性關係

luohai859發表於2014-07-18

在Android中要顯示跑馬燈是比較容易的,只要設定2個屬性就可以了:
android:singleLine="true"
android:ellipsize="marquee"

但 是要顯示跑馬燈該View必需是可以取得焦點的,只有在取得焦點的情況下跑馬燈才會出現.
如果是組合View的情況下就有問題了, 如下一個組合View:

<!-- <br /> <br /> Code highlighting produced by Actipro CodeHighlighter (freeware)<br /> http://www.CodeHighlighter.com/<br /> <br /> --><? xml version="1.0" encoding="utf-8" ?> 
< LinearLayout
  
 xmlns:android ="http://schemas.android.com/apk/res/android" 
  android:orientation
 ="vertical" 
  android:gravity
 ="center_vertical" 
  android:background
 ="@drawable/f_background" 
  android:layout_width
 ="fill_parent" 
  android:focusable
 ="true" 
  android:layout_height
 ="50px" > 
   < TextView 
      
 android:id ="@+id/info_text" 
      android:focusable
 ="true" 
      android:layout_width
 ="fill_parent" 
      android:layout_height
 ="wrap_content" 
      android:text
 ="test marquee  .. " 
      android:textColor
 ="@color/black" 
      android:singleLine
 ="true" 
      android:ellipsize
 ="marquee" 
      android:marqueeRepeatLimit
 ="3" 
      android:textSize
 ="18sp" 
  
 /> 
   < TextView 
      
 android:id ="@+id/date_text" 
      android:layout_width
 ="fill_parent" 
      android:layout_height
 ="wrap_content" 
      android:layout_gravity
 ="bottom" 
      android:textColor
 ="@color/gray" 
      android:text
 ="2010/05/28" 
      android:textSize
 ="12sp" 
  
 /> 
</ LinearLayout > 


上面示例中2個TextView組合為一個View,由於設定了LinearLayout為focusable而TextView就沒法取得焦點了,這樣 這個TextView的跑馬燈效果就顯示不出來,就算你也設定TextView的 android:focusable= "true" 也是 沒用的. 這個時候就要使用addStatesFromChildren 這個屬性了,在LinearLayout中設定這個屬性,然後設定TextView的focusable= "true" 就可以了.關於addStatesFromChildren的說明:

Sets whether this ViewGroup's drawablestates also include its children's drawablestates.

可以正常顯示的程式碼:

<!-- <br /> <br /> Code highlighting produced by Actipro CodeHighlighter (freeware)<br /> http://www.CodeHighlighter.com/<br /> <br /> --><? xml version="1.0" encoding="utf-8" ?> 
< LinearLayout
  
 xmlns:android ="http://schemas.android.com/apk/res/android" 
  android:orientation
 ="vertical" 
  android:gravity
 ="center_vertical" 
  android:background
 ="@drawable/zixun_background" 
  android:layout_width
 ="fill_parent" 
  android:addStatesFromChildren
 ="true" 
  android:layout_height
 ="50px" > 
   < TextView 
      
 android:id ="@+id/info_text" 
      android:focusable
 ="true" 
      android:layout_width
 ="fill_parent" 
      android:layout_height
 ="wrap_content" 
      android:text
 =" " 
      android:textColor
 ="@color/black" 
      android:singleLine
 ="true" 
      android:ellipsize
 ="marquee" 
      android:marqueeRepeatLimit
 ="3" 
      android:textSize
 ="18sp" 
  
 /> 
   < TextView 
      
 android:id ="@+id/date_text" 
      android:layout_width
 ="fill_parent" 
      android:layout_height
 ="wrap_content" 
      android:layout_gravity
 ="bottom" 
      android:textColor
 ="@color/gray" 
      android:text
 ="2010/05/28" 
      android:textSize
 ="12sp" 
  
 /> 
</ LinearLayout > 

相關文章