Android: วิธีซ่อน ActionBar ในกิจกรรมบางอย่าง


96

ฉันได้พัฒนาแอปพลิเคชั่นสาธิตง่ายๆด้วยหน้าจอเริ่มต้นแผนที่และหน้าจอปกติบางส่วน

ฉันมีแถบการทำงานที่ด้านบนซึ่งมีโลโก้ ทุกอย่างดูดีบนโทรศัพท์ของฉัน (Galaxy s1 I9000 V2.3) แต่เมื่อฉันทดสอบบน Galaxy s2 v4 แถบการกระทำจะปรากฏในหน้าจอเริ่มต้นและในหน้าจอแผนที่ด้วย

กิจกรรม spalsh และแผนที่ไม่ได้สืบทอดมาจาก ActionBarActivity ด้วยซ้ำดังนั้นจะเป็นไปได้อย่างไรและฉันจะทำให้มันหายไปได้อย่างไร

ประจักษ์:

<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>

นิยาม MapActivity (มันยาวมากดังนั้นฉันจึงรวมแค่คำจำกัดความ):

public class MapActivity extends FragmentActivity implements LocationListener

กิจกรรม 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);

    }

}

คำตอบ:


129

ใช้สิ่งต่อไปนี้ในธีมของคุณสำหรับกิจกรรมใน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>

ที่ควรทำเคล็ดลับ


1
ฉันใช้ไม่ได้getActionBarเนื่องจากกิจกรรมไม่ได้รับช่วงต่อจากActionBarActivity
Tomer

ถ้าฉันใช้<item name="android:windowActionBar">false</item>มันจะไม่ซ่อนมันในทุกหน้าจอใช่ไหม
Tomer

อัปเดตคำตอบของฉันที่เหมาะกับความต้องการของคุณมากขึ้น
Si8

137

ในขณะที่คุณกำลังถามเกี่ยวกับวิธีซ่อนตัวในกิจกรรมบางอย่างนี่คือสิ่งที่คุณต้องการ:

getSupportActionBar().hide(); 

33

1. ไปที่manifest.xmlไฟล์ของคุณ

2. ที่คุณต้องการซ่อน ActionBar แล้วของคุณFindactivity tagadd ,

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

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

21

หากคุณต้องการรับเต็มหน้าจอโดยไม่มี actionBar และ Title

เพิ่มใน 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>

และใช้สไตล์ในกิจกรรมของ manifest.xml

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

15

โดยActionBarปกติจะมีอยู่แล้วFragmentsจากที่Activityคุณสามารถซ่อนได้

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

และจากสิ่งที่Fragmentคุณทำได้

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

6
ฉันใช้: getSupportActionBar().hide(); ใน ActionBarActivity
Ihab Shoully

8

หากคุณใช้ Theme.AppCompat.Light สิ่งที่ดีกว่าคือ Theme.AppCompat.Light.NoActionBar

ฉันพบว่าการใช้ Theme.AppCompat.NoTitleBar ทำให้ข้อความปุ่มของฉันมองไม่เห็นดังนั้นฉันจึงใช้ 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

สิ่งนี้ใช้ได้กับฉัน! ใส่สิ่งนี้ในกิจกรรมของคุณในรายการ

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

คุณยังสามารถสร้างธีมที่กำหนดเองได้ใน styles.xml ดังนี้:

<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>

หวังว่าจะช่วยได้


5

คุณสามารถใช้โหมดโปรไฟล์ต่ำ ดูที่นี่

เพียงแค่ค้นหาSYSTEM_UI_FLAG_LOW_PROFILEว่าปุ่มนำทางจะหรี่แสงลงหากมีอยู่บนหน้าจอ


+1 สำหรับการแนะนำสิ่งนี้ :) ฉันจะตรวจสอบโซลูชัน @ SiKni8 ก่อนเพราะฉันชอบโซลูชันที่ไม่เข้ารหัส
Tomer

