Android: cách ẩn ActionBar trên các hoạt động nhất định


93

Tôi đã phát triển một ứng dụng demo đơn giản với một bản đồ màn hình và một số màn hình thông thường.

Tôi có một thanh tác vụ ở trên cùng có chứa biểu trưng. Tất cả đều ổn trên điện thoại của tôi (Galaxy s1 I9000 V2.3) nhưng khi tôi kiểm tra nó trên Galaxy s2 v4, thanh tác vụ cũng xuất hiện trong màn hình giật gân và trong màn hình bản đồ.

Hoạt động spalsh và bản đồ thậm chí không được kế thừa từ ActionBarActivity, vậy làm cách nào để điều đó có thể xảy ra và làm cách nào để biến nó đi?

Rõ ràng:

<application
        android:allowBackup="true"
        android:icon="@drawable/ic_launcher"
        android:theme="@style/Theme.AppCompat.Light" >
        <activity
            android:name=".HomeActivity"
            android:icon="@drawable/android_logo"
            android:label=""
            android:logo="@drawable/android_logo" >

            <!--
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
            -->
        </activity>
        <activity
            android:name=".MapActivity"
            android:label="" >
        </activity>
        <activity
            android:name=".PackageActivity"
            android:icon="@drawable/android_logo"
            android:label=""
            android:logo="@drawable/android_logo" >
        </activity>
        <activity
            android:name=".SplashActivity"
            android:label="" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>

    </application>

Định nghĩa MapActivity (nó dài nên tôi chỉ đưa vào định nghĩa):

public class MapActivity extends FragmentActivity implements LocationListener

Hoạt động Splash:

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.os.Handler;
import android.support.v7.app.ActionBar;
import android.support.v7.app.ActionBarActivity;

public class SplashActivity extends Activity{

    private static final long SPLASH_DISPLAY_LENGTH = 2000;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_splash);

        new Handler().postDelayed(new Runnable(){
            @Override
            public void run() {
                Intent mainIntent = new Intent(SplashActivity.this,HomeActivity.class);
                SplashActivity.this.startActivity(mainIntent);
                SplashActivity.this.finish();
            }
        }, SPLASH_DISPLAY_LENGTH);

    }

}

Câu trả lời:


127

Áp dụng những điều sau trong Chủ đề của bạn cho Hoạt động trong AndroidManifest.xml:

<activity android:name=".Activity"
    android:label="@string/app_name"
    android:theme="@android:style/Theme.NoTitleBar">
    <intent-filter>
        <action android:name="android.intent.action.MAIN" />
        <category android:name="android.intent.category.LAUNCHER" />
    </intent-filter>
</activity>

Điều đó sẽ làm các trick.


1
Tôi không thể sử dụng getActionBarnhư hoạt động không được kế thừa từActionBarActivity
Tomer

nếu tôi sử dụng, điều <item name="android:windowActionBar">false</item>đó sẽ không ẩn nó trên tất cả các màn hình?
Tomer

Cập nhật câu trả lời của tôi sẽ phù hợp hơn với nhu cầu của bạn.
Si8

130

Khi bạn hỏi về cách ẩn trong một hoạt động nhất định , đây là những gì bạn cần:

getSupportActionBar().hide(); 

32

1. đi đến manifest.xmltệp của bạn .

2. Findcái activity tagmà bạn muốn ẩn ActionBar của mình và sau đó add,

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

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

21

Nếu bạn muốn toàn màn hình mà không có actionBar và Title.

Thêm nó vào 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>

và sử dụng kiểu tại hoạt động của tệp kê khai.xml.

<activity ....
      android:theme="@style/AppTheme.NoActionBar" > ......
</activity> 

15

Các ActionBarthường tồn tại cùng Fragmentsnhư vậy từ Activitybạn có thể ẩn nó

getActionBar().hide();
getActionBar().show();

Fragmentbạn có thể làm được

getActivity().getActionBar().hide();
getActivity().getActionBar().show();

6
Tôi sử dụng: getSupportActionBar().hide(); trong ActionBarActivity
Ihab Shoully

8

Nếu bạn đang sử dụng Theme.AppCompat.Light, một tương đương tốt hơn sẽ là Theme.AppCompat.Light.NoActionBar.

Tôi nhận thấy rằng việc sử dụng Theme.AppCompat.NoTitleBar khiến văn bản nút của tôi bị ẩn đi nên tôi đang sử dụng Theme.AppCompat.Light.NoActionBar.

<activity android:name=".Activity"
    android:label="@string/app_name"
    android:theme="@android:style/Theme.AppCompat.Light.NoActionBar">
    <intent-filter>
        <action android:name="android.intent.action.MAIN" />
        <category android:name="android.intent.category.LAUNCHER" />
    </intent-filter>
</activity>

7

Điều này làm việc cho tôi! Đặt điều này vào Hoạt động của bạn trong tệp kê khai

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

Bạn cũng có thể tạo chủ đề tùy chỉnh của mình trong styles.xml như sau:

<style name="Theme.MyCustomTheme" parent="@style/Theme.AppCompat.Light.NoActionBar">
        <item name = "android:windowActionBar">false</item>
        <item name = "android:windowNoTitle">true</item>
        // more custom...
    </style>

Hy vọng điều này giúp đỡ.


5

Bạn có thể sử dụng chế độ Cấu hình thấp Xem tại đây

