使用Android styles.xml时是否存在规则或异常



我正在尝试用一些填充来设计LinearLayout的样式。原因是我有7-8个类似的结构化布局,我希望它们同步,以使调整更容易。

这是我的布局xml:

<LinearLayout
    style="@style/QuestionPane.AnswerPane"
    android:layout_width="match_parent"
    android:layout_height="0dp"
    android:layout_weight="1"
    android:orientation="vertical" >
    <Button
        android:id="@+id/btn_yes"
        style="@style/ButtonStyle"
        android:layout_width="150dp"
        android:layout_height="wrap_content"
        android:layout_marginBottom="5dp"
        android:text="Yes" />
    <Button
        android:id="@+id/btn_no"
        style="@style/ButtonStyle"
        android:layout_width="150dp"
        android:layout_height="wrap_content"
        android:text="No" />
</LinearLayout>

和styles.xml:

<style name="QuestionPane">
    <item name="android:background">@color/question_bg</item>
    <item name="android:padding">10dp</item>
    <item name="android:paddingLeft">50dp</item>
</style>
<style name="QuestionPane.AnswerPane">
    <item name="android:paddingLeft">100dp</item>
    <item name="android:paddingTop">20dp</item>
    <item name="android:paddingBottom">20dp</item>
    <item name="android:gravity">top|left</item>
    <item name="android:background">@color/report_purple</item>
</style>

背景色应用正确。但是,没有应用填充属性。我有带衬垫的纽扣款式,它们很好用。

<style name="ButtonStyle" parent="@android:style/Widget.Button">
    <item name="android:textSize">@dimen/text_middle</item>
    <item name="android:textColor">#FFFFFFFF</item>
    <item name="android:background">@drawable/button_bg</item>
    <item name="android:textColor">@color/button_text</item>
    <item name="android:paddingLeft">30dp</item>
    <item name="android:paddingRight">30dp</item>
</style>

那么这里的问题是什么呢?有什么属性是我无法通过styles.xml实现的吗?

经过一些测试,问题似乎是由于父QuestionPane样式中的android:padding属性而出现的,设置该值会阻止子样式中其他填充属性的任何重写。我不知道为什么会发生这种情况,但我知道如何忽略它,避免android:padding属性,并为每个填充属性设置填充:

<style name="QuestionPane">
    <item name="android:background">@color/question_bg</item>
    <item name="android:paddingTop">10dp</item>
    <item name="android:paddingBottom">10dp</item>
    <item name="android:paddingRight">10dp</item>
    <item name="android:paddingLeft">50dp</item>
</style>

这将使填充显示出来,而不会对当前代码进行其他修改。

最新更新