如何从Android活动中移除标题栏?

69

有人可以帮我解决这个问题吗? 我想让我的活动全屏,并且想要删除屏幕上的标题。 我已经尝试了几种方法,但无法删除它。

活动代码:

public class welcomepage extends Activity {
    private Button btn;
    EditText userName,passWord;
    DatabaseHandler dbHandler;
    Context ctx =this;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        //Remove title bar
        this.requestWindowFeature(Window.FEATURE_NO_TITLE);
        setContentView(R.layout.activity_welcomepage);
   }
}

和 Activity.xml

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    android:background="@drawable/pic1"
    app:layout_behavior="@string/appbar_scrolling_view_behavior"
    tools:context="com.edkul.vimal.edkul.welcomepage">

</RelativeLayout>
我想要移除显示为蓝色的标题栏。请参考以下图片:enter image description here AndroidManifest.xml
<application
        android:minSdkVersion="3"
        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=".welcomepage"
            android:label="@string/app_name"
            android:theme="@style/Theme.AppCompat.NoActionBar">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category    android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
</application>

1
@vimal,如果您使用支持库,请将主题样式更改为@style/Theme.AppCompat.NoActionBar。如果不使用支持库,则将主题样式更改为<android:theme="@android:style/Theme.NoTitleBar">。只需将其添加到您的application标签中即可在manifest.xml文件中全局应用它。 - Kathi
你的意思是我不需要“状态栏”,对吗?我不明白你所说的全屏是什么意思? - Kathi
@Kathi:在移除标题后,状态栏和主屏幕之间存在一些空隙。这应该是正常的还是有办法填补这个空隙?我对Android很陌生,不太清楚。 - vimal mishra
你能发布一张图片吗? - Kathi
你能否在main_activity.xml中删除以下这些行:android:paddingBottom="@dimen/activity_vertical_margin" android:paddingLeft="@dimen/activity_horizontal_margin" android:paddingRight="@dimen/activity_horizontal_margin" android:paddingTop="@dimen/activity_vertical_margin" - Kathi
显示剩余4条评论
8个回答

169

只需要在位于values文件夹中的style.xml文件中添加此样式即可。

<style name="AppTheme.NoActionBar" parent="Theme.AppCompat.Light.DarkActionBar">
    <item name="windowActionBar">false</item>
    <item name="windowNoTitle">true</item>
    <item name="android:windowFullscreen">true</item>
</style>

然后在您的AndroidManifest.xml文件中将这个样式设置给您的活动类

android:theme="@style/AppTheme.NoActionBar"

编辑:如果您选择使用编程方式隐藏ActionBar,则在您的活动onCreate()方法中使用以下代码。

if(getSupportedActionbar()!=null)    
     this.getSupportedActionBar().hide();

如果你想从Fragment中隐藏ActionBar,则可以:

getActivity().getSupportedActionBar().hide();

AppCompat v7:- 在你的不想使用ActionBar的Activity中,请使用以下主题:Theme.AppComat.NoActionBarTheme.AppCompat.Light.NoActionBar。如果您希望在整个应用程序中隐藏它,请在您的AndroidManifest中的<application... />中设置此主题。

Kotlin中:

在你的onCreate()方法中添加这行代码或者你可以使用上述主题。

supportActionBar?.hide()

我希望这能对你有所帮助。


这会将其从所有活动中移除吗?因为它在清单文件中而不是活动的XML文件中? - gabriel
如果您在应用程序级别设置了此主题,并且您没有将任何其他主题设置为任何活动,则它将从所有文件中删除,否则它仅在您在主题中设置此样式的特定活动中删除。 - Farmer
4
在Kotlin中,这个条目supportActionBar?.hide()就足够了。 - Black_Zerg

54

试一下:

this.getSupportActionBar().hide();

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    try
    {
        this.getSupportActionBar().hide();
    }
    catch (NullPointerException e){}

    setContentView(R.layout.activity_main);
}

4
检查指针比捕获异常更好。 - Quentin Rufin

11

你可以尝试:

<activity android:name=".YourActivityName"
          android:theme="@style/Theme.Design.NoActionBar">

对我来说没问题。


7

在您的Android清单文件中,请确保该活动正在使用这个(或一个)主题(基于)@style/Theme.AppCompat.NoActionBar 这将完全删除操作栏,但不会使您的活动全屏。 如果您想使您的活动全屏,请仅使用此主题。

@android:style/Theme.NoTitleBar.Fullscreen

或者您可以更改

this.requestWindowFeature(Window.FEATURE_NO_TITLE);

to

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

这是我在运行时获取全屏的方法。
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
                mDecorView = getWindow().getDecorView();
                mDecorView.setSystemUiVisibility(
                        View.SYSTEM_UI_FLAG_LAYOUT_STABLE
                                | View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION
                                | View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
                                | View.SYSTEM_UI_FLAG_HIDE_NAVIGATION // hide nav bar
                                | View.SYSTEM_UI_FLAG_FULLSCREEN // hide status bar
                                | View.SYSTEM_UI_FLAG_IMMERSIVE);
            }

为了退出全屏,我使用以下代码:
mDecorView = getWindow().getDecorView();
mDecorView.setSystemUiVisibility(
                    View.SYSTEM_UI_FLAG_LAYOUT_STABLE
                            | View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION
                            | View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN);

谢谢回复!我已经使用application.xml更新了我的代码。我也尝试了你的建议,但是它没有起作用。有什么其他建议吗? - vimal mishra
@vimalmishra 你需要更改的是 AndroidManifest.xml 而不是 application.xml。 - tim687
我已经更新了我的代码,包括Android Manifest.xml文件。现在我能够去掉标题栏,但是它还不是全屏显示的。 - vimal mishra
@vimalmishra 对不起,我以为你只想要移除actionbar。我会更新我的答案。 - tim687
这会不会让对话框看起来有点老旧,哈哈,或者说对于 Android 版本 2 来说是这样的,它们不再是 Material Design 风格了。 - Miguel

5

添加活动

requestWindowFeature(Window.FEATURE_NO_TITLE);

并且在您的style.xml文件中添加以下两行:

<item name="windowActionBar">false</item>
<item name="windowNoTitle">true</item>

1
这将隐藏您的通知标签,但标题栏仍将保留。 - Tarit Ray
这是在不使用androidx的情况下的解决方案。然而,在我的情况下,requestWindowFeature(Window.FEATURE_NO_TITLE); 毫无作用。 - Cactusroot

3
您只需在style.xml文件中添加以下代码行。
<style name="AppTheme.NoTitleBar" parent="Theme.AppCompat.Light.DarkActionBar">
<item name="windowActionBar">false</item>
<item name="windowNoTitle">true</item>
<item name="android:windowFullscreen">true</item>

在 AndroidManifest.xml 文件中更改应用主题

android:theme="@style/AppTheme.NoTitleBar"

.NoTitleBar是关键,无论你从哪个基础主题继承。 - ddotsenko

1

对于Kotlin,您只需要这一行代码:

this.actionBar?.hide()

例如,在设置内容之前使用它:

super.onCreate(savedInstanceState)

//this line is important
this.actionBar?.hide()

setContent {
    Box(Modifier.fillMaxSize()) {
    .
    .
    .

你不需要对 XML 进行任何其他更改。


-1
在你的style.xml文件中添加这两行代码。
<item name="windowActionBar">false</item>
<item name="windowNoTitle">true</item>

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