Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> Android開發實例 >> Android手機衛士(十一):自定義控件(獲取焦點的TextView)

Android手機衛士(十一):自定義控件(獲取焦點的TextView)

編輯:Android開發實例

  本文將實現標題欄下面的textview中的文字跑馬燈的效果,就是將一行文字水平循環滾動,效果如下:

Android手機衛士(十一):自定義控件(獲取焦點的TextView)

  實現代碼如下:

XML/HTML代碼
  1. <!-- android:ellipsize="end"添加省略點的所在位置 -->  
  2. <!-- 想讓文字出現跑馬燈效果,必須讓其獲取焦點 -->  
  3. <!-- android:marqueeRepeatLimit="marquee_forever"一直滾動屬性 -->  
  4. <!-- 自定義控件達到滾動效果(其實就是重新原有的TextView,讓其一直能夠獲取焦點即可) -->  
  5. <TextView   
  6.     android:text="這是一個跑馬燈,這是一個跑馬燈,這是一個跑馬燈,這是一個跑馬燈,這是一個跑馬燈,"  
  7.     android:layout_width="match_parent"  
  8.     android:layout_height="wrap_content"  
  9.     android:ellipsize="marquee"  
  10.     android:focusable="true"  
  11.     android:focusableInTouchMode="true"  
  12.     android:marqueeRepeatLimit="marquee_forever"  
  13.     android:padding="5dp"  
  14.     android:textColor="#000"  
  15.     android:singleLine="true"  
  16.     />  

  如果其他地方也需要這樣的跑馬燈效果,復制代碼比較麻煩。這裡使用自定義控件來實現滾動效果(其實就是重新原有的TextView,讓其一直能夠獲取焦點即可)

  新建一個包view,專門放自定義控件文件

Android手機衛士(十一):自定義控件(獲取焦點的TextView)

  新建FocusTextView類

Android手機衛士(十一):自定義控件(獲取焦點的TextView)

  添加代碼:

Java代碼
  1. package com.wuyudong.mobilesafe.view;  
  2.   
  3. import android.content.Context;  
  4. import android.util.AttributeSet;  
  5. import android.widget.TextView;  
  6.   
  7. /** 
  8.  * @author wuyudong  
  9.  * 能夠獲取焦點的自定義TextView 
  10.  *  
  11.  */  
  12. public class FocusTextView extends TextView {  
  13.   
  14.     // 使用在通過java代碼創建控件  
  15.     public FocusTextView(Context context) {  
  16.   
  17.         super(context);  
  18.     }  
  19.   
  20.     // 由系統調用(帶屬性+上下文環境構造方法)  
  21.     public FocusTextView(Context context, AttributeSet attrs) {  
  22.   
  23.         super(context, attrs);  
  24.     }  
  25.   
  26.     // 由系統調用(帶屬性+上下文環境構造方法+布局文件中定義樣式文件構造方法)  
  27.     public FocusTextView(Context context, AttributeSet attrs, int defStyle) {  
  28.         super(context, attrs, defStyle);  
  29.     }  
  30.   
  31.     // 重寫獲取焦點的方法  
  32.     @Override  
  33.     public boolean isFocused() {  
  34.         // return super.isFocused();  
  35.         return true;  
  36.     }  
  37. }  

  布局代碼替換為:

XML/HTML代碼
  1. <?xml version="1.0" encoding="utf-8"?>  
  2. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"  
  3.     android:layout_width="match_parent"  
  4.     android:layout_height="match_parent"  
  5.     android:orientation="vertical" >  
  6.   
  7.     <TextView  
  8.         style="@style/TitleStyle"  
  9.         android:text="功能列表" />  
  10.   
  11.     <!-- android:ellipsize="end"添加省略點的所在位置 -->  
  12.     <!-- 想讓文字出現跑馬燈效果,必須讓其獲取焦點 -->  
  13.     <!-- android:marqueeRepeatLimit="marquee_forever"一直滾動屬性 -->  
  14.     <!-- 自定義控件達到滾動效果(其實就是重新原有的TextView,讓其一直能夠獲取焦點即可) -->  
  15.     <!--  
  16.       <TextView   
  17.         android:text="這是一個跑馬燈,這是一個跑馬燈,這是一個跑馬燈,這是一個跑馬燈,這是一個跑馬燈,"  
  18.         android:layout_width="match_parent"  
  19.         android:layout_height="wrap_content"  
  20.         android:ellipsize="marquee"  
  21.         android:focusable="true"  
  22.         android:focusableInTouchMode="true"  
  23.         android:marqueeRepeatLimit="marquee_forever"  
  24.         android:padding="5dp"  
  25.         android:textColor="#000"  
  26.         android:singleLine="true"/> -->  
  27.   
  28.     <com.wuyudong.mobilesafe.view.FocusTextView  
  29.         android:text="這是一個跑馬燈,這是一個跑馬燈,這是一個跑馬燈,這是一個跑馬燈,這是一個跑馬燈,"  
  30.         android:layout_width="match_parent"  
  31.         android:layout_height="wrap_content"  
  32.         android:ellipsize="marquee"  
  33.         android:marqueeRepeatLimit="marquee_forever"  
  34.         android:padding="5dp"  
  35.         android:textColor="#000"  
  36.         android:singleLine="true">  
  37.     </com.wuyudong.mobilesafe.view.FocusTextView>  
  38.   
  39. </LinearLayout>  

  總結一下自定義控件

  自定義控件編寫流程

  創建一個默認就能獲取焦點的TextView

  1、創建一個類繼承至TextView,FocusTextView

  2、重寫其構造方法

Java代碼
  1. public class FocusTextView extends TextView {  
  2.   
  3.     // 使用在通過java代碼創建控件  
  4.     public FocusTextView(Context context) {  
  5.   
  6.         super(context);  
  7.     }  
  8.   
  9.     // 由系統調用(帶屬性+上下文環境構造方法)  
  10.     public FocusTextView(Context context, AttributeSet attrs) {  
  11.   
  12.         super(context, attrs);  
  13.     }  
  14.   
  15.     // 由系統調用(帶屬性+上下文環境構造方法+布局文件中定義樣式文件構造方法)  
  16.     public FocusTextView(Context context, AttributeSet attrs, int defStyle) {  
  17.         super(context, attrs, defStyle);  
  18.     }  
  19.   
  20.     // 重寫獲取焦點的方法  
  21.     @Override  
  22.     public boolean isFocused() {  
  23.         // return super.isFocused();  
  24.         return true;  
  25.     }  
  26. }  

  3、將原有TextView上的isFocus方法默認修改為,能夠獲取焦點

Java代碼
  1. // 重寫獲取焦點的方法  
  2. @Override  
  3. public boolean isFocused() {  
  4.     // return super.isFocused();  
  5.     return true;  
  6. }  

  4.使用過程

  獲取當前類的全路徑名稱,作為xml中的標簽存在,其余屬性的使用方式和TextView一致

  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved