在Android Manifest中更改主题会导致应用程序崩溃 - 简单的解决方案?

时间:2014-05-21 01:34:04

标签: android eclipse crash android-manifest android-theme

我在旧版本的Eclipse中创建了一些应用程序。这样做时,我会输入:

机器人:主题=" @android:风格/ Theme.Black.NoTitleBar.Fullscreen"

在清单文件中,这总是改变了应用程序主题没有问题。最近,我开始使用花哨的新Java-ADT Eclipse程序,当我将上述语句输入清单文件时,应用程序崩溃了。我的意思是当我插入一个设备来测试应用程序时(无论是我的Galaxy II,Galaxy 4还是Galaxy Tab 3 10.1)应用程序安装正确(Eclipse没有错误并声称一切都成功),但在设备上,应用程序加载一个空的黑屏,然后很快崩溃,消息"不幸的是,(app)已停止"。我错过了什么吗?

以下是需要注意的事项:

  • 生成的应用程序是黑色的,没有标题或通知栏(在崩溃之前),当我将主题短语更改为相同的东西时,例如,"全屏"它正确显示带有通知栏但没有标题栏的黑屏(崩溃前)。对我而言,这表明我所输入的短语仍然是今天的标准,也许所需的变更/修改可能在其他地方。

  • 如果我开始一个新项目并运行它,那么" Hello World"应用程序在我的所有设备上正常显示,但如果我将清单文件中的默认主题(android:theme =" @ style / AppTheme")更改为任何其他主题,则应用程序崩溃("很遗憾,应用已停止")。

  • 我尝试通过不同的路线来覆盖这一点:我在 res-values-styles 文件中输入了一系列短语(手动应用&#34的项目) ; NoTitle"和#34;全屏"属性),但这仅适用于我的Galaxy 4和Tab 3 10.1(我的Galaxy II仍显示标题)。此外,该应用程序是白色的,而不是黑色。

此时的任何建议都将是一个很大的帮助!感谢

4 个答案:

答案 0 :(得分:6)

不幸的是,这最近已经破裂(至少在Intellij中)。选择其中一个NoTitle主题会在运行时使应用程序崩溃,因为主题需要是AppCompat的后代(至少对于较低的最低SDK版本),但似乎目前没有一个隐藏标题栏。

以下是在正在运行的应用程序和布局预览中隐藏标题栏的工作方法:

1)在AndroidManifest.xml中将主题设置回“AppTheme”:

    android:theme="@style/AppTheme"

2)通过添加(to name =“AppTheme”)更新res / values / styles.xml中的主题样式:

    <item name="android:windowNoTitle">true</item>

我相信你也可以用'android:windowFullscreen'做这个,如果你还想隐藏动作栏。

当您运行应用程序(模拟器或设备)时,上述两个步骤将起作用,但布局仍将显示标题栏。您可以通过转到布局(例如activity_main.xml),然后单击预览上方的主题(AppTheme)并将其更改为Light.NoTitleBar之类的内容来隐藏处理布局的内容。不幸的是,预览会忽略styles.xml中的主题更改,但希望这会得到修复。


更新2015/06/08:此说明不再适用于Android Studio 1.2.1.1,但有一个简单的修复(应该首先应用):

您现在可以在AndroidManifest.xml中设置android:theme:

android:theme="@style/Theme.AppCompat.Light.NoActionBar"

我不知道还需要哪些其他更改,因为我没有将它们推回到我的项目中。

奇怪的是,我在我的系统上找不到Theme.AppCompat.Black ...而且也找不到作为OP请求的Theme.Black ....

答案 1 :(得分:2)

您的活动会延长ActionBarActivity,因此需要一个ActionBar。解决方案是扩展FragmentActivity

示例:

public class ActivityName extends ActionBarActivity { ... }

public class ActivityName extends FragmentActivity { ... }

的AndroidManifest.xml

android:theme="@android:style/Theme.Material.Light.NoActionBar

答案 2 :(得分:0)

谢谢大家。最终为我工作的是放置:

requestWindowFeature(Window.FEATURE_NO_TITLE); getWindow()。setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,WindowManager.LayoutParams.FLAG_FULLSCREEN);

在JAVA中的onCreate方法中

答案 3 :(得分:0)

当我将.darkactionbar更改为.noactionbar并单击Apply changes而不是运行程序时,它起作用了!但是,当我再次启动该应用程序时,操作栏是可见的, 也许是个错误...