如何使用现有的自定义主题隐藏XML中的活动标题栏
我想为我的一些活动隐藏标题栏。 问题是,我将一个样式应用于所有的活动,因此我不能简单地将主题设置为@android:style / Theme.NoTitleBar。
使用NoTitleBar主题作为我的风格的父母将删除标题栏为许多活动。
我可以在任何地方设置无标题样式的项目吗?
在onCreate()
方法中执行此操作。
//Remove title bar this.requestWindowFeature(Window.FEATURE_NO_TITLE); //Remove notification bar this.getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN); //set content view AFTER ABOVE sequence (to avoid crash) this.setContentView(R.layout.your_layout_name_here);
this
是指Activity
。
你可以修改你的AndroidManifest.xml
:
<activity android:name=".MainActivity" android:label="@string/app_name" android:theme="@android:style/Theme.Black.NoTitleBar.Fullscreen">
您可以在项目中的每个活动中使用它。
我现在做了以下。
我声明了一个风格,inheritance我的一般风格,然后禁用titleBar。
<style name="generalnotitle" parent="general"> <item name="android:windowNoTitle">true</item> </style>
现在我可以将这个样式设置到每个Activity中,我想隐藏标题栏覆盖应用程序宽度样式并inheritance所有其他样式信息,因此在样式代码中没有重复。
我不喜欢this.requestWindowFeature(Window.FEATURE_NO_TITLE);
因为标题栏会短暂出现,然后消失。
我也不喜欢android:theme="@android:style/Theme.NoTitleBar"
因为我失去了新设备用户习惯的3.0+全息变化。 所以我遇到了这个解决scheme。
在res / values文件夹中创build一个名为styles.xml的文件(如果它不存在)。 在该文件中放置以下代码:
<resources xmlns:android="http://schemas.android.com/apk/res/android"> <style name="Theme.Default" parent="@android:style/Theme"></style> <style name="Theme.NoTitle" parent="@android:style/Theme.NoTitleBar"></style> <style name="Theme.FullScreen" parent="@android:style/Theme.NoTitleBar.Fullscreen"></style> </resources>
接下来用另一个styles.xml文件创build一个res / values-v11 (这个可能已经存在了)。 在该文件中放置以下代码:
<resources xmlns:android="http://schemas.android.com/apk/res/android"> <style name="Theme.Default" parent="@android:style/Theme.Holo"></style> <style name="Theme.NoTitle" parent="@android:style/Theme.Holo.NoActionBar"></style> <style name="Theme.FullScreen" parent="@android:style/Theme.Holo.NoActionBar.Fullscreen"></style> </resources>
如果你的目标是4.0+,用另一个styles.xml文件创build一个res / values-v14文件夹(是的,它可能已经在那里了)。 在该文件中放置以下代码:
<resources xmlns:android="http://schemas.android.com/apk/res/android"> <style name="Theme.Default" parent="@android:style/Theme.Holo.Light"></style> <style name="Theme.NoTitle" parent="@android:style/Theme.Holo.Light.NoActionBar"></style> <style name="Theme.FullScreen" parent="@android:style/Theme.Holo.Light.NoActionBar.Fullscreen"></style> </resources>
最后,创build所有这些文件,打开你的AndroidManifiest.xml文件,你可以添加代码:
android:theme="@style/Theme.NoTitle"
如果您希望应用程序应用于整个应用程序,则将其添加到您不需要标题的活动的标签或应用程序标签。
现在,您的用户将获得与您的设备版本相关的主题与您所需的屏幕布局。
PS更改为android:theme="@style/Theme.FullScreen"
将具有相同的效果,但也删除通知栏。
标题栏可以通过开发人员Android页面上提到的两种方式删除:
在manifest.xml
文件中:
-
在
application
添加以下内容,如果您想要删除application
中的所有活动:<application android:theme="@android:style/Theme.Black.NoTitleBar">
-
或者对于特定的活动:
<activity android:theme="@android:style/Theme.Black.NoTitleBar">
如果使用this.requestWindowFeature(Window.FEATURE_NO_TITLE)
则在通过onCreate
活动时,用户仍然可以在启动animation期间看到标题栏。 如果您使用@android:style/Theme.Black.NoTitleBar
(如下所示),则标题栏将在启动animation期间不显示。
<activity android:name=".MainActivity" android:label="My App" android:theme="@android:style/Theme.Black.NoTitleBar" android:screenOrientation="portrait">
上面的例子显然会覆盖你现有的应用程序主题,如果你有现有的主题,然后添加<item name="android:windowNoTitle">true</item>
。
正确的答案可能是不扩展ActionbarActivity而只是扩展Activity
如果你仍然使用操作栏活动似乎这是工作:
@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); getSupportActionBar().hide(); //<< this setContentView(R.layout.activity_main); }
似乎这也是作品:
styles.xml: <style name="AppBaseTheme" parent="Theme.AppCompat.Light" > <item name="android:windowNoTitle">true</item> <!-- //this --> </style>
我可以像Scott Biggs写的那样做。 这种作品。 那么除了没有主题。 我的意思是设置菜单的背景是透明的:
只是改变
public class MainActivity extends ActionBarActivity {
活动或片段活动
public class MainActivity extends Activity {
但是,我可以使它看起来不错,使用材料devise,而不是删除操作栏: https ://gist.github.com/shimondoodkin/86e56b3351b704a05e53
- 设置应用程序的图标
- 设置动作条的颜色以匹配devise。
- 将图标设置为设置菜单
- 添加更多的图标(顶部的button)
它是由材料devise兼容性actionbar造型的例子。
创build一个主题如下。
<!-- Variation on the Light theme that turns off the title --> <style name="MyTheme" parent="android:style/Theme.Black"> <item name="android:windowNoTitle">true</item> </style>
加
<item name="android:windowNoTitle">true</item>
里面的AppTheme(styles.xml)
只需使用getActionBar().hide();
在你的主要活动onCreate()
方法。
什么对我有用:
1-在styles.xml中:
<style name="generalnotitle" parent="Theme.AppCompat.Light" > <item name="android:windowNoTitle">true</item> <!-- //this --> </style>
2-在MainActivity
@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); getSupportActionBar().hide(); //<< this setContentView(R.layout.activity_main); }
-
在清单中inheritance风格:
<activity android:name =“。MainActivity”android:theme =“@ style / generalnotitle”>
你可以在你的java文件中使用这个代码
在设置或加载视图之前添加此行
requestWindowFeature(Window.FEATURE_NO_TITLE); setContentView(R.layout.activity_main);
添加这两个为您使用的主题:
<item name="windowActionBar">false</item> <item name="android:windowNoTitle">true</item>
在你的onCreate
方法中,使用下面的代码片段:
this.requestWindowFeature(Window.FEATURE_NO_TITLE);
如果从DarkActionBar
replace定义,只需要在Style.xml中更改AppTheme
样式
<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
到NoActionBar
<style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">
AndroidManifast.xml中定义的AppTheme
当我试图使用所有这些高回报的答案我的应用程序总是崩溃。 (我认为这与“@android:style”有关?)
对我来说最好的解决scheme是使用以下内容:
android:theme="@style/Theme.AppCompat.NoActionBar"
没有标题/标题栏了。 只要将它放置在<application>...</application>
或<activity>...</activity>
根据您是否需要在整个应用程序或特定活动中使用它。
或者,如果您想在任何时候隐藏/显示标题栏:
private void toggleFullscreen(boolean fullscreen) { WindowManager.LayoutParams attrs = getWindow().getAttributes(); if (fullscreen) { attrs.flags |= WindowManager.LayoutParams.FLAG_FULLSCREEN; } else { attrs.flags &= ~WindowManager.LayoutParams.FLAG_FULLSCREEN; } getWindow().setAttributes(attrs); }
将此样式添加到您的style.xml文件
<style name="AppTheme.NoActionBar"> <item name="windowActionBar">false</item> <item name="windowNoTitle">true</item> </style>
之后,将这个样式名称引入您的androidManifest.xml文件中,在其中您不希望看到titlebar的特定活动,如下所示。
<activity android:name=".youractivityname" android:theme="@style/AppTheme.NoActionBar"> </activity>
首先回答是angular闪石。 这里是我的解释:添加:
this.requestWindowFeature(Window.FEATURE_NO_TITLE); this.getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);
在oncreate()方法中。
之前:
super.onCreate(savedInstanceState); setContentView(R.layout.activity_start);
(不只是在setContentView之前)如果不这样做,你会得到forceclose。 +1这个答案。
在我的情况下,如果您使用的是android studio 2.1,而您的编译SDK版本是6.0,那么只需转到您的manifest.xml文件,然后更改以下代码:
这里是代码:
<?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.example.lesterxu.testapp2"> <application android:allowBackup="true" android:icon="@mipmap/ic_launcher" android:label="@string/app_name" android:supportsRtl="true" android:theme="@style/Theme.AppCompat.NoActionBar"> <activity android:name=".MainActivity"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> </application> </manifest>
这里是剪辑拍摄(请参阅重点代码):
我发现了这个错误可能发生的两个原因。
一。 窗口标志已经设置在super.onCreate(savedInstanceState);
在这种情况下,您可能需要使用以下命令顺序:
this.requestWindowFeature(Window.FEATURE_NO_TITLE); this.getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN); super.onCreate(savedInstanceState);
二。 TitleBar中有Back / Upbutton,这意味着当前活动是另一个活动的分层子组件,在这种情况下,您可能需要从onCreate
方法中注释掉或删除这行代码。
getActionBar().setDisplayHomeAsUpEnabled(true);
这是完整的代码的样子。 注意android.view.Window的导入。
package com.hoshan.tarik.test; import android.app.Activity; import android.os.Bundle; import android.view.Window; public class MainActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); requestWindowFeature(Window.FEATURE_NO_TITLE); setContentView(R.layout.activity_main); } }
我正在使用支持小工具栏工具栏v7。 所以,为了能够删除或隐藏标题,我们需要写这个。
Toolbar myToolbar = (Toolbar) findViewById(R.id.my_toolbar); setSupportActionBar(myToolbar); //Remove¡ing title bar getSupportActionBar().setDisplayShowTitleEnabled(false);
Ahem,您可以将主题应用于XML中的单个活动,例如无标题。 换句话说,将它从应用程序标签中取出,打开标签声明并将其放入所需的活动标签中。
这解决了我的问题
在清单我的活动:
<application android:allowBackup="true" android:icon="@mipmap/ic_launcher" android:label="@string/app_name" android:supportsRtl="true" android:theme="@style/AppTheme"> <activity android:name=".SplashScreen"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity>
在“AppTheme”名下的风格:
<resources> <!-- Base application theme. --> <style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar"> **<item name="windowActionBar">false</item> <item name="android:windowNoTitle">true</item>** <!-- Customize your theme here. --> <item name="colorPrimary">@color/colorPrimary</item> <item name="colorPrimaryDark">@color/colorPrimaryDark</item> <item name="colorAccent">@color/colorAccent</item> </style> </resources>
join鲜明的文件,
android:theme="@android:style/Theme.Translucent.NoTitleBar"
将下面这行添加到你的java文件中,
this.requestWindowFeature(Window.FEATURE_NO_TITLE);
如果你做YaW和Doug Paul的用户,那么你必须记住在调用setContentView之前必须设置窗口的特性。 如果没有,你会得到一个例外。
只需将您的应用主题的父标签更改为“Theme.AppCompat.Light.NoActionBar”
在您的AndroidManifest.xml活动中添加主题@ style / Theme.AppCompat.Light.NoActionBar,像这样
<activity android:name=".activities.MainActivity" android:theme="@style/Theme.AppCompat.Light.NoActionBar"> </activity>
在这篇文章中有提到,但没有人明确地解决它,所以也许这会节省一些时间。 如果你像我一样,并且有多个类扩展了一个扩展了ActionBarActivity的根类,那么试图将这个活动设置为NoTitleBar / NoActionBar会引发一个错误,具体如下:
“你需要在这个活动中使用Theme.AppCompat主题(或后代)”
你可以修复这个改变延伸到活动。