中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

實例講解Android自定義控件

發布時間:2020-09-11 15:13:03 來源:腳本之家 閱讀:213 作者:laozhang 欄目:移動開發

小編在此之前給大家介紹過關于Android自定義控件的用法等,需要的可以參考下:

Android開發之自定義控件用法詳解

詳解Android自定義控件屬性

實例講解Android自定義控件

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

在開始之前,首先了解一下官方是如何實現一個控件的,比如說一個Linearlayout

實例講解Android自定義控件

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

 實例講解Android自定義控件

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

正文開始,我們講解一個自定義控件的步驟:

1.設計需要使用的屬性

先將模式切換為project模式

實例講解Android自定義控件

新建一個moudle

實例講解Android自定義控件

實例講解Android自定義控件

修改相關包名,庫名

實例講解Android自定義控件

實例講解Android自定義控件

這里選擇第一個,也就是不創建activity界面,之后點擊finish就完成了

依次展開Topbar->res->values,在values創建一個atts.xml文件

實例講解Android自定義控件

 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

實例講解Android自定義控件

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

 實例講解Android自定義控件

 

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

實例講解Android自定義控件

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

可以看到有些第二個參數為0,意思就是如果在布局文件沒有給控件的屬性沒有設置屬性值,就默認為0

實例講解Android自定義控件

還要記得最后需要回收

之后獲得之前的屬性值,以此設置相關屬性

實例講解Android自定義控件

這里呢,當我們在布局文件中使用了這個自定義控件的屬性時候,這個類就會獲得我們所輸入的屬性值,之后調用上述方法進行設置

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

 首先聲明三個LayoutPram

實例講解Android自定義控件

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

實例講解Android自定義控件

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

實例講解Android自定義控件

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

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

實例講解Android自定義控件

之后,修改左右button的點擊事件,使其調用接口里的方法,這樣就是完成了

實例講解Android自定義控件

三、引用我們的控件

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

實例講解Android自定義控件

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

 這就是說明使用的android本身的控件屬性,android這個相當于一個名字,我們可以隨便寫,之后將后面的改為res-auto,之后使用我們的自定義屬性就是以我們之前寫的名字為前綴,就如我圖中那樣

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

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

大家在學習后如果有什么心得體會可以在下方直接給我們留言。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

集安市| 丰城市| 从化市| 太原市| 阿尔山市| 亚东县| 余庆县| 浠水县| 凤城市| 贵南县| 克东县| 陆川县| 论坛| 金山区| 上思县| 隆化县| 萍乡市| 壤塘县| 西青区| 全南县| 宣恩县| 临湘市| 扬中市| 辛集市| 清苑县| 博客| 富蕴县| 林芝县| 南川市| 阳东县| 三明市| 张家港市| 林甸县| 馆陶县| 久治县| 犍为县| 太原市| 东安县| 大兴区| 江西省| 靖远县|