Android 自訂控制項

來源:互聯網
上載者:User

標籤:images   article   width   img   dimen   ima   val   group   detail   

 

可以看到QQ上的ToolBar其實就是一個自訂的view,可以看到不同的介面就是簡單地修改了文字而已,在第二張與第三張尤其的明顯,我們就仿QQ的這個Toolbar設定一個自訂控制項

 

在開始之前,首先瞭解一下官方是如何?一個控制項的,比如說一個Linearlayout

它不是有layout_width和layout_height這兩個屬性嗎?其實,這兩個屬性就是官方定義的

 

 

官方的操作其實就是繼承了一個ViewGroup,Linearlayout相當於一個自訂View,其中的方法我們也不用深究,我們開啟Path的那個路徑,可以找到一個atts.xml檔案,開啟我們可以在裡面看到定義了Linearlayout關於layout的屬性,有layout_width和layout_height這幾個屬性,看到這裡我們也就明白了我們在布局檔案中引用要使用的屬性

 

本文開始,我們講解一個自訂控制項的步驟:

1.設計需要使用的屬性

  先將模式切換為project模式

 

建立一個moudle

 

 

修改相關包名,庫名

 

 

這裡選擇第一個,也就是不建立activity介面,之後點擊finish就完成了

 

 依次展開Topbar->res->values,在values建立一個atts.xml檔案

 

 xml檔案代碼如下:

<?xml version="1.0" encoding="utf-8"?><resources>    <declare-styleable name="Topbar">        <attr name="title" format="string"/>        <attr name="titleTextSize" format="dimension"/>        <attr name="titleTextColor" format="color"/>        <attr name="leftTextColor" format="color"/>        <attr name="leftBackgroud" format="reference|color"/>        <attr name="leftText" format="string"/>        <attr name="rightTextColor" format="color"/>        <attr name="rightBackgroud" format="reference|color"/>        <attr name="rightText" format="string"/>    </declare-styleable></resources>

 

深入理解可以看看這一篇 http://blog.csdn.net/zjh_1110120/article/details/50976027

 

2.實現一個我們需要的控制項

 

在topbar的java檔案夾,建立一個Topbar類,使其繼承RelativeLayout

之後,重寫其中帶有兩個參數的構造方法,Attributeset這個類是用來存放之前定義在xml檔案中的各種屬性

 

 

之後,建立一個TypedArray類的對象ta,調用context的obtainStyleAttribute方法,擷取剛才我們建立的atts.xml中的各類屬性,第二個參數Topbar就是上文atts.xml中定義<declare-styleable name="Topbar">

 

之後,便是可以使用TypedArray類中的getxx方法來取得xml中定義的相關屬性,Topbar與atts.xml中定義的屬性使用底線串連

 可以看到有些第二個參數為0,意思就是如果在布局檔案沒有給控制項的屬性沒有設定屬性值,就預設為0

 

還要記得最後需要回收

 深入理解TypedArray及Attributeset相關方法,請看這篇http://blog.csdn.net/lmj623565791/article/details/45022631

之後獲得之前的屬性值,以此設定相關屬性

這裡呢,當我們在布局檔案中使用了這個自訂控制項的屬性時候,這個類就會獲得我們所輸入的屬性值,之後調用上述方法進行設定

到這一步之後,我們還需要將左右button與標題textview放在一個View中,使用LayoutPram的addview方法添加到VIew中

 

 首先聲明三個LayoutPram

進行寬高設定之後,使用addView添加到View當中

 

 到這一步,布局就是完成了,但是還要實現左右button的點擊事件,直接設定一個點擊的監聽器就是完成了

 

但是,這不是我們想要的模板,模板的話,是應該直接在activity中設定監聽器不是更為快捷,而不應該是在控制項這裡寫相關的事件處理,所以,我們得使用介面回調機制

 仿照button設定監聽器的方法,我們可以定義一個介面類topbarClickListener,在其中聲明兩個方法,對應左按鈕的點擊與右按鈕的點擊事件,之後,聲明一個介面類對象listener,建立一個setOnTopbarClickListener方法,在其中將參數傳給之前聲明的listener

之後,修改左右button的點擊事件,使其調用介面裡的方法,這樣就是完成了

 

 

 

三、引用我們的控制項

  引用就是像使用button那樣引用,進行屬性的相關賦值,就如同我們使用button,textview等控制項的屬性一樣

 

 這裡可以看到,有個cus,類似我們使用的android,像系統定義的button等控制項,我們設定它的屬性都是需要寫上android,之前有一句xmlns:android="http://schemas.android.com/apk/res/android"

 這就是說明使用的android本身的控制項屬性,android這個相當於一個名字,我們可以隨便寫,之後將後面的改為res-auto,之後使用我們的自訂屬性就是以我們之前寫的名字為首碼,就如我圖中那樣

 其中cus可以任意指定,但不能與系統的命名空間相同,在android studio中如上 用res-auto,在eclipse中res後需要完整的包名

 

右邊的預覽圖大家也可以看到實際的效果

 

 

 

 

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.