Androidカスタムコントロール基本フロー
3842 ワード
カスタムコントロールについて、この文は簡潔で、いいですね.文章はCSDN殇雲に由来します!
>>>>>>>>>>>>>>>>>>>>
Androidではコントロールをカスタマイズできますが、これらのカスタマイズされた空間にいくつかの属性を加える必要がある場合があります.Javaコードで属性変数を定義できるのは問題ありませんが、XMLファイルではどのように属性を使用しますか?では、XMLファイルでコントロール属性をカスタマイズする必要があります.(D:android-sdkplatformsandroid-16dataresvaluesattrs.xml参照、Androidシステムの属性定義のファイルのみ)
CommonTitleカスタムコントロールを書いたら
このCommonTitleには3つの属性があります:textColor,textSize,text
レイアウトファイルでこのCommonTitleを使用する場合、この3つのプロパティにどのように値を設定しますか?Android:textColorを思い出すかもしれませんが、これは私たちが自分で書いたコントロールなので、android:textColorを設定しても役に立たないので、自分で属性を定義してもいいですか?例えばmyAndroid:textColor、答えは完全にいいです!
一、カスタムコントロール属性を定義するにはres/valuesファイルの下でattrsを定義する必要がある.xmlファイル、コードは次のとおりです.
3つのコントロールプロパティをカスタマイズしました
二、レイアウトxmlでこの属性を以下のように使用する.
三、カスタムコンポーネントでは、xmlで定義された値を以下のように取得できます.
以上の3つのステップでカスタムプロパティの作成と使用を完了しました.
まずattrsを見てみましょうxmlファイル
のnameはjavaコードで使用されます.手順3を参照してください.
属性のformartには次のようなものがあります.
string , integer , dimension , reference , color , enum.
前のいくつかの宣言方式は一致しています.たとえば、です.enumだけが異なります.使用例:
この属性が2つの異なる属性を同時に伝えることができる場合は、"|"で分割すればよい.
レイアウトxmlで注意すべき点を見てみましょう.
まず、xmlns:myAndroid=http://schemas.android.com/apk/res/com.tianjf「myAndroid」は他の任意の名前に変更できます.後のurlアドレスは、最後の部分にカスタムコンポーネントのパッケージ名を使用する必要があります.属性をカスタマイズして、属性名に「myAndroid」をつければいいです.
最後にjavaコードの注意点を見てみましょう.
カスタムコンポーネントのコンストラクション関数で、
に表示されます.ここで注意したいのは、使用するメソッドと取得値のタイプが間違っている場合、デフォルト値が返されます.したがって,1つの属性が2つ以上のタイプを持たない属性であれば,読み取りが完了してからどの値を付与すべきかを判断するために何度も判断する必要がある.もちろん、値を取ったときにリソースを回収するのを忘れないでください.
>>>>>>>>>>>>>>>>>>>>
Androidではコントロールをカスタマイズできますが、これらのカスタマイズされた空間にいくつかの属性を加える必要がある場合があります.Javaコードで属性変数を定義できるのは問題ありませんが、XMLファイルではどのように属性を使用しますか?では、XMLファイルでコントロール属性をカスタマイズする必要があります.(D:android-sdkplatformsandroid-16dataresvaluesattrs.xml参照、Androidシステムの属性定義のファイルのみ)
CommonTitleカスタムコントロールを書いたら
public class CommonTitle extends LinearLayout {
private Color textColor;
private float textSize;
private String text;
}
このCommonTitleには3つの属性があります:textColor,textSize,text
レイアウトファイルでこのCommonTitleを使用する場合、この3つのプロパティにどのように値を設定しますか?Android:textColorを思い出すかもしれませんが、これは私たちが自分で書いたコントロールなので、android:textColorを設定しても役に立たないので、自分で属性を定義してもいいですか?例えばmyAndroid:textColor、答えは完全にいいです!
一、カスタムコントロール属性を定義するにはres/valuesファイルの下でattrsを定義する必要がある.xmlファイル、コードは次のとおりです.
<?xml version="1.0" encoding="utf-8"?>
<resources>
<declare-styleable name="CommonTitle">
<attr name="text" format="string"></attr>
<attr name="textColor" format="color"></attr>
<attr name="textSize" format="dimension"></attr>
</declare-styleable>
</resources>
3つのコントロールプロパティをカスタマイズしました
二、レイアウトxmlでこの属性を以下のように使用する.
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:myAndroid="http://schemas.android.com/apk/res/com.tianjf"
android:layout_width="fill_parent"
android:layout_height="fill_parent" >
<com.tianjf.view.CommonTitle
android:layout_width="fill_parent"
android:layout_height="50dip"
myAndroid:text="@string/str_weightlist_title"
myAndroid:textColor="@android:color/darker_gray"
myAndroid:textsize="@dimen/weight_list_title_text_size" />
</LinearLayout>
三、カスタムコンポーネントでは、xmlで定義された値を以下のように取得できます.
public CommonTitle(Context context, AttributeSet attrs) {
super(context, attrs);
mContext = context;
TypedArray a = context.obtainStyledAttributes(attrs, R.styleable.CommonTitle);
mText = a.getString(R.styleable.CommonTitle_text);
mTextColor = a.getColor(R.styleable.CommonTitle_textColor,
0XFFFFFFFF);
mTextSize = a.getDimensionPixelSize(R.styleable.CommonTitle_textSize, 0);
a.recycle();
}
以上の3つのステップでカスタムプロパティの作成と使用を完了しました.
まずattrsを見てみましょうxmlファイル
属性のformartには次のようなものがあります.
string , integer , dimension , reference , color , enum.
前のいくつかの宣言方式は一致しています.たとえば、
<attr name="testEnum">
<enum name="fill_parent" value="-1"/>
<enum name="wrap_content" value="-2"/>
</attr>
この属性が2つの異なる属性を同時に伝えることができる場合は、"|"で分割すればよい.
レイアウトxmlで注意すべき点を見てみましょう.
まず、xmlns:myAndroid=http://schemas.android.com/apk/res/com.tianjf「myAndroid」は他の任意の名前に変更できます.後のurlアドレスは、最後の部分にカスタムコンポーネントのパッケージ名を使用する必要があります.属性をカスタマイズして、属性名に「myAndroid」をつければいいです.
最後にjavaコードの注意点を見てみましょう.
カスタムコンポーネントのコンストラクション関数で、
TypedArray a = context.obtainStyledAttributes(attrs,R.styleable.CommonTitle);
に表示されます.ここで注意したいのは、使用するメソッドと取得値のタイプが間違っている場合、デフォルト値が返されます.したがって,1つの属性が2つ以上のタイプを持たない属性であれば,読み取りが完了してからどの値を付与すべきかを判断するために何度も判断する必要がある.もちろん、値を取ったときにリソースを回収するのを忘れないでください.