Material 设计和 appcompat 不适用于旧的 API 版本
Material Design and appcompat not working on older API versions
我正在使用 appcompat v7 (23.1.1) 实现 MaterialDesign 向后兼容性。在 API 21 设备上它看起来不错。在旧 API 版本上,我的样式没有任何影响。为什么?
结果 API 21(目标):
结果 API 17(差):
这是我的 style.xml 内部值文件夹:
<resources>
<!--
Base application theme, dependent on API level. This theme is replaced
by AppBaseTheme from res/values-vXX/styles.xml on newer devices.
-->
<style name="AppBaseTheme" parent="Theme.AppCompat.Light">
<!--
Theme customizations available in newer API levels can go in
res/values-vXX/styles.xml, while customizations related to
backward-compatibility can go here.
-->
<!-- customize the color palette -->
<item name="android:colorPrimary">@color/teal200</item>
<item name="android:colorPrimaryDark">@color/teal500</item>
<item name="android:colorAccent">@color/material_green_A200</item>
<item name="android:statusBarColor">@color/teal500</item>
<item name="android:navigationBarColor">@color/teal500</item>
<item name="android:windowNoTitle">true</item>
<item name="windowActionBar">false</item>
<item name="android:colorButtonNormal">@color/button</item>
<item name="colorControlNormal">@color/deeporange300</item>
<item name="colorControlActivated">@color/deeporange500</item>
<item name="colorControlHighlight">@color/material_green_A200</item>
</style>
<!-- Application theme. -->
<style name="AppTheme" parent="AppBaseTheme">
<!-- All customizations that are specific to a particular API-level befor 21 can go here. -->
</style>
这是 values-v21 文件夹中的 styles.xml:
<?xml version="1.0" encoding="utf-8"?>
<resources>
<style name="AppTheme" parent="AppBaseTheme">
<!-- Customize your theme using Material Design here. -->
<item name="android:buttonStyle">@style/button</item>
<item name="android:buttonStyleToggle">@style/togglebutton</item>
</style>
<style name="button" parent="@android:style/Widget.Material.Button">
<item name="android:textColor">@color/buttontextcolor</item>
</style>
<style name="togglebutton" parent="@android:style/Widget.Material.Button.Toggle">
<item name="android:textColor">@color/buttontextcolor</item>
</style>
</resources>
这是布局文件:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/LinearLayout1"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@color/background"
tools:context="com.skymedium.theblowdryer.MainActivity"
android:orientation="vertical" >
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
android:background="@color/menue"
android:id="@+id/menue" >
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:layout_marginTop="10dp"
android:layout_marginLeft="10dp"
android:layout_marginRight="10dp"
android:gravity="center_vertical"
android:id="@+id/row1" >
<Button
android:id="@+id/tab"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_weight="0.5"
android:text="@string/jukebox" />
<RelativeLayout
android:gravity="center_vertical"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:layout_weight="0.5"
android:id="@+id/subrow" >
<ImageView
android:id="@+id/tooltip"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginRight="15dp"
android:layout_alignParentRight="true"
android:scaleType="fitCenter"
android:src="@drawable/abc_ab_share_pack_holo_dark" />
</RelativeLayout>
</LinearLayout>/
<LinearLayout
android:gravity="center_vertical"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:layout_marginTop="10dp"
android:layout_marginLeft="10dp"
android:layout_marginRight="10dp"
android:id="@+id/row2" >
<ToggleButton
android:id="@+id/onoff"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="ToggleButton"
android:layout_marginRight="5dp"
android:layout_weight="0.7" />
<SeekBar
android:id="@+id/seekBar1"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginLeft="5dp"
android:layout_weight="0.3" />
</LinearLayout>
</LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:id="@+id/swipearea" >
<ProgressBar
android:id="@+id/progressBar1"
style="?android:attr/progressBarStyleHorizontal"
android:layout_width="match_parent"
android:layout_marginLeft="10dp"
android:layout_marginRight="10dp"
android:layout_height="wrap_content" />
<ImageView
android:id="@+id/imageView1"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:scaleType="fitCenter"
android:adjustViewBounds="true"
android:layout_gravity="top"
android:src="@drawable/abc_ab_share_pack_holo_dark" />
</LinearLayout>
</LinearLayout>
我尝试设置 <item name="colorButtonNormal">@color/button_color</item>
它不适用于较旧的 APIs。
提前致谢!
你搞反了。让我解释一下,
styles.xml
<resources>
<!--
Base application theme, dependent on API level. This theme is replaced
by AppBaseTheme from res/values-vXX/styles.xml on newer devices.
-->
<style name="AppBaseTheme" parent="Theme.AppCompat.Light">
<!--
Theme customizations available in newer API levels can go in
res/values-vXX/styles.xml, while customizations related to
backward-compatibility can go here.
-->
<!-- customize the color palette -->
<!--Notice!!! No "android" prefix!-->
<item name="colorPrimary">@color/teal200</item>
<item name="colorPrimaryDark">@color/teal500</item>
<item name="colorAccent">@color/material_green_A200</item>
<item name="android:statusBarColor">@color/teal500</item>
<item name="android:navigationBarColor">@color/teal500</item>
<item name="android:windowNoTitle">true</item>
<item name="windowActionBar">false</item>
<item name="android:colorButtonNormal">@color/button</item>
<item name="colorControlNormal">@color/deeporange300</item>
<item name="colorControlActivated">@color/deeporange500</item>
<item name="colorControlHighlight">@color/material_green_A200</item>
</style>
<!-- Application theme. -->
<style name="AppTheme" parent="AppBaseTheme">
<!-- All customizations that are specific to a particular API-level befor 21 can go here. -->
</style>
样式-v21
<resources>
<style name="AppTheme" parent="AppBaseTheme">
<!-- Customize your theme using Material Design here. -->
<!--Be sure to define your colors here as well! but this time use "android:"-->
<item name="android:colorPrimary">@color/teal200</item>
<item name="android:colorPrimaryDark">@color/teal500</item>
<item name="android:colorAccent">@color/material_green_A200</item>
<item name="android:buttonStyle">@style/button</item>
<item name="android:buttonStyleToggle">@style/togglebutton</item>
</style>
<style name="button" parent="@android:style/Widget.Material.Button">
<item name="android:textColor">@color/buttontextcolor</item>
</style>
<style name="togglebutton" parent="@android:style/Widget.Material.Button.Toggle">
<item name="android:textColor">@color/buttontextcolor</item>
</style>
</resources>
styles.xml for < API 21 不应该为你的颜色使用 "android" 前缀。
in styles.xml v-21 使用 android 前缀定义颜色。上面的 XML 应该有效!
我正在使用 appcompat v7 (23.1.1) 实现 MaterialDesign 向后兼容性。在 API 21 设备上它看起来不错。在旧 API 版本上,我的样式没有任何影响。为什么?
结果 API 21(目标):
结果 API 17(差):
这是我的 style.xml 内部值文件夹:
<resources>
<!--
Base application theme, dependent on API level. This theme is replaced
by AppBaseTheme from res/values-vXX/styles.xml on newer devices.
-->
<style name="AppBaseTheme" parent="Theme.AppCompat.Light">
<!--
Theme customizations available in newer API levels can go in
res/values-vXX/styles.xml, while customizations related to
backward-compatibility can go here.
-->
<!-- customize the color palette -->
<item name="android:colorPrimary">@color/teal200</item>
<item name="android:colorPrimaryDark">@color/teal500</item>
<item name="android:colorAccent">@color/material_green_A200</item>
<item name="android:statusBarColor">@color/teal500</item>
<item name="android:navigationBarColor">@color/teal500</item>
<item name="android:windowNoTitle">true</item>
<item name="windowActionBar">false</item>
<item name="android:colorButtonNormal">@color/button</item>
<item name="colorControlNormal">@color/deeporange300</item>
<item name="colorControlActivated">@color/deeporange500</item>
<item name="colorControlHighlight">@color/material_green_A200</item>
</style>
<!-- Application theme. -->
<style name="AppTheme" parent="AppBaseTheme">
<!-- All customizations that are specific to a particular API-level befor 21 can go here. -->
</style>
这是 values-v21 文件夹中的 styles.xml:
<?xml version="1.0" encoding="utf-8"?>
<resources>
<style name="AppTheme" parent="AppBaseTheme">
<!-- Customize your theme using Material Design here. -->
<item name="android:buttonStyle">@style/button</item>
<item name="android:buttonStyleToggle">@style/togglebutton</item>
</style>
<style name="button" parent="@android:style/Widget.Material.Button">
<item name="android:textColor">@color/buttontextcolor</item>
</style>
<style name="togglebutton" parent="@android:style/Widget.Material.Button.Toggle">
<item name="android:textColor">@color/buttontextcolor</item>
</style>
</resources>
这是布局文件:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/LinearLayout1"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@color/background"
tools:context="com.skymedium.theblowdryer.MainActivity"
android:orientation="vertical" >
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
android:background="@color/menue"
android:id="@+id/menue" >
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:layout_marginTop="10dp"
android:layout_marginLeft="10dp"
android:layout_marginRight="10dp"
android:gravity="center_vertical"
android:id="@+id/row1" >
<Button
android:id="@+id/tab"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_weight="0.5"
android:text="@string/jukebox" />
<RelativeLayout
android:gravity="center_vertical"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:layout_weight="0.5"
android:id="@+id/subrow" >
<ImageView
android:id="@+id/tooltip"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginRight="15dp"
android:layout_alignParentRight="true"
android:scaleType="fitCenter"
android:src="@drawable/abc_ab_share_pack_holo_dark" />
</RelativeLayout>
</LinearLayout>/
<LinearLayout
android:gravity="center_vertical"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:layout_marginTop="10dp"
android:layout_marginLeft="10dp"
android:layout_marginRight="10dp"
android:id="@+id/row2" >
<ToggleButton
android:id="@+id/onoff"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="ToggleButton"
android:layout_marginRight="5dp"
android:layout_weight="0.7" />
<SeekBar
android:id="@+id/seekBar1"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginLeft="5dp"
android:layout_weight="0.3" />
</LinearLayout>
</LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:id="@+id/swipearea" >
<ProgressBar
android:id="@+id/progressBar1"
style="?android:attr/progressBarStyleHorizontal"
android:layout_width="match_parent"
android:layout_marginLeft="10dp"
android:layout_marginRight="10dp"
android:layout_height="wrap_content" />
<ImageView
android:id="@+id/imageView1"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:scaleType="fitCenter"
android:adjustViewBounds="true"
android:layout_gravity="top"
android:src="@drawable/abc_ab_share_pack_holo_dark" />
</LinearLayout>
</LinearLayout>
我尝试设置 <item name="colorButtonNormal">@color/button_color</item>
它不适用于较旧的 APIs。
提前致谢!
你搞反了。让我解释一下,
styles.xml
<resources>
<!--
Base application theme, dependent on API level. This theme is replaced
by AppBaseTheme from res/values-vXX/styles.xml on newer devices.
-->
<style name="AppBaseTheme" parent="Theme.AppCompat.Light">
<!--
Theme customizations available in newer API levels can go in
res/values-vXX/styles.xml, while customizations related to
backward-compatibility can go here.
-->
<!-- customize the color palette -->
<!--Notice!!! No "android" prefix!-->
<item name="colorPrimary">@color/teal200</item>
<item name="colorPrimaryDark">@color/teal500</item>
<item name="colorAccent">@color/material_green_A200</item>
<item name="android:statusBarColor">@color/teal500</item>
<item name="android:navigationBarColor">@color/teal500</item>
<item name="android:windowNoTitle">true</item>
<item name="windowActionBar">false</item>
<item name="android:colorButtonNormal">@color/button</item>
<item name="colorControlNormal">@color/deeporange300</item>
<item name="colorControlActivated">@color/deeporange500</item>
<item name="colorControlHighlight">@color/material_green_A200</item>
</style>
<!-- Application theme. -->
<style name="AppTheme" parent="AppBaseTheme">
<!-- All customizations that are specific to a particular API-level befor 21 can go here. -->
</style>
样式-v21
<resources>
<style name="AppTheme" parent="AppBaseTheme">
<!-- Customize your theme using Material Design here. -->
<!--Be sure to define your colors here as well! but this time use "android:"-->
<item name="android:colorPrimary">@color/teal200</item>
<item name="android:colorPrimaryDark">@color/teal500</item>
<item name="android:colorAccent">@color/material_green_A200</item>
<item name="android:buttonStyle">@style/button</item>
<item name="android:buttonStyleToggle">@style/togglebutton</item>
</style>
<style name="button" parent="@android:style/Widget.Material.Button">
<item name="android:textColor">@color/buttontextcolor</item>
</style>
<style name="togglebutton" parent="@android:style/Widget.Material.Button.Toggle">
<item name="android:textColor">@color/buttontextcolor</item>
</style>
</resources>
styles.xml for < API 21 不应该为你的颜色使用 "android" 前缀。
in styles.xml v-21 使用 android 前缀定义颜色。上面的 XML 应该有效!