功能自定义标题:无法在API 11及以上版本上组合自定义标题

7

我有一个项目,其中我设置了:

  • minSdkversion 设置为 10
  • MainActivity 是一个 TabActivity

在 onCreate 方法中的代码如下:

super.onCreate(savedInstanceState);

requestWindowFeature(Window.FEATURE_CUSTOM_TITLE);
setContentView(R.layout.main);
getWindow().setFeatureInt(Window.FEATURE_CUSTOM_TITLE, R.layout.custom_title);
...

在以前的设置下,一切都运行良好!但是,如果我将minSdkVersion设置为11或更高版本,则会出现此异常:

android.util.AndroidRuntimeException: You cannot combine custom titles with other title features

我不理解为什么只改变minSdkVersion就会发生这种情况。我在这个网站上阅读了很多关于这个问题的内容。我尝试设置:
  • 在主布局中设置 Theme.NoTitleBar ,然后在 Manifest 文件中也设置
  • 将这三行代码放置在所有可能的位置
  • 如果我注释掉第一行,当我在我的 CustomTitle 布局中调用 TextView 引用时,会出现 NullPointerException
  • 我尝试在 theme.xml 文件声明中设置 "windowNoTitle" = true
由于我仅使用 API 11 中提供的函数,因此我想在加载应用程序到商店之前将 minSdk 设置为 11。我该怎么做?我需要帮助。 编辑:当minSdkVersion = 10且在Manifest中设置Theme.NoTitleBar时,同样会出现错误。去掉它后,所有东西都像以前一样工作。有人能提供一个可用的代码(清单和活动代码),以便在API为11或更高版本时设置自定义标题吗?非常感谢。

使用很少被使用的标签几乎没有用处,例如除了[tag:android]标签值之外的任何标签值都没有被关注。没人回答的原因可能是因为你尝试做与错误建议完全相反的事情。 - Maarten Bodewes
7个回答

38

我自己解决了问题。我不知道原因,但是在清单文件中为每个活动声明添加“theme”属性,所有问题都解决了:

从这里开始:


从这里开始:

<activity
        android:name=".CheckActivity"
        android:configChanges="orientation"
        android:screenOrientation="portrait"
</activity>

变成这样:

<activity
        android:name=".CheckActivity"
        android:configChanges="orientation"
        android:screenOrientation="portrait"
        android:theme="@android:style/Theme" >
</activity>

2
这对我有用。我只是在我的活动中添加了android:theme="@andriod:style/Theme",然后它就可以工作了。在我的情况下,这是我的蓝牙活动! - BostonGeorge

3

@kinghomer 我已经尝试了CUSTOM_TITLE,它实际上适用于2.2(API 8)。让我在API 11上试试并回来告诉你!

在此之前,您无需在任何地方设置Theme.NoTitleBar,可以直接在.java文件中进行控制。给我一些时间,我会回来的!


什么?我的代码能用,还是你的?你能发一下你的测试代码吗? - kinghomer
1
难以置信!我修好了!我只是在清单文件中每个活动的声明中添加了“主题”属性(之前没有)。 - kinghomer
我已经尝试过了,但仍然卡在同样的问题上。但是,这只发生在我尝试在我的GB手机上运行它时。(在模拟器上运行良好)我支持API级别8-17。 - Namratha

0

除了被接受的答案之外,还有另一种解决方法:

<application
        android:allowBackup="true"
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name"
        android:theme="@style/CustomTheme" >

在基于XML的清单文件中,将一个“主题”属性分配给“应用程序”,这将对所有活动都起作用。

0
在你的AndroidManifest文件中,使用这个片段代替你的片段。
从这个开始:
android:theme="@style/AppTheme">

转换为:

android:theme="@style/custom_title">

0

当您尝试添加自定义标题栏并扩展您的活动时,就会出现此问题,使用ActionBarActivityAppcomActivity。这两个活动类已经定义了标题栏。

因此,当您尝试添加自己的自定义标题栏时,会出现冲突,即使用哪个标题栏-您的自定义标题栏还是活动扩展提供的标题栏。

要解决此问题,只需通过Activity扩展您的活动,该活动没有预定义的标题栏,因此您的标题栏将被接受而不会发生冲突。

public void MyActivy extends Activity
{

    // your code

}

0

我刚刚在AndroidManifest.xml文件中的activity标签中添加了android:theme="@android:style/Theme",结果非常好用。

<activity
        android:name=".MainActivity"
        android:theme="@android:style/Theme" >
</activity>

希望这对你也有用。

0

res/values-v11 默认使用此代码:

<style name="AppBaseTheme" parent="android:Theme.Holo.Light">
        <!-- API 11 theme customizations can go here. -->
</style>

把 "android:Theme.Holo.Light" 改成 "@android:style/Theme" 就可以了!

提示:如果你的项目中没有 "res/values-v11" 文件夹,则检查你的项目引用的 "lib project"。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接