日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 >

Android自定义属性

發(fā)布時間:2025/4/16 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Android自定义属性 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

上一篇講解了Android自定義View,這篇來講解一下Android自定義屬性的使用,讓你get新技能.希望我的分享能幫助到大家.


做Android布局是件很享受的事,這得益于他良好的xml方式。使用xml可以快速有效的為軟件定義界面。可是有時候我們總感覺官方定義的一些基本組件不夠用,自定義組件就不可避免了。那么如何才能做到像官方提供的那些組件一樣用xml來定義他的屬性呢?現在我們就來討論一下他的用法。


1、在res/values文件下定義一個attrs.xml文件,代碼如下:

  • <?xml?version="1.0"?encoding="utf-8"?>???
  • <resources>???
  • ????<declare-styleable?name="numText">??
  • ????????<attr?name="numLine"?format="integer"/>???
  • ????????<attr?name="textview_scroll"?format="boolean"></attr>??
  • ????</declare-styleable>???
  • </resources>??

  • 2、在布局xml中如下使用該屬性:

  • <RelativeLayout?xmlns:android="http://schemas.android.com/apk/res/android"??
  • ????xmlns:tools="http://schemas.android.com/tools"??
  • ????xmlns:nl="http://schemas.android.com/apk/res/com.example.myview"??
  • ????android:layout_width="match_parent"??
  • ????android:layout_height="match_parent">??
  • ??
  • ????<com.example.myview.LogicView??
  • ????????android:layout_width="match_parent"??
  • ????????android:layout_height="match_parent"??
  • ????????nl:numLine="5"??
  • ????????nl:textview_scroll="true"/>??
  • ??
  • </RelativeLayout>??


  • 3、在自定義組件中,可以如下獲得xml中定義的值:

  • //獲取自定義屬性的值??
  • TypedArray?typedArray=context.obtainStyledAttributes(attrs,?R.styleable.numText);??
  • numLine=typedArray.getInt(R.styleable.numText_numLine,?1);??
  • textviewScroll=typedArray.getBoolean(R.styleable.numText_textview_scroll,?true);??
  • typedArray.recycle();??
  • 就這么簡單的三步,即可完成對自定義屬性的使用,好了,基本用法已經講完了,現在來看看一些注意點和知識點吧。


    4. 首先來看看attrs.xml文件。
    該文件是定義屬性名和格式的地方,需要用<declare-styleable name="numText"></declare-styleable>包圍所有屬性。其中name為該屬性集的名字,主要用途是標識該屬性集。那在什么地方會用到呢?主要是在第三步??吹經]?在獲取某屬性標識時,用到"R.styleable.numText_numLine",很顯然,他在每個屬性前面都加了"numText_"。


    5.在來看看各種屬性都有些什么類型吧:string , integer , dimension , reference , color , enum.

    前面幾種的聲明方式都是一致的,例如:<attr name="numLine" format="integer"/>。?

    <attr name="testEnum"> <enum name="fill_parent" value="-1"/> <enum name="wrap_content" value="-2"/> </attr>

    只有enum是不同的,用法舉例:
    如果該屬性可同時傳兩種不同的屬性,則可以用“|”分割開即可。



    6.讓我們再來看看布局xml中需要注意的事項。首先得聲明一下:xmlns:nl=http://schemas.android.com/apk/res/com.example.myview
    注意,“nl”可以換成其他的任何名字,后面的url地址必須最后一部分必須用上自定義組件的包名。自定義屬性了,在屬性名前加上“nl”即可。


    7.最后來看看java代碼中的注意事項。在自定義組件的構造函數中,用

  • TypedArray?typedArray=context.obtainStyledAttributes(attrs,?R.styleable.numText);??
  • 來獲得對屬性集的引用,然后就可以用“a”的各種方法來獲取相應的屬性值了。這里需要注意的是,如果使用的方法和獲取值的類型不對的話,則會返回默認值。因此,如果一個屬性是帶兩個及以上不用類型的屬性,需要做多次判斷,知道讀取完畢后才能判斷應該賦予何值。當然,在取完值的時候別忘了回收資源哦!


    效果圖跟我上一篇自定義View的一樣,我是在那個基礎上進行修改的


    我參考的博客鏈接:http://www.cnblogs.com/ufocdy/archive/2011/05/27/2060221.html


    點擊下載源碼

    總結

    以上是生活随笔為你收集整理的Android自定义属性的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。