ビューのカスタムコントロールプロパティのカスタマイズ
14863 ワード
ビューをカスタマイズする場合、ビューの機能を強くするには、インタフェースの表示に必要な効果をサポートするためにカスタムプロパティをサポートする必要があります.たとえば、android:textColor=「#ffffff」のようにプロパティを定義し、異なる色の表示をサポートする必要があります.プロジェクトではどのように定義しますか.
まずres/valuesディレクトリの下にattrsのxmlファイルを新規作成する必要があります.もちろん、この名前はカスタマイズできますが、属性を繰り返し定義することはできません.
formatで表される属性タイプはboolean,string,integer,dimension,float,reference,color,fraction,enum,flagおよびその混合であってもよい.
(1)booleanはブール値を表し、xx:attr 1=「false」(2)integerは整数型を表し、xx:attr1=「1」(3)dimensionは寸法値を表し、xx:attr1=「42 dp」(4)floatは浮動小数点型を表し、xx:attr1=「0.7」(5)colorは色値を表し、xx:attr1=「#00 FF00」(6)stringは文字列を表し、xx:attr1=「#adbddd」(7)referencen(7)referencen(7)referencen(7)referencen(7)referencen(7)referencen(7)referencen(1)referencenは色値を表し、x:attrx:ateはあるリソースidを参照することを示し、呼び出しは、xx:attr 1=「@drawable/ピクチャID」(8)fractionのようにパーセンテージを表し、呼び出しは、xx:attr 1=「30%」以上のタイプ定義が
(9)enumは列挙値を表し、
xx:attr 1=「horizontal」などの呼び出し
(10)flagはビットまたは演算を表し、
呼び出し:xx:attr 1="stateUnspecified|stateUnchanged|stateHidden"
(11)混合タイプ、定義
呼び出しは、xx:attr 1="@drawable/ピクチャID|#DDFF 00"
このプロパティを定義したら、次のようにViewで使用できます.
ビューを作成すると、xmlファイルでこのビューを定義して使用できます.もちろん、カスタム属性を一緒に使用します.
に気づく
neacyフィールドは自分で定義できます.値はhttp://schemas.android.com/apk/res/現在適用されているパッケージ名を付けると、対応するAttrViewでこれらのプロパティを定義できます.
まずres/valuesディレクトリの下にattrsのxmlファイルを新規作成する必要があります.もちろん、この名前はカスタマイズできますが、属性を繰り返し定義することはできません.
<declare-styleable name="myViewAttrs">
<attr name="String" format="string"/>
<attr name="Boolean" format="boolean"/>
<attr name="Integer" format="integer"/>
<attr name="Dimension" format="dimension"/>
<attr name="Reference" format="reference"/>
<attr name="Fraction" format="fraction"/>
</declare-styleable>
名前フィールドはカスタム名を表しますformatで表される属性タイプはboolean,string,integer,dimension,float,reference,color,fraction,enum,flagおよびその混合であってもよい.
(1)booleanはブール値を表し、xx:attr 1=「false」(2)integerは整数型を表し、xx:attr1=「1」(3)dimensionは寸法値を表し、xx:attr1=「42 dp」(4)floatは浮動小数点型を表し、xx:attr1=「0.7」(5)colorは色値を表し、xx:attr1=「#00 FF00」(6)stringは文字列を表し、xx:attr1=「#adbddd」(7)referencen(7)referencen(7)referencen(7)referencen(7)referencen(7)referencen(7)referencen(1)referencenは色値を表し、x:attrx:ateはあるリソースidを参照することを示し、呼び出しは、xx:attr 1=「@drawable/ピクチャID」(8)fractionのようにパーセンテージを表し、呼び出しは、xx:attr 1=「30%」以上のタイプ定義が
(9)enumは列挙値を表し、
<attr name="enum_attr">
<enum name="horizontal" value="0" />
<enum name="vertical" value="1" />
</attr>
xx:attr 1=「horizontal」などの呼び出し
(10)flagはビットまたは演算を表し、
<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>
呼び出し:xx:attr 1="stateUnspecified|stateUnchanged|stateHidden"
(11)混合タイプ、定義
<declare-styleable name = "combine_type">
<attr name = "background" format = "reference|color" />
</declare-styleable>
呼び出しは、xx:attr 1="@drawable/ピクチャID|#DDFF 00"
このプロパティを定義したら、次のようにViewで使用できます.
TypedArray ta = context.obtainStyledAttributes(attrs, R.styleable.myViewAttrs);
String name = ta.getString(R.styleable.myViewAttrs_String);
boolean _boolean = ta.getBoolean(R.styleable.myViewAttrs_Boolean, false);
int _integer = ta.getInt(R.styleable.myViewAttrs_Integer, -1);
float _demension = ta.getDimension(R.styleable.myViewAttrs_Dimension, 0);
int _reference = ta.getResourceId(R.styleable.myViewAttrs_Integer, -1);
float _fraction = ta.getFraction(R.styleable.myViewAttrs_Fraction, 1, 1, 0);
System.out.println("Name is = " + name);
System.out.println("_boolean is = " + _boolean);
System.out.println("_integer is = " + _integer);
System.out.println("_demension is = " + _demension);
System.out.println("_reference is = " + _reference);
System.out.println("_fraction is = " + _fraction);
ta.recycle();
は、ビューでcontextを通過する.obtainStyleAttributesメソッドは、各プロパティの値を読み取り、コードでこれらの独自定義のプロパティ制御インタフェースの表示効果を使用することができます.taを呼び出すのを覚えています.recyle()は、リソースを回収します.ビューを作成すると、xmlファイルでこのビューを定義して使用できます.もちろん、カスタム属性を一緒に使用します.
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
xmlns:neacy="http://schemas.android.com/apk/res/com.example.testattr"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context="com.example.testattr.MainActivity" >
<com.example.testattr.AttrView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/hello_world"
neacy:String="Hello World, !"
neacy:Boolean="true"
neacy:Integer="17"
neacy:Dimension="99dp"
neacy:Reference="@drawable/ic_launcher"
neacy:Fraction="50%" />
</RelativeLayout>
に気づく
xmlns:neacy="http://schemas.android.com/apk/res/com.example.testattr"
neacyフィールドは自分で定義できます.値はhttp://schemas.android.com/apk/res/現在適用されているパッケージ名を付けると、対応するAttrViewでこれらのプロパティを定義できます.