Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> 關於Android編程 >> 安卓(Android) 自定義控件(View) 新手教學

安卓(Android) 自定義控件(View) 新手教學

編輯:關於Android編程

作為一只安卓自學的小白,今天第一天發表微博還是有點小激動的,好了,廢話少說下面開始我的安卓自定義控件知識總結。我的demo是一個自定義的TopBar,左邊一個Button按鈕,中間是一個標題,右邊也是一個Button按鈕。在安卓開發中自定義控件的技術是一個項目中不可缺少的一部分,下面我就用我的小demo一步步詳細介紹,麻雀雖小五髒俱全,相信看完這篇文章對自定義控件肯定會有一個很好的掌握。

首先來看一下我的demo的效果圖:
這裡寫圖片描述

安卓自定義控件基本可以分為三大步驟:

1、在xml文件中設計控件需要的屬性 2、定義一個類獲取xml的屬性實現View 3、引用自定義View

1.在xml文件中設計控件需要的屬性

首先在res/values目錄下新建一個xml文件atts.xml。代碼如下



    
         //中間標題的文本內容。 format中文意思是格式,也就是我們所說的類型               
         //中間標題文本大小
           //中間標題文本顏色
            //左邊按鈕的文本顏色
           //左邊按鈕的背景
           //左邊按鈕的文本
            //右邊按鈕的文本顏色
          // 右邊按鈕的背景
           //右邊按鈕的文本
    

2、定義一個類獲取xml的屬性實現View

新建一個類名稱為TopBar並繼承RelativeLayout 實現構造函數 public TopBar(Context context, AttributeSet attrs),

這裡一定要注意構造函數有兩個參數代碼如下:

package com.example.test;

import android.annotation.SuppressLint;
import android.content.Context;
import android.content.res.TypedArray;
import android.graphics.drawable.Drawable;
import android.util.AttributeSet;
import android.view.Gravity;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Button;
import android.widget.RelativeLayout;
import android.widget.TextView;

public class TopBar extends RelativeLayout {
    // 定義顯示的控件
    private Button leftButton, rightButton;
    private TextView tvTittle;

    // 左邊Button的屬性
    private int leftTextColor;
    private Drawable leftBackground;
    private String leftText;

    // 右邊Button的屬性
    private int rightTextColor;
    private Drawable rightBackground;
    private String rightText;

    // 中間Title的屬性
    private String tittle;
    private float tittleTextSize;
    private int tittleTextColor;
    // 設置三個控件的格式 或者說是布局  LayoutParams可以設置左右按鈕和中間文本的布局
    private LayoutParams leftParams, rightParams, tittleParams;


    /**
     * 在構造函數中完成控件的初始化 獲取xml中的屬性  並將xml中的屬性賦值給我們在類中定義的與之對應的變量
     * 
     * @param context
     * @param attrs
     */
    @SuppressLint("NewApi")
    public TopBar(Context context, AttributeSet attrs) {
        super(context, attrs);
        //重要的數據結構   通過TypedArray我們可以獲取到atts.xml文件中的屬性內容  
        TypedArray ta = context.obtainStyledAttributes(attrs,
                R.styleable.TopBar);                          *//R.styleable.TopBar就是xml文件中定義的名稱*
        leftTextColor = ta.getColor(R.styleable.TopBar_leftTextColor, 0);   *//TopBar_leftTextColor:安卓系統自動把我們atts.xml中定義的屬性重新命名  命名規則:控件名稱+下劃線+屬性名稱*
        leftBackground = ta.getDrawable(R.styleable.TopBar_leftBackground);
        leftText = ta.getString(R.styleable.TopBar_leftText);

        rightTextColor = ta.getColor(R.styleable.TopBar_rightTextColor, 0);
        rightBackground = ta.getDrawable(R.styleable.TopBar_rightBackground);
        rightText = ta.getString(R.styleable.TopBar_rightText);

        tittle = ta.getString(R.styleable.TopBar_tittle);
        tittleTextColor = ta.getColor(R.styleable.TopBar_tittleTextColor, 0);
        tittleTextSize = ta.getDimension(R.styleable.TopBar_tittleTextSize, 0);

        ta.recycle();//回收系統資源


        *//因為不是Activity不能用findViewById(),   所以我們new出三個控件*
        leftButton = new Button(context);
        rightButton = new Button(context);
        tvTittle = new TextView(context);

        //為左邊Button設置我們在xml文件中自定義的屬性
        leftButton.setTextColor(leftTextColor);
        leftButton.setBackground(leftBackground);
        leftButton.setText(leftText);

        //為右邊Button設置我們在xml文件中自定義的屬性
        rightButton.setTextColor(rightTextColor);
        rightButton.setBackground(rightBackground);
        rightButton.setText(rightText);

        //為中間Tittle設置我們在xml文件中自定義的屬性
        tvTittle.setText(tittle);
        tvTittle.setTextColor(tittleTextColor);
        tvTittle.setTextSize(tittleTextSize);
        tvTittle.setGravity(Gravity.CENTER);    //布局為居中

        setBackgroundColor(0xFFF59563);   //設置TopBar的背景顏色

        // 設置左邊Button的布局
        // 寬:WRAP_CONTENT 高:WRAP_CONTENT 布局:居左對齊
        //addRule()方法可以設置Button的布局
        leftParams = new LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT,
                ViewGroup.LayoutParams.WRAP_CONTENT);
        leftParams.addRule(RelativeLayout.ALIGN_PARENT_LEFT, TRUE);
        addView(leftButton, leftParams);

        // 右邊按鈕的屬性
        // 寬:WRAP_CONTENT 高:WRAP_CONTENT 布局:居右對齊
        rightParams = new LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT,
                ViewGroup.LayoutParams.WRAP_CONTENT);
        rightParams.addRule(RelativeLayout.ALIGN_PARENT_RIGHT, TRUE);
        addView(rightButton, rightParams);

        // 中間Tittle的屬性
        tittleParams = new LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT,
                ViewGroup.LayoutParams.MATCH_PARENT);
        tittleParams.addRule(RelativeLayout.CENTER_IN_PARENT, TRUE);
        addView(tvTittle, tittleParams);


    }

}

3、引用自定義View

在上述兩步中,我們就已經完成了自定義控件,下邊最重要的就是該怎麼用它了,其實用法和我們平時基本的View用法是一樣的,在activity_main.xml文件中只需要我們加上一點東西即可。還是看代碼:



    **//開始使用自定義View,注意要加上完整的類名   注意是類名**
    


好了,到這裡我相信你的app就應該已經能夠跑起來了 哈哈 是不是很簡單,,,下一篇我會進階繼續講一下如何給自定義控件設置監聽事件,用接口回調機制完成Button的onClick()方法。加油!

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