使用appcompat-v7将Material Theme应用于API Version 19及更低版本

时间:2014-10-18 18:30:17

标签: android android-5.0-lollipop android-support-library

我最近下载了Android Lollipop SDK,并且我已经更新了所有依赖项,修复了我的构建路径并导入了以下支持库而没有问题:

机器人支撑-V7-程序兼容性 Android的支持-V7-网格布局 Android的支持-V7-mediarouter 机器人支撑-V7-调色板

我的应用程序使用蓝牙低功耗,所以我的minSDK版本是18,targetSDK是最新的; 21。

当我尝试使用以下xml来应用Material Theme时(使用appcompat-v7),我的问题出现了:

<!--
    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.DarkActionBar">
    <!--
        Theme customizations available in newer API levels can go in
        res/values-vXX/styles.xml, while customizations related to
        backward-compatibility can go here.
    -->
</style>

<!-- Application theme. -->
<style name="AppTheme" parent="AppBaseTheme">
    <item name="colorPrimary">@color/material_blue_500</item>
    <item name="colorPrimaryDark">@color/material_blue_700</item>
    <item name="colorAccent">@color/material_green_A200</item>
    <!-- All customizations that are NOT specific to a particular API-level can go here. -->
    <!-- <item name="android:actionBarStyle">@style/AppBaseActionBar</item> -->
</style>

<!-- the theme applied to the application or activity -->

当我尝试运行时,我收到以下错误:

错误:找不到与给定名称匹配的资源(&#39; colorAccent&#39;值为&#39; @ color / material_green_A200&#39;)

经过一段谷歌搜索后,我发现3天前更新了这个github存储库:gist.github.com/eyecatchup/b5e564cfe11619cc3999

在那里,定义了大多数Material Design颜色,所以我只是将它复制到我的主题color.xml中。

然后我得到以下错误,尽管该行在xml:

错误:找不到与给定名称匹配的资源(&#39; bright_foreground_material_light&#39;值为&#39; @ color / black&#39;)。

无论如何,我删除了该特定行,并在手机上成功安装了该应用。但是,主题仍然是Holo而不是Material。

有谁能告诉我我做错了什么? docs非常明确地说我可以在低于5.0的版本中使用Material主题,并且我按照here列出的有关保持兼容性的说明进行操作。

非常感谢帮助。

2 个答案:

答案 0 :(得分:1)

事实证明我只是在我的values文件夹中将主题应用于我的自定义主题,而values-v11和values-v14主题xml保持不变。

修复后,我通过几乎更新我的活动来运行物质主题,以将ActionBarActivity和我的片段管理器扩展到getSupportFragmentManager()管理器,而不是getFragmentManager()

如果您碰巧使用导航抽屉,在getActionBar中,在为ListView设置适配器时,您需要将ActionBar强制转换为SupportActionBar,如下所示:

private ActionBar getSupportActionBar() {
    return ((ActionBarActivity)getActivity()).getSupportActionBar();
}

并按照您通常的意愿设置适配器:

        mDrawerListView.setAdapter(
            new ArrayAdapter<String>(getSupportActionBar()
            .getThemedContext(),
            R.layout.fragment_navigationdrawer_textview,
            android.R.id.text1, drawerOptions));
    mDrawerListView.setItemChecked(mCurrentSelectedPosition, true);
    return mDrawerListView;

希望能帮助任何有同样问题的人。祝你好运。

答案 1 :(得分:-1)

你必须创建新的项目然后Id会自动生成appcompat_v7库,然后右击你的旧错误项目点击属性然后点击android并在你的项目中添加appcompat_v7库。