標籤:android 布局 控制項 自訂
轉載請註明出處:http://blog.csdn.net/l1028386804/article/details/47101387
有一定Android開發經驗的童鞋都知道,有時候Android提供的原生視圖無法滿足我們自己項目的業務需求,這就需要我們自己去自訂Android控制項了,在很多情況下,需要我們自己去將很多控制項(Android原生控制項,自訂控制項)組合起來,產生一個新的視圖來滿足我們自己項目的業務需求。好了,本文就是向大家介紹如何自訂Android複合控制項,我在這篇文章中,以一個文字框和按鈕組合成一個複合控制項來向大家介紹如何?Android中的自訂複合控制項的功能。在這個樣本中,點擊按鈕,實現清空文字框資料的功能,好了,咱們還是直接進入主題吧。
一、原理
複合控制項即是指不可分割的,自包含的試圖組,其中包含了多個排列和串連在一起的子視圖。當建立複合控制項時,必須對它包含的視圖的布局,外觀和互動進行定義。複合控制項時通過擴充一個ViewGroup(通常是一個布局)來建立的。因此,要建立一個新的複合控制項,首先要選擇一個最適合放置子控制項的布局類,然後擴充該類。
二、實現1、建立布局檔案
在res/layout目錄下建立布局檔案fuhe_item.xml,這個檔案很簡單,首先以線性布局排列,上面放置一個文字框,文字框下面是一個按鈕控制項。
具體實現的代碼如下:
<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="vertical" > <EditText android:id="@+id/editText" android:layout_width="match_parent" android:layout_height="wrap_content" android:inputType="text"/><Button android:id="@+id/clearButton" android:layout_width="match_parent" android:layout_height="wrap_content" android:text="Clear"/></LinearLayout>
2、建立自訂控制項類ClearableEditText
這個類繼承自LinearLayout,在這個類中引用上面的布局檔案,我們對這個類的建構函式進行重寫,並使用LayoutInflater系統服務中的inflate方法來填充布局資源。inflate方法可以接收一個布局資源,然後返回一個已經被填充的視圖。
對於一些特殊情況,例如,返回的視圖應該是正在建立的類,可以傳入一個父視圖,然後自動的把結果附加給它。
我們這個類中,在構造方法中,填充了布局資源,並得到了它包含的文字框和按鈕控制項,並調用了hookupButton方法,在hookupButton方法中實現點擊按鈕清除文字框資料並提示使用者"文字框資料已經清楚"的功能。
具體實現如代碼所示:
package com.lyz.fuhe.activity;import android.content.Context;import android.view.LayoutInflater;import android.view.View;import android.widget.Button;import android.widget.EditText;import android.widget.LinearLayout;import android.widget.Toast;/** * 自訂複合布局 * @author liuyazhuang * */public class ClearableEditText extends LinearLayout {//文字框private EditText editText;//按鈕private Button clearButton;public ClearableEditText(Context context) {super(context);//使用布局資源填充視圖LayoutInflater mInflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);//載入布局檔案mInflater.inflate(R.layout.fuhe_item, this, true);this.editText = (EditText) findViewById(R.id.editText);this.clearButton = (Button) findViewById(R.id.clearButton);hookupButton(context);}/** * button處理常式 */private void hookupButton(final Context context) {this.clearButton.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {editText.setText("");Toast.makeText(context, "文字框資料已清除", Toast.LENGTH_SHORT).show();}});}}
3、修改MainActivity類
這個類的修改很簡單,我們只需要在onCreate()方法中將原有的setContentView()方法設定的視圖修改為我們自己定義的ClearableEditText對象。
具體實現代碼如下:
package com.lyz.fuhe.activity;import android.os.Bundle;import android.app.Activity;import android.view.Menu;/** * 程式入口MainActivity * @author liuyazhuang * */public class MainActivity extends Activity {@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);//setContentView(R.layout.activity_main);//建立ClearableEditText執行個體對象ClearableEditText editText = new ClearableEditText(this);//將顯示的視圖設定為ClearableEditText對象setContentView(editText);}@Overridepublic boolean onCreateOptionsMenu(Menu menu) {// Inflate the menu; this adds items to the action bar if it is present.getMenuInflater().inflate(R.menu.main, menu);return true;}}
4、AndroidManifest.xml
這個樣本中,不需要提供任何其他權限類別實現,AndroidManifest.xml檔案的內容都是Android自動產生的。
具體實現代碼如下:
<?xml version="1.0" encoding="utf-8"?><manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.lyz.fuhe.activity" android:versionCode="1" android:versionName="1.0" > <uses-sdk android:minSdkVersion="8" android:targetSdkVersion="18" /> <application android:allowBackup="true" android:icon="@drawable/ic_launcher" android:label="@string/app_name" android:theme="@style/AppTheme" > <activity android:name="com.lyz.fuhe.activity.MainActivity" android:label="@string/app_name" > <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> </application></manifest>
三、運行效果
程式運行
文字框輸入資料
點擊按鈕清除文字框資料
四、溫馨提示
本執行個體中,為了方面,我把一些文字直接寫在了布局檔案中和相關的類中,大家在真實的項目中要把這些文字寫在string.xml檔案中,在外部參考這些資源,切記,這是作為一個Android程式員最基本的開發常識和規範,我在這裡只是為了方便直接寫在了類和布局檔案中。
大家可以到http://download.csdn.net/detail/l1028386804/8938835連結擷取完整Android自訂複合控制項原始碼
著作權聲明:本文為博主原創文章,未經博主允許不得轉載。
Android之——自訂複合控制項的實現