13

我正在尝试将按钮设置为看起来像我在Android Full Width ICS 风格 Minimalist Bottom ButtonsViews中询问的那些。

我已经成功了,任何有兴趣的人都可以使用以下 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>

一个问题。eclipse 内容辅助不知道以下资源解析发生了什么:

style="?android:attr/buttonBarButtonStyle"

我熟悉典型的分辨率(eclipse的内容助手知道)

style=@android/style/...

...但我不清楚两者之间的区别。似乎某些样式属性出现在一个中,但没有出现在另一个中。例如,以下内容不能解决任何问题:

style=@android:attr/buttonBarStyle

这也不是:

style="@android:style/buttonBarStyle

所以我想这里有两个问题:

  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 回答