8

次のように、カスタム属性を作成して、通常EditTextsの属性に適用できます。

<EditText
     android:id="@+id/field1"
     custom:attr1="whatever"
     (...)
<EditText
     android:id="@+id/field2"
     custom:attr1="whatever2"
     (...)

私の質問: を拡張するクラスを作成せずに、これらのカスタム属性の値を読み取ることはできますEditTextか? つまり、 my からカスタム属性を読み取りたいのですActivityが、これまでに見た例では、次のようにカスタム ビューのコンストラクターから値を読み取る必要があります:カスタム属性の定義

4

2 に答える 2

8

私の質問:EditTextを拡張するクラスを作成せずに、これらのカスタム属性の値を読み取ることはできますか?

はい、クラスを拡張せずにこれらの属性を取得できます。このために、がレイアウトファイルを解析するために使用する特別なセットをFactory使用できます。このようなもの:LayoutInflaterActivity

super.onCreate(savedInstanceState);
getLayoutInflater().setFactory(new CustomAttrFactory());
setContentView(R.layout.the_layout);

ここで、CustomAttrFactoryは次のようになります。

public static class CustomAttrFactory implements Factory {

    @Override
    public View onCreateView(String name, Context context,
            AttributeSet attrs) {
        String attributeValue = attrs
                .getAttributeValue(
                        "http://schemas.android.com/apk/res/com.luksprog.droidproj1",
                        "attrnew");
        Log.e("ZXX", "" + attributeValue);
        // if attributeValue is non null then you know the attribute is
        // present on this view(you can use the name to identify the view,
        // or its id attribute)
        return null;
    }
}

アイデアはブログ投稿から来ています、あなたは追加情報のためにそれを読むことを望むかもしれません。

また、そのカスタム属性(または他の属性がある場合は属性)に応じてandroid:tag="whatever"、追加のデータを渡すために使用できます(後でActivitywithで取得しますview.getTag())。

これらのカスタム属性を使用せず、現在のアプローチを再考することをお勧めします。

于 2013-01-15T16:03:23.107 に答える
0

いいえ、できません。ソースEditTextとその親を確認しましたが、後で使用できるように、インスタンス プロパティへのカスタム属性を格納する場所が見つかりませんでした。したがって、拡張する独自のクラスを作成する必要があると思いますEditText

于 2013-01-15T14:06:07.610 に答える