1
ไม่มีปัญหาฉันพบว่ามีประโยชน์มากสำหรับการแสดงแผนที่แบบเต็มหน้าจอในแอปของฉันทำงานได้ดีสำหรับฉันจริงๆ
TMH

5

หากต้องการซ่อน ActionBar ให้เพิ่มโค้ดนี้ลงในไฟล์ java

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

4

คำตอบข้างต้นจะช่วยในเรื่อง ActionBar หากต้องการเพิ่มให้ใช้รหัสต่อไปนี้ในกรณีที่คุณใช้ Splash Screen: ใช้สิ่งนี้ก่อนที่คุณจะตั้งค่ามุมมองเนื้อหา:

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

เพื่อชี้แจงนี่คือวิธีที่คุณทำ:

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

สิ่งนี้จะทำให้หน้าจอของคุณเป็นแบบเต็มหน้าจอเช่นลบแถบด้านบนที่คุณเห็นแถบเครือข่ายเป็นต้น


4

ใช้สิ่งต่อไปนี้ในธีมของคุณสำหรับกิจกรรมใน 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>

จากนั้นใช้สิ่งต่อไปนี้ในสไตล์ของคุณใน 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>

1

ใช้งานได้ใน API 27

ใน styles.xml แทนที่โค้ดดังต่อไปนี้ ....

<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>

จากนั้นในไฟล์ (เช่น activity_list.xml) ซึ่งคุณต้องการให้แถบเครื่องมือใส่รหัสต่อไปนี้

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

หากคุณมีปัญหาในการเปลี่ยนไปใช้เลย์เอาต์เชิงเส้น (เนื่องจากเป็นสิ่งที่ทดสอบโค้ดนี้)


1

จาก ที่นี่ :

เริ่มต้นด้วย Android 3.0 (API ระดับ 11) กิจกรรมทั้งหมดที่ใช้ธีมเริ่มต้นจะมี ActionBar เป็นแถบแอป อย่างไรก็ตามคุณลักษณะของแถบแอปจะค่อยๆถูกเพิ่มเข้ามาใน ActionBar ในเวอร์ชันต่างๆของ Android เป็นผลให้พฤติกรรมของ ActionBar พื้นเมืองที่แตกต่างกันขึ้นอยู่กับสิ่งที่รุ่นของระบบ Android อุปกรณ์ที่อาจใช้ ในทางตรงกันข้ามคุณลักษณะล่าสุดจะถูกเพิ่มลงในเวอร์ชันของไลบรารีสนับสนุน Toolbarและมีอยู่ในอุปกรณ์ใด ๆ ที่สามารถใช้ไลบรารีการสนับสนุนได้

ดังนั้นทางเลือกหนึ่งคือปิดใช้งาน ActionBar โดยสมบูรณ์ (ในไฟล์ manifest.xml ของแอป) จากนั้นเพิ่ม Toolbar ในทุกหน้าที่ต้องการ ActionBar

(ตามลิงค์ด้านบนเพื่อดูคำอธิบายทีละขั้นตอน)



0

เพิ่มรูปแบบใหม่ใน style.xml ของคุณ

<!-- 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>

จากนั้นเพิ่มบรรทัดต่อไปนี้ในรายการของคุณ

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

0

ตรวจสอบแอตทริบิวต์ padding หากปัญหายังคงมีอยู่หลังจากเปลี่ยนธีม

Padding Issue สร้างช่องว่างที่ด้านบนของหน้าต่าง Fragment / หน้าต่างแอพ

Padding Issue สร้างช่องว่างที่ด้านบนของหน้าต่าง Fragment / หน้าต่างแอพ

เมื่อคุณลบช่องว่างภายใน - ค่าสูงสุดโดยอัตโนมัติช่องว่างจะถูกลบออก


0

MainActivity แก้มแรกสำหรับแท็กกิจกรรมกดไลค์ -

MainActivity ระดับสาธารณะขยายAppCompatActivity

จากนั้นไปที่ไฟล์ xml menifest และเขียน -

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

ในแท็กกิจกรรม

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.