Android之——自訂複合控制項的實現

來源:互聯網
上載者:User

標籤: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之——自訂複合控制項的實現

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.