我无法使用 Android ActionBar 自定义主题(相信我,我试过了)
I cannot get Android ActionBar Custom theme to work (believe me I've tried)
我敢肯定,我会因为缺乏针对性或提出一个已被问到的问题而感到难过,但这确实是最后的选择,我真的尝试了太多方法来解释它们。这是我的问题:
我一直在学习 developers.android.com 提供的标准教程,并且几乎没有问题地完成了 ActionBar 的样式设置。好吧,现在我正在为那些缺乏问题而付出代价,我真的无法在操作栏上使用任何类型的自定义主题。
事实:
- 我正在使用 AppCompat-V7,因为我的应用程序非常简单,并且理想情况下与尽可能多的版本兼容。
- 我可以更改基本主题(深色、浅色和 Light.DarkActionBar)
- 我尝试了 Android 操作栏样式生成器并在此处关注了这个教程 (http://www.androiduipatterns.com/2012/09/creating-custom-android-styles-easy-way.html)
- 我观看了一些与我的 issue/settings 有点相关的视频,以尝试正确处理。
- 我尝试了各种方法(全都错了)来让它工作,其中一些甚至可能没有意义。
那么……怎么样?
这是我认为相关的文件,但如果有人想查看更多,请随时询问。考虑到我几乎没有完成 Android 教程,我没有太多可看的东西,所以我想这很好。
AndroidManifest.xml
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="godwin.com.study" >
<uses-sdk
android:minSdkVersion="8"
android:targetSdkVersion="18" />
<application
android:allowBackup="true"
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme="@style/CustomActionBarTheme" >
<activity
android:name=".MainActivity"
android:label="@string/app_name" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity
android:name=".DisplayMessageActivity"
android:label="@string/title_activity_display_message"
android:parentActivityName=".MainActivity" >
<meta-data
android:name="android.support.PARENT_ACTIVITY"
android:value="godwin.com.study.MainActivity" />
</activity>
</application>
</manifest>
styles.xml
<resources>
<!-- Base application theme. -->
<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
<!-- Customize your theme here. -->
</style>
</resources>
themes.xml
<?xml version="1.0" encoding="utf-8"?>
<resources>
<!-- the theme applied to the application or activity -->
<style name="CustomActionBarTheme"
parent="@style/Theme.AppCompat.Light.DarkActionBar">
<!-- Support library compatibility -->
<item name="actionBarStyle">@style/MyActionBar</item>
</style>
<!-- ActionBar styles -->
<style name="MyActionBar"
parent="@style/Widget.AppCompat.Light.ActionBar.Solid.Inverse">
<!-- Support library compatibility -->
<item name="background">@drawable/actionbar_background</item>
</style>
</resources>
build.gradle
apply plugin: 'com.android.application'
android {
compileSdkVersion 21
buildToolsVersion "21.1.2"
defaultConfig {
applicationId "godwin.com.study"
minSdkVersion 8
targetSdkVersion 18
versionCode 1
versionName "1.0"
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
}
dependencies {
compile "com.android.support:appcompat-v7:18.0+"
compile fileTree(dir: 'libs', include: ['*.jar'])
}
欢迎提问,但要做好 "I have no idea" 的准备。我几乎迷路了。是的,我确实删除了很多我的尝试。它们重叠并相互干扰,所以我的文件中的内容确实有效,除了以下行:
<item name="background">@drawable/actionbar_background</item>
在 themes.xml 文件中。我已将 "actionbar_background.png" 文件放入 "drawable" 文件夹,但它仍然只生成“...Light.DarkActionBar”主题。
我真的希望它是简单的东西,但通过我所有的搜索我还没有找到答案。
旁注:这是我第一次开发 Android 应用程序,或者至少是尝试开发,我真的不认为 Android 的教程做得很好。我的意思是,我很擅长编程。主要使用 C++,但也使用一些 Java、Java 脚本和网页设计语言,我大部分时间都使用它们。只有我吗?还是进入应用程序开发世界真的很困难?
编辑:简而言之,我已经尝试了很多方法来使用自定义主题更改操作栏的外观(无论是使用颜色代码还是图像/.png),但我唯一能做到的方法改变它是通过使用预设主题(浅色、深色和 Light.DarkActionBar)。
I would like to be able to use something like the Android Action Bar Style Generator that I mentioned,
如网站上所述,该生成器已弃用,因为 AppCompat 操作栏不需要它。如果您的 objective 是为您的操作栏提供自定义背景颜色,并且您使用的是当前版本的 AppCompat(appcompat-v7
,版本 21 或更高版本),您可以通过 colorPrimary
.
例如,this sample app 在操作栏上设置自定义颜色。它有一个 res/values/colors.xml
定义了一些颜色:
<?xml version="1.0" encoding="utf-8"?>
<resources>
<color name="primary">#3f51b5</color>
<color name="primary_dark">#1a237e</color>
<color name="accent">#ffee58</color>
</resources>
它有一个 res/values/styles.xml
将 primary
颜色应用到 colorPrimary
主题属性:
<?xml version="1.0" encoding="utf-8"?>
<resources>
<style name="Theme.Apptheme" parent="Theme.AppCompat">
<item name="colorPrimary">@color/primary</item>
<item name="colorPrimaryDark">@color/primary_dark</item>
<item name="colorAccent">@color/accent</item>
</style>
</resources>
它应用清单中的自定义主题:
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.commonsware.android.abverscolor"
android:versionCode="1"
android:versionName="1.0">
<supports-screens
android:anyDensity="true"
android:largeScreens="true"
android:normalScreens="true"
android:smallScreens="true"/>
<uses-sdk
android:minSdkVersion="14"
android:targetSdkVersion="19"/>
<application
android:allowBackup="false"
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme="@style/Theme.Apptheme">
<activity
android:name="ActionBarDemoActivity"
android:label="@string/app_name">
<intent-filter>
<action android:name="android.intent.action.MAIN"/>
<category android:name="android.intent.category.LAUNCHER"/>
</intent-filter>
</activity>
</application>
</manifest>
你得到:
我敢肯定,我会因为缺乏针对性或提出一个已被问到的问题而感到难过,但这确实是最后的选择,我真的尝试了太多方法来解释它们。这是我的问题:
我一直在学习 developers.android.com 提供的标准教程,并且几乎没有问题地完成了 ActionBar 的样式设置。好吧,现在我正在为那些缺乏问题而付出代价,我真的无法在操作栏上使用任何类型的自定义主题。
事实:
- 我正在使用 AppCompat-V7,因为我的应用程序非常简单,并且理想情况下与尽可能多的版本兼容。
- 我可以更改基本主题(深色、浅色和 Light.DarkActionBar)
- 我尝试了 Android 操作栏样式生成器并在此处关注了这个教程 (http://www.androiduipatterns.com/2012/09/creating-custom-android-styles-easy-way.html)
- 我观看了一些与我的 issue/settings 有点相关的视频,以尝试正确处理。
- 我尝试了各种方法(全都错了)来让它工作,其中一些甚至可能没有意义。
那么……怎么样?
这是我认为相关的文件,但如果有人想查看更多,请随时询问。考虑到我几乎没有完成 Android 教程,我没有太多可看的东西,所以我想这很好。
AndroidManifest.xml
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="godwin.com.study" >
<uses-sdk
android:minSdkVersion="8"
android:targetSdkVersion="18" />
<application
android:allowBackup="true"
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme="@style/CustomActionBarTheme" >
<activity
android:name=".MainActivity"
android:label="@string/app_name" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity
android:name=".DisplayMessageActivity"
android:label="@string/title_activity_display_message"
android:parentActivityName=".MainActivity" >
<meta-data
android:name="android.support.PARENT_ACTIVITY"
android:value="godwin.com.study.MainActivity" />
</activity>
</application>
</manifest>
styles.xml
<resources>
<!-- Base application theme. -->
<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
<!-- Customize your theme here. -->
</style>
</resources>
themes.xml
<?xml version="1.0" encoding="utf-8"?>
<resources>
<!-- the theme applied to the application or activity -->
<style name="CustomActionBarTheme"
parent="@style/Theme.AppCompat.Light.DarkActionBar">
<!-- Support library compatibility -->
<item name="actionBarStyle">@style/MyActionBar</item>
</style>
<!-- ActionBar styles -->
<style name="MyActionBar"
parent="@style/Widget.AppCompat.Light.ActionBar.Solid.Inverse">
<!-- Support library compatibility -->
<item name="background">@drawable/actionbar_background</item>
</style>
</resources>
build.gradle
apply plugin: 'com.android.application'
android {
compileSdkVersion 21
buildToolsVersion "21.1.2"
defaultConfig {
applicationId "godwin.com.study"
minSdkVersion 8
targetSdkVersion 18
versionCode 1
versionName "1.0"
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
}
dependencies {
compile "com.android.support:appcompat-v7:18.0+"
compile fileTree(dir: 'libs', include: ['*.jar'])
}
欢迎提问,但要做好 "I have no idea" 的准备。我几乎迷路了。是的,我确实删除了很多我的尝试。它们重叠并相互干扰,所以我的文件中的内容确实有效,除了以下行:
<item name="background">@drawable/actionbar_background</item>
在 themes.xml 文件中。我已将 "actionbar_background.png" 文件放入 "drawable" 文件夹,但它仍然只生成“...Light.DarkActionBar”主题。
我真的希望它是简单的东西,但通过我所有的搜索我还没有找到答案。
旁注:这是我第一次开发 Android 应用程序,或者至少是尝试开发,我真的不认为 Android 的教程做得很好。我的意思是,我很擅长编程。主要使用 C++,但也使用一些 Java、Java 脚本和网页设计语言,我大部分时间都使用它们。只有我吗?还是进入应用程序开发世界真的很困难?
编辑:简而言之,我已经尝试了很多方法来使用自定义主题更改操作栏的外观(无论是使用颜色代码还是图像/.png),但我唯一能做到的方法改变它是通过使用预设主题(浅色、深色和 Light.DarkActionBar)。
I would like to be able to use something like the Android Action Bar Style Generator that I mentioned,
如网站上所述,该生成器已弃用,因为 AppCompat 操作栏不需要它。如果您的 objective 是为您的操作栏提供自定义背景颜色,并且您使用的是当前版本的 AppCompat(appcompat-v7
,版本 21 或更高版本),您可以通过 colorPrimary
.
例如,this sample app 在操作栏上设置自定义颜色。它有一个 res/values/colors.xml
定义了一些颜色:
<?xml version="1.0" encoding="utf-8"?>
<resources>
<color name="primary">#3f51b5</color>
<color name="primary_dark">#1a237e</color>
<color name="accent">#ffee58</color>
</resources>
它有一个 res/values/styles.xml
将 primary
颜色应用到 colorPrimary
主题属性:
<?xml version="1.0" encoding="utf-8"?>
<resources>
<style name="Theme.Apptheme" parent="Theme.AppCompat">
<item name="colorPrimary">@color/primary</item>
<item name="colorPrimaryDark">@color/primary_dark</item>
<item name="colorAccent">@color/accent</item>
</style>
</resources>
它应用清单中的自定义主题:
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.commonsware.android.abverscolor"
android:versionCode="1"
android:versionName="1.0">
<supports-screens
android:anyDensity="true"
android:largeScreens="true"
android:normalScreens="true"
android:smallScreens="true"/>
<uses-sdk
android:minSdkVersion="14"
android:targetSdkVersion="19"/>
<application
android:allowBackup="false"
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme="@style/Theme.Apptheme">
<activity
android:name="ActionBarDemoActivity"
android:label="@string/app_name">
<intent-filter>
<action android:name="android.intent.action.MAIN"/>
<category android:name="android.intent.category.LAUNCHER"/>
</intent-filter>
</activity>
</application>
</manifest>
你得到: