Chủ đề toàn màn hình cho AppCompat


304

Tôi muốn biết làm thế nào tôi có thể áp dụng chủ đề toàn màn hình (không có thanh tiêu đề + không có thanh hành động) cho một hoạt động. Tôi đang sử dụng thư viện AppCompat từ gói hỗ trợ v7.

Tôi đã cố gắng áp dụng android:theme="@android:style/Theme.NoTitleBar.Fullscreen"cho hoạt động cụ thể của mình nhưng nó đã bị sập. Tôi nghĩ đó là vì chủ đề ứng dụng của tôi là như thế này.

<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">

Tôi cũng đã thử điều này

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

trong đó chỉ ẩn thanh tiêu đề chứ không ẩn thanh hành động. Cách giải quyết hiện tại của tôi là ẩn thanh hành động với

getSupportActionBar().hide();

Câu trả lời:


836

Khi bạn sử dụng Theme.AppCompat trong ứng dụng của mình, bạn có thể sử dụng FullScreenTheme bằng cách thêm mã dưới đây vào kiểu.

<style name="Theme.AppCompat.Light.NoActionBar.FullScreen" parent="@style/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>

và cũng đề cập đến trong tệp kê khai của bạn.

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

67
Kiểu cha mẹ phải là "Theme.AppCompat.Light.NoActionBar"
Hover Ruan

3
Trên thực tế, đủ để thêm tệp này vào tệp xml kiểu: <item name = "android: windowFullscreen"> true </ item>. Khả năng hiển thị của thanh hành động (thanh tiêu đề) có thể được kiểm soát riêng bằng các phương thức. Leather / .show khi chạy.
Amin

2
FEATURE_NO_TITLE đã không được vinh danh. Không có sự khác biệt, nhưng cuối cùng tôi đã thay đổi Hoạt động của mình để mở rộng Hoạt động thay vì AppCompatActivity và cùng một mã của tôi đã hoạt động (rất may tôi không cần AppCompat): this.requestWindowFeature (Window.FEATURE_NO_TITLE); getWindow (). getDecorView (). setSystemUiVisibility (View.SYSTEM_UI_FLAG_LAYOUT_STABLE | Xem
dùng888867

điều này cũng ẩn thanh trạng thái :(
Omama

3
Tôi sẽ thêm hideNavigation()vào onResume()- không có điều đó, thanh điều hướng vẫn hiển thị trong ứng dụng của tôi (api 18+)
Antek

69

Dựa trên câu trả lời của @nebyan, tôi thấy rằng thanh hành động vẫn không bị che giấu.

Đoạn mã sau hoạt động với tôi:

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

và tất nhiên đừng quên chỉnh sửa AndroidManifesttập tin của bạn .

<activity
    android:name="YOUR_ACTIVITY_NAME"
    android:theme="@style/AppFullScreenTheme" 
/>

@nebyan tại sao giải pháp của bạn không hoạt động, và giải pháp này có hiệu quả với tôi không? Lý do là gì?
ahmet 17/03/2017

1
không cần thiết lập <item name="android:windowNoTitle">true</item> <item name="android:windowActionBar">false</item>nếu chủ đề của bạn bao gồm.NoActionBar
user924

19
<style name="Theme.AppCompat.Light.NoActionBar" parent="@style/Theme.AppCompat">
    <item name="android:windowNoTitle">true</item>
    <item name="android:windowFullscreen">true</item>
</style>

Sử dụng xml ở trên trong style.xml, bạn sẽ có thể ẩn tiêu đề cũng như thanh hành động.


12

Các vấn đề phát sinh giữa các phiên bản trước và sau của Android 4.0 (API cấp 14).

từ đây tôi đã tạo ra giải pháp của riêng mình.

@SuppressLint("NewApi")
@Override
protected void onResume()
{
    super.onResume();

    if (Build.VERSION.SDK_INT < 16)
    {
        // Hide the status bar
        getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);
        // Hide the action bar
        getSupportActionBar().hide();
    }
    else
    {
        // Hide the status bar
        getWindow().getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_FULLSCREEN);
        / Hide the action bar
        getActionBar().hide();
    }
}

Tôi viết mã này theo phương thức onResume () bởi vì nếu bạn thoát khỏi ứng dụng của mình và sau đó bạn mở lại nó, thanh hành động vẫn hoạt động! (và vì vậy điều này khắc phục vấn đề)

Tôi hy vọng nó là hữu ích ;)


