Android中不同的colorControlActivated样式

Gui*_*lhE 7 android android-appcompat android-styles android-5.0-lollipop

这是我的应用主题:

<style name="BaseTheme" parent="Theme.AppCompat.Light">
   ...
   <item name="colorControlActivated">@color/default_orange</item>
   ...
</style>
...
<style name="Switch" parent="Material.Widget.Switch">
   <item name="colorControlActivated">@color/default_green</item>
</style>
Run Code Online (Sandbox Code Playgroud)

如果我使用Switch风格:

<com.rey.material.widget.Switch
     style="@style/Switch"
     android:layout_width="wrap_content"
     android:layout_height="wrap_content"
     android:checked="false"/>
Run Code Online (Sandbox Code Playgroud)

colorControlActivated使用它的里面的一个BaseTheme(橙色),而不是开关一个(绿色).
为什么会这样?colorControlActivated对于不同的观点我不能有不同的看法吗?

谢谢.

Nem*_*sis 8

主要问题是,活动主题中的colorControlActivated属性优先于您定义并应用于特定视图的任何自定义样式中的该属性.

解决方案是(并且此解决方案以相同方式覆盖同一活动中的所有元素的属性)以创建新主题并将该主题应用于清单中的活动.此主题可以从您的主题继承并仅覆盖您需要的属性.

主题:

<style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">
    <!-- items-->
    <item name="colorControlActivated">@android:color/white</item>
    <!-- items-->
</style>

<style name="lightAppTheme" parent="AppTheme" >
    <item name="colorControlActivated">@color/colorPrimary</item>
</style>
Run Code Online (Sandbox Code Playgroud)

清单:

<application
    android:name=".application.appname"
    android:icon="@mipmap/ic_launcher"
    android:label="@string/app_name"
    android:theme="@style/AppTheme">
    <activity
        android:name=".MainActivity"
        android:label="@string/title_activity_main"
        android:theme="@style/lightAppTheme"
        android:screenOrientation="portrait"></activity>
 </application>
Run Code Online (Sandbox Code Playgroud)

我希望这可以帮助任何人进入这个,因为我花了几个小时让它工作.

为了使同一活动中的不同元素使用不同的colorControlActivated属性,请转到此答案.