Androidアプリケーションでスタイルなどをいじり始めましたが、これまでのところすべてが機能しています。「スタイル」を完全に理解しました ガイドのセクション =。
しかし、 このスレッド のように周りを見回すと、2つの違いを実際に理解することはできません(declare-stylable
およびstyle
)。私の理解からdeclare-styleable
は、その中で指定された属性を受け取り、それをスタイリング可能として指定します。次に、コードから必要に応じて属性を変更します。
しかし、これが実際に行われていることである場合、レイアウトで属性を定義する方が簡単ではないでしょうか。またはそれを指定するスタイルを宣言しますか?
属性をスタイリング可能として宣言するかどうかの違いは次のとおりだと思います。
Attrs.xmlでは、「resources」セクション内で直接、または「declare-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>
_
そこで、「attrib1」をスタイリング不可、「attrib2」をスタイリング可能と定義しました。
_layout/someactivity.xml
_では、これらの属性を直接使用できます(名前空間は必要ありません)。
_<com.custom.ViewClass attrib1="xyz" attrib2="abc"/>
_
_style.xml
_宣言内で「styleable」属性「attrib2」を使用できます。ここでも、名前空間は必要ありません(レイアウト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でカスタム属性を参照するには名前空間を使用する必要があるという説明を見てきました。しかし、これはどれも必要ではないようです。
スタイリング可能とスタイリング不可能の違いは次のようです。
style.xml
_」宣言でスタイル設定可能な属性を使用できます。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
を渡します。
これを確認してください スレッド 。
declare-styleable
がないと、新しいカスタムの描画可能な状態を作成することはできません。