与兄弟片段相比,BottomSheetDialog中的SwitchCompat错误的主题颜色

时间:2017-10-05 21:35:31

标签: android android-layout bottom-sheet

green colored SwitchCompat

我正在试着弄清楚为什么我的BottomSheetDialog中的最后一个SwitchCompat是绿色而不是黄色(使用布局检查器显示)。

布局检查器说,黄色的另外两个SwitchCompats [在添加到FrameLayout containerMultiFunctionButtonActions的片段中]没有" style / Theme.Design.Light.BottomSheetDialog()&#34 ;

yellow colored SwitchCompat

为什么会弄乱我的SwitchCompat?

正确着色的SwitchCompats不会覆盖任何样式/主题,也不会覆盖它们和FrameLayout containerMultiFunctionButtonActions之间的任何元素,所以对我来说,我认为我已经清楚并成功地设置了样式/主题。

这是我的布局:

...

<TableRow>

    <LinearLayout
        android:id="@+id/groupMultiFunctionButton"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_marginBottom="4dp"
        android:layout_marginTop="4dp"
        android:layout_span="2"
        android:orientation="vertical"
        android:visibility="visible"
        >

        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:gravity="center_vertical"
            android:orientation="horizontal"
            >

            <TextView
                android:id="@+id/textMultiFunctionButton"
                android:layout_width="0dp"
                android:layout_height="wrap_content"
                android:layout_weight="1"
                android:text="@string/multi_function_button"
                android:textAppearance="?android:attr/textAppearanceMedium"
                android:textColor="@color/app_primary_text"
                />

        </LinearLayout>

        <FrameLayout
            android:id="@+id/containerMultiFunctionButtonActions"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            app:layout_behavior="@string/appbar_scrolling_view_behavior"
            />

        <FrameLayout
            android:layout_width="match_parent"
            android:layout_height="1dp"
            android:layout_marginBottom="8dp"
            android:layout_marginEnd="4dp"
            android:layout_marginStart="4dp"
            android:background="@color/pb_gray_light"
            />

    </LinearLayout>

</TableRow>

<TableRow>

    <android.support.v7.widget.SwitchCompat
        android:id="@+id/switchLost"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_span="2"
        android:text="Why am I green?!?!?!"
        android:textAppearance="?android:attr/textAppearanceMedium"
        android:textColor="@color/pb_action_item_text"
        />
        <!--
        NOTE: textAppearance and textColor understandably have no effect on the switch color
        -->

</TableRow>

...

调试这个还需要其他什么吗? 我应该真的发表我的风格/主题吗? 他们到处都是,但除了这个BottomSheetDialog之外,它们似乎在其他地方工作正常。

2 个答案:

答案 0 :(得分:6)

我同意firmware但最简单的方法来符合BottomSheetDialogFragment

主题是设置

android:theme="@style/AppTheme"

BottomSheetDialogFragment的xml。

的根元素中

答案 1 :(得分:4)

正如您通过布局检查器找到的那样,您的交换机将应用不同的主题。

兄弟片段中的开关只是拾取你的应用程序和你活动的主题,而底页中的开关则另外拾取了底页的主题。

主题的整体概念是它们影响所有孩子的属性,因此SwitchCompat中定义的Theme.Design.Light.BottomSheetDialog使用的任何属性都有可能在您的开关位于底页(与不在底页内的开关相比)。

如果你看一下这个主题的来源(并遵循父主题链),你最终会看到这个:

<style name="Base.V7.Theme.AppCompat.Light" parent="Platform.AppCompat.Light">
    ...
    <item name="colorAccent">@color/accent_material_light</item>
    ...
</style>

不幸的是,colorAccent是定义开关打开时颜色的原因,而底页的主题是设置它。

您可以通过更改colorAccent的{​​{1}}值来解决此问题。您有很多 how 的选择,但最简单的方法是创建自己的样式资源并使用SwitchCompat属性将其应用于您的交换机。像这样:

android:theme