鍍金池/ 教程/ Android/ Android自定義組件及屬性
Android 應(yīng)用組件
使用布局文件自定義Android組件
Android通知
Android主題示例
Android JetPlayer實(shí)例
Android MediaPlayer(多媒體播放)
Android AbsoluteLayout
Android FrameLayout
Android Gestures/手勢(shì)
Android AutoCompleteTextView(自動(dòng)完成)實(shí)例
Android 資源組織和訪問(wèn)
Android ListView
Android GridView
Android數(shù)據(jù)備份
Android撥打電話
Android發(fā)送短信/SMS
Android ProgressDialog
SimpleCursorAdapter
Android發(fā)送電子郵件
Android Activity
Android TextView
Android事件處理
Android TableLayout
Android加載Spinner
Android內(nèi)容提供者
Android自定義字體
Android Service
Android CheckBox
Android Intent過(guò)濾器
Android LinearLayout
Android登錄實(shí)例
Android RadioButton
Android樣式和主題
Android自定義組件及屬性
Android UI控件
Android Animation(動(dòng)畫)實(shí)例
Android Camera(攝像頭)
Android ToggleButton
Android Clipboard(復(fù)制/剪貼板)
Android音頻捕獲(錄音)
發(fā)布Android應(yīng)用
Android Alertdialog(警告對(duì)話框)
Android圖片效果
Android內(nèi)部存儲(chǔ)
Android基于位置服務(wù)
Android RadioGroup
Android AutoCompleteTextView
Android Bluetooth(藍(lán)牙)實(shí)例
Android RelativeLayout
Android最佳實(shí)踐
Android本地化
Android自定義組件
Android教程
Android 架構(gòu)
Android UI布局
Android Button
Android Hello World示例
Android音頻管理器實(shí)例
ArrayAdapter
Android拖放
Android碎片/片段
Android圖片切換
Android JSON解析器
Android開發(fā)環(huán)境搭建
Android Spinner
Android樣式示例
使用活動(dòng)代碼自定義Android組件
Android ImageButton
Android EditText
Android廣播接收器

Android自定義組件及屬性

下面的例子說(shuō)明了如何使用自定義屬性,并定義一個(gè)簡(jiǎn)單Android的自定義組件。

步驟 描述
1 使用Eclipse IDE創(chuàng)建一個(gè)Android應(yīng)用程序項(xiàng)目,并將它命名為:DateViewDemounder3
2 創(chuàng)建一個(gè) res/values/attrs.xml 文件來(lái)定義數(shù)據(jù)類型以及新屬性
3 創(chuàng)建src/DateView.java文件,并添加定義自定義組件的代碼。這將擴(kuò)展TextView,以有更多的功能來(lái)顯示當(dāng)前的日期。提供的屬性具有解析邏輯AttributeSet作為構(gòu)造函數(shù)的參數(shù)
4 修改 res/layout/activity_main.xml  文件,并添加代碼以及一些默認(rèn)的屬性和新屬性用于創(chuàng)建DateView實(shí)例
5 運(yùn)行該應(yīng)用程序啟動(dòng) Android模擬器并驗(yàn)證應(yīng)用程序所做的修改結(jié)果

下面是修改后的主活動(dòng)文件 src/com.yiibai.dateviewdemo/MainActivity.java 的內(nèi)容。該文件可以包含每一個(gè)生命周期的基本方法。

package com.example.dateviewdemo;

import android.os.Bundle;
import android.app.Activity;
import android.view.Menu;

public class MainActivity extends Activity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    }

    @Override
    public 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;
    }
    
}

下面是 res/values/attrs.xml 文件的內(nèi)容:

<?xml version="1.0" encoding="utf-8"?>
<resources>
   <declare-styleable name="DateView">
   <attr name="delimiter" format="string"/>
   <attr name="fancyText" format="boolean"/>
   </declare-styleable>
</resources>

以下將是新的文件 src/com.yiibai.dateviewdemo/DateView.java 的內(nèi)容,有的附加功能以顯示當(dāng)前日期:

package com.example.dateviewdemo;

import java.text.SimpleDateFormat;
import java.util.Calendar;

import android.content.Context;
import android.content.res.TypedArray;
import android.graphics.Color;
import android.util.AttributeSet;
import android.util.Log;
import android.widget.TextView;

public class DateView extends TextView {
   public String delimiter;
   public boolean fancyText;

   public DateView(Context context) {
      super(context);
      setDate();
   }

   public DateView(Context context, AttributeSet attrs) {
      super(context, attrs);
      TypedArray a = context.obtainStyledAttributes(attrs, 
      R.styleable.DateView );
      final int N = a.getIndexCount();
      for (int i = 0; i < N; ++i)
      {
         int attr = a.getIndex(i);

         switch (attr)
         {
            case R.styleable.DateView_delimiter:
            delimiter