Lưu ý rằng nếu người dùng kéo thủ công thanh trạng thái, nó sẽ không tự phục hồi. Để làm cho nó tồi tệ hơn, nếu bàn phím mềm đang hiển thị, thanh trạng thái cũng tự động hiển thị và một lần nữa, sẽ không phục hồi.
Hendra Anggrian


7
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    //to remove "information bar" above the action bar
    getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
            WindowManager.LayoutParams.FLAG_FULLSCREEN);
    //to remove the action bar (title bar)
    getSupportActionBar().hide();
}

5

Bạn có thể làm theo bước dưới đây: -

AndoridMenifest.xml

<activity
            android:name=".ui.FullImageActivity"
            android:label="@string/title_activity_main"
            android:screenOrientation="landscape"
            android:theme="@style/DialogTheme">
        </activity>

Style.xml

<style name="DialogTheme" parent="android:Theme.Dialog">

    <item name="android:layout_width">fill_parent</item>
    <item name="android:layout_height">fill_parent</item>

   <!-- No backgrounds, titles or window float -->
    <item name="android:windowNoTitle">false</item>
    <item name="android:windowFullscreen">true</item>
    <item name="android:windowIsFloating">false</item>
</style>

FullImageActivity.java

@Override
protected void onCreate(Bundle savedInstanceState) {
    // TODO Auto-generated method stub
    super.onCreate(savedInstanceState);
    requestWindowFeature(Window.FEATURE_NO_TITLE);
    getWindow().setLayout(LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT);
    setContentView(R.layout.image_view);
     }

Tôi hy vọng nó sẽ giúp..Cảm ơn !!


4

Nó phải là cha mẹ = "@ style / Theme.AppCompat.Light.NoActionBar"

<style name="Theme.AppCompat.Light.NoActionBar.FullScreen" 
parent="@style/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>

Chỉ có giải pháp này thực sự ẩn thanh tiêu đề và làm cho nó hoàn toàn toàn màn hình. Nên được đánh dấu là giải pháp chính xác. Cảm ơn!
Darko Maksimovic

3

Để ẩn cả thanh trạng thái và thanh hành động và làm cho toàn màn hình hoạt động của bạn sử dụng mã sau đây trong phương thức onResume()hoặc hoạt động của bạn onWindowFocusChanged():

@Override
protected void onResume() {
    super.onResume();
    View decorView = getWindow().getDecorView();
    decorView.setSystemUiVisibility(
            View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY
            | 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
            | View.SYSTEM_UI_FLAG_FULLSCREEN);
}

Bạn có thể tìm thêm thông tin trong các liên kết sau:

Lưu ý: Sử dụng các giải pháp xml cung cấp trong chuỗi này, tôi chỉ có thể ẩn thanh trạng thái chứ không thể ẩn thanh điều hướng.


1
Cảm ơn bạn, đây là người duy nhất ẩn thanh điều hướng! Rất khuyến khích câu trả lời này.
Maharkus


2

Chủ đề này chỉ hoạt động sau API 21 (bao gồm). Và làm cho cả StatusBar và NavigationBar minh bạch.

<style name="TransparentAppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
  <item name="windowActionBar">false</item>
  <item name="windowNoTitle">true</item>
  <item name="android:statusBarColor">@android:color/transparent</item>
  <item name="android:windowBackground">@android:color/transparent</item>
  <item name="android:navigationBarColor">@android:color/transparent</item>
  <item name="android:windowIsTranslucent">true</item>
  <item name="android:windowContentOverlay">@null</item>
</style>

1

Để xóa thanh tiêu đề trong AppCompat:

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        supportRequestWindowFeature(Window.FEATURE_NO_TITLE);
        super.onCreate(savedInstanceState);
    }

1

Bạn có thể thử như sau :

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

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


1
Ngoài ra, vui lòng giải thích mã, nếu bạn cung cấp nó, nó giúp hiểu mã của bạn và có thể giúp hiểu rõ hơn về các vấn đề trong tương lai.
Lepidopteron

0

Chỉ cái này ?

<style name="Theme.AppCompat.Light.NoActionBar.FullScreen">
    <item name="android:windowFullscreen">true</item>
</style>

0

Đơn giản chỉ cần những người này theo Phong cách của bạn:

<style name="AppTheme" parent="@style/Theme.AppCompat.Light">
<item name="windowNoTitle">true</item>
<item name="windowActionBar">false</item>
<item name="android:windowFullscreen">true</item>
<item name="android:windowContentOverlay">@null</item> </style>
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.