我正在试着弄清楚为什么我的BottomSheetDialog中的最后一个SwitchCompat是绿色而不是黄色(使用布局检查器显示)。
布局检查器说,黄色的另外两个SwitchCompats [在添加到FrameLayout containerMultiFunctionButtonActions的片段中]没有" style / Theme.Design.Light.BottomSheetDialog()&#34 ;
为什么会弄乱我的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之外,它们似乎在其他地方工作正常。
答案 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