Chỉ cần tìm kiếm SYSTEM_UI_FLAG_LOW_PROFILEđiều đó cũng làm mờ các nút điều hướng nếu chúng xuất hiện trên màn hình.


1 để giới thiệu tôi đến :) này, tôi sẽ kiểm tra @ giải pháp SiKni8 đầu tiên như tôi thích giải pháp mã hóa phi
Tomer

1
Không sao, tôi thấy nó thực sự hữu ích để hiển thị bản đồ toàn màn hình trong ứng dụng của tôi, hoạt động rất tốt đối với tôi.
TMH

4

Các câu trả lời trên sẽ hữu ích với ActionBar. Để thêm vào nó, hãy sử dụng mã sau trong trường hợp bạn đang sử dụng Splash Screen: Sử dụng mã này trước khi bạn đặt chế độ xem nội dung:

    getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);

Chỉ cần làm rõ, đây là cách bạn thực hiện:

    super.onCreate(savedInstanceState);
    getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,WindowManager.LayoutParams.FLAG_FULLSCREEN);         
    setContentView(R.layout.activity_main);

Điều này sẽ làm cho màn hình của bạn trở thành toàn màn hình, tức là loại bỏ thanh trên cùng nơi bạn nhìn thấy thanh mạng, v.v.


4

Áp dụng những điều sau trong Chủ đề của bạn cho Hoạt động trong AndroidManifest.xml:

<activity android:name=".DashboardActivity"
        android:theme="@style/AppFullScreenTheme">
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />

            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>

Sau đó, Áp dụng những điều sau trong Kiểu của bạn trong style.xml

<style name="AppFullScreenTheme" parent="Theme.AppCompat.Light.NoActionBar">
    <item name="android:windowNoTitle">true</item>
    <item name="android:windowActionBar">false</item>
    <item name="android:windowFullscreen">true</item>
    <item name="android:windowContentOverlay">@null</item>
</style>

2

// Ẩn Thanh hành động ở trên cùng

// Thêm mã này vào tệp java

    ActionBar actionBar=getSupportActionBar();
    actionBar.hide();

1

Điều này hoạt động trong API 27

Trong styles.xml, hãy thay thế mã thành sau ...

<resources>
    <!-- No Action Bar -->
    <style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">
        <!-- Customize your theme here. -->
        <item name="colorPrimary">@color/colorPrimary</item>
        <item name="colorPrimaryDark">@color/colorPrimaryDark</item>
        <item name="colorAccent">@color/colorAccent</item>
    </style>
</resources>

Sau đó, trong các tệp (ví dụ: activity_list.xml) mà bạn muốn có thanh công cụ, hãy đặt mã sau.

<android.support.v7.widget.Toolbar
android:id="@+id/toolbar"
android:layout_height="wrap_content"
android:layout_width="match_parent"
android:background="@color/colorPrimary"/>

Nếu bạn gặp sự cố, hãy chuyển sang bố cục tuyến tính (vì đó là những gì mã này được thử nghiệm)


1

Từ đây :

Bắt đầu với Android 3.0 (API cấp 11), tất cả các hoạt động sử dụng chủ đề mặc định đều có ActionBar làm thanh ứng dụng. Tuy nhiên, các tính năng của thanh ứng dụng đã dần dần được thêm vào ActionBar gốc qua các bản phát hành Android khác nhau. Do đó, ActionBar gốc hoạt động khác nhau tùy thuộc vào phiên bản hệ thống Android mà thiết bị có thể đang sử dụng . Ngược lại, các tính năng gần đây nhất được thêm vào phiên bản Thanh công cụ của thư viện hỗ trợ và chúng có sẵn trên bất kỳ thiết bị nào có thể sử dụng thư viện hỗ trợ.

Vì vậy, một tùy chọn là vô hiệu hóa hoàn toàn ActionBar (trong tệp manifest.xml của ứng dụng) và sau đó thêm Thanh công cụ vào mọi trang cần ActionBar.

(theo liên kết trên để được giải thích từng bước)


0

Thay thế AndroidManifest.xml

android:theme="@style/FullscreenTheme"

đến

android:theme="@style/Theme.Design.NoActionBar"

0

Thêm kiểu mới trong style.xml của bạn

<!-- Base application theme. -->
<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">

    <!-- Customize your theme here. -->
    <item name="colorPrimary">@color/colorPrimary</item>
    <item name="colorPrimaryDark">@color/colorPrimaryDark</item>
    <item name="colorAccent">@color/colorAccent</item>
</style>

<style name="LoginTheme" parent="Theme.AppCompat.Light.NoActionBar">
    <item name="colorPrimary">@color/colorPrimary</item>
    <item name="colorPrimaryDark">@color/colorPrimaryDark</item>
    <item name="colorAccent">@color/colorAccent</item>
</style>

và sau đó thêm dòng sau vào tệp kê khai của bạn

<activity android:name=".Login"
        android:label="@string/app_name"
        android:theme="@style/LoginTheme"
        >

0

Kiểm tra thuộc tính padding nếu sự cố vẫn tồn tại sau khi thay đổi chủ đề.

Sự cố về đệm khi tạo khoảng trắng trên đầu cửa sổ phân mảnh / cửa sổ ứng dụng

Sự cố về đệm khi tạo khoảng trắng trên đầu cửa sổ phân mảnh / cửa sổ ứng dụng

Sau khi bạn loại bỏ phần đệm - giá trị cao nhất sẽ tự động loại bỏ khoảng trắng.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.