Android中自定义属性(attrs.xml,TypedArray的使用)
做Android布局是件很享受的事,這得益于他良好的xml方式。使用xml可以快速有效的為軟件定義界面??墒怯袝r(shí)候我們總感覺官方定義的一些基本組件不夠用,自定義組件就不可避免了。那么如何才能做到像官方提供的那些組件一樣用xml來定義他的屬性呢?現(xiàn)在我們就來討論一下他的用法。
1、添加文件attrs.xml,位于res\values目錄下:
2、創(chuàng)建自定義控件:
按 Ctrl+C 復(fù)制代碼 按 Ctrl+C 復(fù)制代碼3、在Activity布局文件中使用自定義控件:
按 Ctrl+C 復(fù)制代碼 按 Ctrl+C 復(fù)制代碼?
附:Android中自定義屬性的格式詳解
1. reference:參考某一資源ID。
??? (1)屬性定義:
??????????? <declare-styleable name = "名稱">
?????????????????? <attr name = "background" format = "reference" />
??????????? </declare-styleable>
??? (2)屬性使用:
???????????? <ImageView
???????????????????? android:layout_width = "42dip"
???????????????????? android:layout_height = "42dip"
???????????????????? android:background = "@drawable/圖片ID"
???????????????????? />
2. color:顏色值。
??? (1)屬性定義:
??????????? <declare-styleable name = "名稱">
?????????????????? <attr name = "textColor" format = "color" />
??????????? </declare-styleable>
??? (2)屬性使用:
??????????? <TextView
???????????????????? android:layout_width = "42dip"
???????????????????? android:layout_height = "42dip"
???????????????????? android:textColor = "#00FF00"
???????????????????? />
3. boolean:布爾值。
??? (1)屬性定義:
??????????? <declare-styleable name = "名稱">
?????????????????? <attr name = "focusable" format = "boolean" />
??????????? </declare-styleable>
??? (2)屬性使用:
??????????? <Button
??????????????????? android:layout_width = "42dip"
??????????????????? android:layout_height = "42dip"
??????????????????? android:focusable = "true"
??????????????????? />
4. dimension:尺寸值。
??? (1)屬性定義:
??????????? <declare-styleable name = "名稱">
?????????????????? <attr name = "layout_width" format = "dimension" />
??????????? </declare-styleable>
??? (2)屬性使用:
??????????? <Button
??????????????????? android:layout_width = "42dip"
??????????????????? android:layout_height = "42dip"
??????????????????? />
5. float:浮點(diǎn)值。
??? (1)屬性定義:
??????????? <declare-styleable name = "AlphaAnimation">
?????????????????? <attr name = "fromAlpha" format = "float" />
?????????????????? <attr name = "toAlpha" format = "float" />
??????????? </declare-styleable>
??? (2)屬性使用:
??????????? <alpha
?????????????????? android:fromAlpha = "1.0"
?????????????????? android:toAlpha = "0.7"
?????????????????? />
6. integer:整型值。
??? (1)屬性定義:
??????????? <declare-styleable name = "AnimatedRotateDrawable">
?????????????????? <attr name = "visible" />
?????????????????? <attr name = "frameDuration" format="integer" />
?????????????????? <attr name = "framesCount" format="integer" />
?????????????????? <attr name = "pivotX" />
?????????????????? <attr name = "pivotY" />
?????????????????? <attr name = "drawable" />
??????????? </declare-styleable>
??? (2)屬性使用:
??????????? <animated-rotate
?????????????????? xmlns:android = "http://schemas.android.com/apk/res/android"?
?????????????????? android:drawable = "@drawable/圖片ID"?
?????????????????? android:pivotX = "50%"?
?????????????????? android:pivotY = "50%"?
?????????????????? android:framesCount = "12"?
?????????????????? android:frameDuration = "100"
?????????????????? />
7. string:字符串。
??? (1)屬性定義:
??????????? <declare-styleable name = "MapView">
?????????????????? <attr name = "apiKey" format = "string" />
??????????? </declare-styleable>
??? (2)屬性使用:
??????????? <com.google.android.maps.MapView
??????????????????? android:layout_width = "fill_parent"
??????????????????? android:layout_height = "fill_parent"
??????????????????? android:apiKey = "0jOkQ80oD1JL9C6HAja99uGXCRiS2CGjKO_bc_g"
??????????????????? />
8. fraction:百分?jǐn)?shù)。
??? (1)屬性定義:
??????????? <declare-styleable name="RotateDrawable">
?????????????????? <attr name = "visible" />
?????????????????? <attr name = "fromDegrees" format = "float" />
?????????????????? <attr name = "toDegrees" format = "float" />
?????????????????? <attr name = "pivotX" format = "fraction" />
?????????????????? <attr name = "pivotY" format = "fraction" />
?????????????????? <attr name = "drawable" />
??????????? </declare-styleable>
??? (2)屬性使用:
??????????? <rotate? xmlns:android = "http://schemas.android.com/apk/res/android"
???????????? android:interpolator = "@anim/動(dòng)畫ID"
???????????????? android:fromDegrees = "0"
???????????? android:toDegrees = "360"
???????????????? android:pivotX = "200%"
???????????????? android:pivotY = "300%"
???????????? android:duration = "5000"
???????????????? android:repeatMode = "restart"
???????????????? android:repeatCount = "infinite"
?????????????????? />
9. enum:枚舉值。
??? (1)屬性定義:
??????????? <declare-styleable name="名稱">
?????????????????? <attr name="orientation">
????????????????????????? <enum name="horizontal" value="0" />
????????????????????????? <enum name="vertical" value="1" />
?????????????????? </attr>???????????
??????????? </declare-styleable>
??? (2)屬性使用:
??????????? <LinearLayout
??????????????????? xmlns:android = "http://schemas.android.com/apk/res/android"
??????????????????? android:orientation = "vertical"
??????????????????? android:layout_width = "fill_parent"
??????????????????? android:layout_height = "fill_parent"
??????????????????? >
??????????? </LinearLayout>
10. flag:位或運(yùn)算。
???? (1)屬性定義:
???????????? <declare-styleable name="名稱">
??????????????????? <attr name="windowSoftInputMode">
??????????????????????????? <flag name = "stateUnspecified" value = "0" />
??????????????????????????? <flag name = "stateUnchanged" value = "1" />
??????????????????????????? <flag name = "stateHidden" value = "2" />
??????????????????????????? <flag name = "stateAlwaysHidden" value = "3" />
??????????????????????????? <flag name = "stateVisible" value = "4" />
??????????????????????????? <flag name = "stateAlwaysVisible" value = "5" />
??????????????????????????? <flag name = "adjustUnspecified" value = "0x00" />
??????????????????????????? <flag name = "adjustResize" value = "0x10" />
??????????????????????????? <flag name = "adjustPan" value = "0x20" />
??????????????????????????? <flag name = "adjustNothing" value = "0x30" />
???????????????????? </attr>????????
???????????? </declare-styleable>
???? (2)屬性使用:
??????????? <activity
?????????????????? android:name = ".StyleAndThemeActivity"
?????????????????? android:label = "@string/app_name"
?????????????????? android:windowSoftInputMode = "stateUnspecified | stateUnchanged | stateHidden">
?????????????????? <intent-filter>
????????????????????????? <action android:name = "android.intent.action.MAIN" />
????????????????????????? <category android:name = "android.intent.category.LAUNCHER" />
?????????????????? </intent-filter>
???????????? </activity>
???? 注意:
???? 屬性定義時(shí)可以指定多種類型值。
??? (1)屬性定義:
??????????? <declare-styleable name = "名稱">
?????????????????? <attr name = "background" format = "reference|color" />
??????????? </declare-styleable>
??? (2)屬性使用:
???????????? <ImageView
???????????????????? android:layout_width = "42dip"
???????????????????? android:layout_height = "42dip"
???????????????????? android:background = "@drawable/圖片ID|#00FF00"
???????????????????? />
轉(zhuǎn)載于:https://www.cnblogs.com/exmyth/p/4714930.html
總結(jié)
以上是生活随笔為你收集整理的Android中自定义属性(attrs.xml,TypedArray的使用)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python学习笔记1.1
- 下一篇: android中可以使用bitmap的平