gpt4 book ai didi

android - 不能将 Holo 主题与 ActionBarActivity 子项一起使用(选择了正确的 API)

转载 作者:行者123 更新时间:2023-11-30 02:53:06 24 4
gpt4 key购买 nike

我正在阅读 developers.android.com 上的教程,但在设置操作栏样式时遇到了问题。我使用最新的 SDK(与 Eclipse bundle 在一起)。

比如说,我在 values-v14/styles.xml 中有

<style name="MessageTheme" parent="@android:style/Theme.Holo.Light.DarkActionBar">

我已经尝试了我能找到的所有变体。也尝试在 values-v11 中不使用 DarkActionBar。它编译得很好但是当我打开这样样式的 Activity 时,应用程序崩溃并且 logcat 说

java.lang.IllegalStateException: You need to use a Theme.AppCompat theme (or descendant) with this activity.

正如我所说,API 设置正确。项目属性(API 19)中的目标之一和 list 中的 android:minSdkVersion="14"(也尝试过更高)。

现在,我的 Activity 扩展了 ActionBarActivity(文件就是这样生成的)。如果我改为扩展 Activity,则 Holo 可以正常工作。这是我找到的答案,但我不明白为什么会这样。 ActionBarActivity 和 Activity 之间到底有什么区别使它起作用,这是一些 hack 还是应该以这种方式完成?此外,这适用于我的额外 Activity 。如果我尝试使用教程中的主要 Activity 进行此操作,它不会编译,因为那里使用的 2 个方法未定义 - getSupportActionBar 和 getSupportFragmentManager。

最佳答案

您正在使用兼容性库,因此要设置支持 actionBar 的样式,您需要使主题成为 appCompat 的后代。

试试这个:

<style name="Theme.whatever" parent="@style/Theme.AppCompat.Light.DarkActionBar">

如果你还是有点迷茫,你可以用这个工具生成你的主题:ActionBar style generator看看它是如何完成的。

编辑:

检查一下,还有:Styling the Action Bar

请参阅“适用于 Android 2.1 及更高版本”

关于Activity和ActionBarActivity的区别...

据我所知,如果您需要在低于 3.0 的 android 版本时有一个操作栏,您可以扩展 ActionBarActiviy。这就是为什么您在使用 actionBar 或 supportActionBar 时遇到问题,具体取决于您正在编码的 Activity 类型。

因此,总而言之,在使用 Acivity 时调用 actionBar , 但如果你正在扩展 ActionBarActivity 你应该调用 SupportActionBar.例如:getSupportActionBar()。

您可以使用的更多信息:Support Library Features

编辑 2:Android 正在对您大喊大叫,因为您正在尝试使用 appCompat 功能。为了在您的特定实例中避免这种情况,您需要做的就是不扩展 ActionBarActivity,而是编写常规 Activity 。然后像往常一样使用 ActionBar 功能。

编辑 3 并且可能是最后一个:

假设您正在使用 holo 作为主题,并且您正在为 API 11 及更高版本编写常规 Acitivty。在这种情况下,您没有扩展 ActionBarActiviy,因此您不必做任何特别的事情。没关系,对吧?但是现在,您希望同样的事情适用于低于 11 的 API 版本,这就是您真正的问题。要做到这一点,您必须扩展 ActionBarActivity,但您没有这样做。所以你唯一的出路(据我所知)是有另一个扩展 ActionBarActivity 的 Activity ,并以某种方式检测代码,哪个版本的 android 正在运行,以便执行正确的代码(这是你的哪个类两个你应该利用)这样你的应用程序就能够避免崩溃。

这就是为什么我认为只使用 appComapt 是一个不错的解决方案,假设您真的不需要使用 holo。但是,如果你真的想那样做......

if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.HONEYCOMB) {
// Use a regular Activity class for API 11 and above.
}
else{
// Use an activity extending ActionBarActivity. Have in mind that here you would be calling a supportActionBar instead of a regular ActionBar.
}

关于android - 不能将 Holo 主题与 ActionBarActivity 子项一起使用(选择了正确的 API),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23799830/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com