13

私は、Android FullWidthICSスタイルのMinimalistBottomButtonsViewsで質問するボタンのようにボタンのスタイルを設定しようとしています。

私は成功しました。興味のある人のために次のxmlを使用しました。

<LinearLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_gravity="bottom"
        android:divider="@android:drawable/divider_horizontal_dark"
        android:gravity="bottom"
        android:orientation="vertical"
        android:paddingTop="16dip"
        android:showDividers="beginning|end" >

        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:measureWithLargestChild="true"
            android:orientation="horizontal"
            android:divider="@android:drawable/divider_horizontal_dark"
            android:showDividers="middle" >                             


            <Button
                android:id="@+id/cancel_button"
                style="?android:attr/buttonBarButtonStyle"
                android:layout_width="0dip"
                android:layout_height="wrap_content"
                android:layout_gravity="left"
                android:layout_weight="1"
                android:maxLines="2"
                android:text="@string/cancel_button" />

            <Button
                android:id="@+id/login_button"
                style="?android:attr/buttonBarButtonStyle"
                android:layout_width="0dip"
                android:layout_height="wrap_content"
                android:layout_gravity="right"
                android:layout_weight="1"
                android:filterTouchesWhenObscured="true"
                android:maxLines="2"
                android:text="@string/login_button" />

        </LinearLayout>
    </LinearLayout>

ただし、1つの質問です。Eclipseコンテンツアシストは、次のリソース解決で何が起こっているのかわかりません。

style="?android:attr/buttonBarButtonStyle"

私は典型的な解像度(Eclipseのコンテンツアシストが認識している)に精通しています

style=@android/style/...

...しかし、私は2つの違いについてははっきりしていません。一部のスタイル属性は一方に表示されますが、もう一方には表示されないようです。たとえば、次のことは何にも解決されません。

style=@android:attr/buttonBarStyle

そしてこれもしません:

style="@android:style/buttonBarStyle

だから私はここで2つの質問を推測します:

  1. なぜリソース参照構文に違いがあるのですか?
  2. attrカテゴリの下にあるスタイルの紛らわしい誤分類の理由。
  3. 再び使用されるattrカテゴリは何ですか?

ありがとう!

4

2 に答える 2

13

SOに関する別の回答から(ここで言い換えます):

IDの前に疑問符を使用するということは、属性をハードコーディングするのではなく、スタイルテーマで定義されているスタイル属性にアクセスすることを意味します。

属性自体を参照するのではなく、テーマ属性を逆参照して、それが指すリソースをフェッチすることと考えてください。

スタイル属性の参照

于 2012-06-22T16:03:39.373 に答える
1

?android:attr / buttonBarButtonStyleまたは単に?android:buttonBarButtonStyle-(attrはオプションです)

<item name="buttonBarButtonStyle">@android:style/Widget.Button</item>

これは、appcompat / res / values /themes.xmlファイル内で定義されている@android:style/Widget.Buttonを内部的に逆参照します。

(?android: )-適用されている現在のテーマの属性の値に常にリンクします。したがって、新しいスタイルを作成してハードコードされた値を提供するのではなく、Androidで定義されたスタイルのみを参照できるようにします。

Google Docによると、「現在のテーマでは、この属性で定義されているスタイルを使用しています」

于 2016-10-05T17:13:46.947 に答える