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

时间:2012-09-05 11:20:24

标签: android tabactivity titlebar android-tabactivity custom-titlebar

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

  • 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文件中的
  • 我把这3行放在所有可能的位置
  • 如果我在第一行发表评论,当我在我的CustomTitle布局的TextView参考上调用某些东西时会发生NullPointerException
  • 我尝试在theme.xml文件声明中设置“windowNoTitle”= true

由于我只使用API​​ 11提供的功能,我想在商店上加载App之前将minSdk设置为11。我能怎么做 ??我需要帮助

编辑:在清单中使用minSdkVersion = 10和Theme.NoTitleBar时,会发生同样的错误。删除它,一切都像以前一样。 当API为11或更高时,任何人都可以提供工作代码(清单和活动代码)来设置自定义标题吗?太多了

7 个答案:

答案 0 :(得分:37)

由我自己修复。我不知道为什么,但只是为每个活动的声明添加清单文件“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>

答案 1 :(得分:3)

@kinghomer我已经在2.2(API 8)上尝试过CUSTOM_TITLE了。让我试试API 11并回复你!<​​/ p>

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

答案 2 :(得分:0)

res / values-v11 defalut使用此代码:

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

改变&#34; android:Theme.Holo.Light&#34; to&#34; @android:style / Theme&#34;没关系!

提示:如果您的项目没有&#34; res / values-v11&#34;,请检查您引用的项目&#34; lib项目&#34;

答案 3 :(得分:0)

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

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

在基于xml的mainifest中为theme分配application归因,该归因应适用于所有活动。

答案 4 :(得分:0)

当您尝试添加自定义标题栏以及按ActionBarActivityAppcomActivity扩展活动时,会出现此问题。这两个活动类已经定义了标题栏。 因此,当您尝试添加自己的自定义标题栏时,会出现冲突,使用哪个标题栏 - 您的自定义标题栏或扩展活动提供的标题栏。

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

public void MyActivy extends Activity
{

    // your code

}

答案 5 :(得分:0)

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

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

希望这也适合你。

答案 6 :(得分:0)

在您的AndroidManifest文件中,使用此代码段代替您的代码段。

从此:

android:theme="@style/AppTheme">

对此:

android:theme="@style/custom_title">