属性をスタイル可能と宣言することとの間には、次の違いがあると思います。
attrs.xmlでは、直接「リソース」セクション内または「宣言-styleable」内のいずれか、カスタム属性を宣言することができます。
<?xml version="1.0" encoding="utf-8"?>
<resources>
<attr name="attrib1" format="string" />
<declare-styleable name="blahblah">
<attr name="attrib2" format="string" />
</declare-styleable>
はだから今、私たちは「非styleableとして「attrib1」を定義しましたattrib2 "をスタイル可能にします。
<com.custom.ViewClass attrib1="xyz" attrib2="abc"/>
あなたはstyle.xml
宣言内「styleable」属性「attrib2」を使用することができます。
layout/someactivity.xml
では、我々は、直接(必要な名前空間を)これらの属性を使用することはできません。ここでも、(レイアウトXMLで名前空間が使用されたとしても)ここでは名前空間は必要ありません。
<style name="customstyle" parent="@android:style/Widget.TextView">
<item name="attrib2">text value</item>
<!-- customize other, standard attributes too: -->
<item name="android:textColor">@color/white</item>
</style>
次に、スタイルごとの属性を設定することもできます。
<com.custom.CustomView attrib1="xyz" style="@style/customstyle"/>
私たちがこれを行うことを想定してみましょう:私たちは、XMLで直接attrib1
を設定し、我々はスタイルでattrib2
を設定します。
「blahblah
」は、これらの属性を使用するカスタム表示クラスの名前である必要があり、レイアウトXMLのカスタム属性を参照するために名前空間を使用する必要があるという記述があります。しかし、これのどれも必要ではないようです。
styleableと非styleableとの違いは、ことのようです:あなたは「style.xml
」宣言でstyleable属性を使用することができます
- 。
- カスタムクラスのコンストラクタは、スタイル別の属性を
obtainStyledAttributes()
で、スタイルなしの属性をattr.getAttributeValue()
などと異なる方法で読み込む必要があります。
ほとんどのチュートリアルやWebで見た例では、obtainStyledAttributes()
のみが使用されていました。しかし、これは、スタイルを使用せずに、レイアウトで直接宣言された属性では機能しません。ほとんどのチュートリアルで示されているようにobtainStyledAttributes()
を実行すると、属性attrib1
はまったく取得されません。それはスタイルで宣言されているので、attrib2
しか得られません。 attr.getAttributeValue()
作品を使用して直接法:
public CustomView(Context context, AttributeSet attrs) {
super(context, attrs);
String attrib1 = attrs.getAttributeValue(null, "attrib1");
// do something with this value
}
私たちは「attrib1
」を宣言するために名前空間を使用していないので、我々はgetAttributeValue()
内の名前空間引数としてnull
を渡します。
大変お答えします。私ができるならそれを複数回投票するだろう。 –
正確に私の問題については、クールな答え –
清潔な説明、ポイントにまっすぐ。 – VallaDanger