日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 人文社科 > 生活经验 >内容正文

生活经验

Android 中自定义控件和属性(attr.xml,declare-styleable,TypedArray)的方法和使用

發(fā)布時(shí)間:2023/11/27 生活经验 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Android 中自定义控件和属性(attr.xml,declare-styleable,TypedArray)的方法和使用 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

一、?在res/values?文件下定義一個(gè)attrs.xml?文件.代碼如下:

  1. <?xml?version="1.0"?encoding="utf-8"?> ?
  2. <resources>??
  3. ????<declare-styleable?name="MyView">??
  4. ????????<attr?name="textColor"?format="color"?/>??
  5. ????????<attr?name="textSize"?format="dimension"?/>??
  6. ????</declare-styleable>??
  7. </resources> ?

二、?我們?cè)?strong>MyView.java?代碼編寫如下,其中下面的構(gòu)造方法是重點(diǎn),我們獲取定義的屬性R.sytleable.MyView_textColor,?獲取方法中后面通常設(shè)定默認(rèn)值(float textSize = a.getDimension(R.styleable.MyView_textSize,?36?);?)?防止我們?cè)?strong>xml?文件中沒(méi)有定義.從而使用默認(rèn)值!

MyView?就是定義在<declare-styleable name="MyView?"></declare-styleable>?里的 名字,獲取里面屬性用?名字_ 屬性?連接起來(lái)就可以.TypedArray?通常最后調(diào)用?.recycle()?方法,為了保持以后使用該屬性一致性!

  1. public?MyView(Context?context,AttributeSet?attrs)??
  2. ????{??
  3. ????????super(context,attrs);??
  4. ????????mPaint?=?new?Paint();??
  5. ??????????
  6. ????????TypedArray?a?=?context.obtainStyledAttributes(attrs,??
  7. ????????????????R.styleable.MyView);??
  8. ??????????
  9. ????????int?textColor?=?a.getColor(R.styleable.MyView_textColor,??
  10. ????????????????0XFFFFFFFF);??
  11. ????????float?textSize?=?a.getDimension(R.styleable.MyView_textSize,?36);??
  12. ??????????
  13. ????????mPaint.setTextSize(textSize);??
  14. ????????mPaint.setColor(textColor);??
  15. ??????????
  16. ????????a.recycle();??
  17. ????} ?

MyView.java??MyView控件全部代碼如下?

  1. public?class?MyView?extends?View?{??
  2. ????private?Paint?mPaint;??
  3. ????private?Context?mContext;??
  4. ????private?static?final?String?mString?=?"Welcome?to?Mr?Wei's?blog";??
  5. ??????
  6. ????public?MyView(Context?context)?{??
  7. ????????super(context);??
  8. ????????mPaint?=?new?Paint();??
  9. ????}??
  10. ????public?MyView(Context?context,AttributeSet?attrs)??
  11. ????{??
  12. ????????super(context,attrs);??
  13. ????????mPaint?=?new?Paint();??
  14. ??????????
  15. ????????TypedArray?a?=?context.obtainStyledAttributes(attrs,??
  16. ????????????????R.styleable.MyView);??
  17. ??????????
  18. ????????int?textColor?=?a.getColor(R.styleable.MyView_textColor,??
  19. ????????????????0XFFFFFFFF);??
  20. ????????float?textSize?=?a.getDimension(R.styleable.MyView_textSize,?36);??
  21. ??????????
  22. ????????mPaint.setTextSize(textSize);??
  23. ????????mPaint.setColor(textColor);??
  24. ??????????
  25. ????????a.recycle();??
  26. ????}??
  27. ????@Override??
  28. ????protected?void?onDraw(Canvas?canvas)?{??
  29. ????????//?TODO?Auto-generated?method?stub??
  30. ????????super.onDraw(canvas);??
  31. ????????//設(shè)置填充??
  32. ????????mPaint.setStyle(Style.FILL);??
  33. ??????????
  34. ????????//畫一個(gè)矩形,前倆個(gè)是矩形左上角坐標(biāo),后面?zhèn)z個(gè)是右下角坐標(biāo)??
  35. ????????canvas.drawRect(new?Rect(10,?10,?100,?100),?mPaint);??
  36. ??????????
  37. ????????mPaint.setColor(Color.BLUE);??
  38. ????????//繪制文字??
  39. ????????canvas.drawText(mString,?10,?110,?mPaint);??
  40. ????}??
  41. } ?

三、將我們自定義的MyView?加入布局main.xml?文件中,并且使用自定義屬性,自定義屬性必須加上:

?? ?"?xmlns:test?="http://schemas.android.com/apk/res/com.android.tutor" ?,test是自定義屬性的前綴,com.android.tutor?是我們包名.

main.xml?全部代碼如下:

  1. <?xml???
  2. version="1.0"?encoding="utf-8"?>??
  3. <LinearLayout???
  4. xmlns:android="http://schemas.android.com/apk/res/android"??
  5. ????????????????
  6. xmlns:test="http://schemas.android.com/apk/res/com.android.tutor"??
  7. ????android:orientation="vertical"??
  8. ????android:layout_width="fill_parent"??
  9. ????android:layout_height="fill_parent"??
  10. ????>??
  11. <TextView????
  12. ????android:layout_width="fill_parent"???
  13. ????android:layout_height="wrap_content"???
  14. ????android:text="@string/hello"??
  15. ????/>??
  16. <com.android.tutor.MyView??
  17. ????android:layout_width="fill_parent"???
  18. ????android:layout_height="fill_parent"???
  19. ????test:textSize="20px"??
  20. ????test:textColor="#fff"??
  21. />??
  22. </LinearLayout> ?

?

format就是格式,里面的就是這個(gè)屬性對(duì)應(yīng)的格式,下面列出來(lái)大致的格式有:

?

1. reference:參考某一資源ID,以此類推

(1)屬性定義:

?

?

?

(2)屬性使用:

<imageview< p="">

android:layout_width = "42dip"

android:layout_height = "42dip"

android:background = "@drawable/圖片ID"

/>

2. color:顏色值

?

?

?

3. boolean:布爾值

?

?

?

4. dimension:尺寸值。注意,這里如果是dp那就會(huì)做像素轉(zhuǎn)換

?

?

?

5. float:浮點(diǎn)值。

6. integer:整型值。

7. string:字符串

8. fraction:百分?jǐn)?shù)。

9. enum:枚舉值

10. flag:是自己定義的,類似于 android:gravity="top",就是里面對(duì)應(yīng)了自己的屬性值。

11. reference|color:顏色的資源文件。 12.reference|boolean:布爾值的資源文件

注意://由于reference是從資源文件中獲取:所以在XML文件中寫這個(gè)屬性的時(shí)候必須personattr:name="@string/app_name"這種格式,否則會(huì)出錯(cuò)

轉(zhuǎn)載于:https://www.cnblogs.com/lianghui66/p/4074143.html

總結(jié)

以上是生活随笔為你收集整理的Android 中自定义控件和属性(attr.xml,declare-styleable,TypedArray)的方法和使用的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。