我们在开发中经常需要为了保持应用在不同的移动设备平台下显示统一的UI风格,毕竟各个平台厂商针对界面风格进行自定义导致UI风格千变万化。所以我们需要使用自定义属性。
Step1:资源文件、values.attrs.xml中定义属性
<resources> <declare-styleable name="userDefinedView"> <attr name="Text" format="string"/> </declare-styleable> </resources>
Step2:code in class file
private void getTypedArray(Context context, AttributeSet attrs) { TypedArray a = context.obtainStyledAttributes(attrs, R.styleable.userDefinedView); Text = a.getString(R.styleable.userDefinedView_Text); a.recycle(); } ... private void setTextView(String text) { TextView.setText(text); }
说一下a.recycle()的作用,TypedArray.recycle()是为了将typedArray缓存起来重用,不必每次使用都要重新分配内存。
Step3:应用
<?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" **xmlns:app="http://schemas.android.com/apk/res-auto"** xmlns:tools="http://schemas.android.com/tools" tools:context=".MainActivity"> <com.example.userdefinedClass android:layout_width="fill_parent" android:layout_height="fill_parent" android:id="@+id/definedView" **app:Text="sth...."**/> </RelativeLayout>
这里面加粗的两个地方是我们要自定义属性需要的,通过xmlns:app来定义命名空间,然后在下面就可以使用app:Text即我们自定义的属性了。