Hoạt động toàn màn hình trong Android?


Câu trả lời:


1052

Bạn có thể làm điều đó theo chương trình:

public class ActivityName extends Activity {
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        // remove title
        requestWindowFeature(Window.FEATURE_NO_TITLE);
        getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
            WindowManager.LayoutParams.FLAG_FULLSCREEN);
        setContentView(R.layout.main);
    }
}

Hoặc bạn có thể làm điều đó thông qua AndroidManifest.xmltập tin của bạn :

<activity android:name=".ActivityName"
    android:label="@string/app_name"
    android:theme="@android:style/Theme.NoTitleBar.Fullscreen"/>

Biên tập:

Nếu bạn đang sử dụng AppCompatActivity thì bạn cần thêm chủ đề mới

<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à sau đó sử dụng nó.

<activity android:name=".ActivityName"
    android:label="@string/app_name"
    android:theme="@style/Theme.AppCompat.Light.NoActionBar.FullScreen"/>

Cảm ơn https://stackoverflow.com/a/25365193/1646479


65
chỉ cần thuộc tính android: theme = "@ android: style / Theme.NoTitleBar.Fullscreen" trên hoạt động của bạn trên bảng kê khai là đủ. Cảm ơn :)
Praveen

19
Nếu ứng dụng của bạn sử dụng bất kỳ chủ đề nào khác, hãy sử dụng tên chủ đề tương ứng Eg For White theme @android:style/Theme.Holo.Light.NoActionBar.Fullscreen
ankitjaininfo 25/07/13

5
Đặt chủ đề trong tệp kê khai gây ra màn hình đen khi khởi chạy, tốt hơn là thực hiện theo mã.
aurelien_lepage

4
nếu bạn đang sử dụng ActionBar và chỉ muốn không có TitleBar, hãy xóa dòng `requestWindowFeature () 'vì điều này sẽ gây ra
NullPulum

3
Nếu bạn đang sử dụng AppCompatActivity, bạn cần phải đặt requestWindowFeaturetrước super.onCreate. Nếu không, bạn sẽ nhận được:android.util.AndroidRuntimeException: requestFeature() must be called before adding content
Slav

128

Có một kỹ thuật gọi là Chế độ toàn màn hình nhập vai có sẵn trong KitKat . Bản demo chế độ toàn màn hình

Thí dụ


5
Chỉ cần lưu ý rằng "bong bóng nhắc nhở" sẽ được hiển thị khi lần đầu tiên ứng dụng của bạn chuyển sang chế độ nhập vai. Điều này tốt cho một số hoạt động, nhưng không phải nếu bạn đang thực hiện một màn hình giật gân.
LarsH

nghỉ khi sử dụng spinners
ViVekH

chỉ muốn ẩn thanh điều hướng phía dưới chứ không phải thanh trạng thái. Có thể làm được không?
PvDev

76

Nếu bạn không muốn sử dụng chủ đề @android:style/Theme.NoTitleBar.Fullscreenvì bạn đã sử dụng một chủ đề của riêng bạn, bạn có thể sử dụng android:windowFullscreen.

Trong AndroidManifest.xml:

<activity
  android:name=".ui.activity.MyActivity"
  android:theme="@style/MyTheme">
</activity>

Trong tệp kiểu tệp:

<style name="MyTheme"  parent="your parent theme">
  <item name="android:windowNoTitle">true</item>
  <item name="android:windowFullscreen">true</item> 
</style>

thêm phụ huynh làm chủ đề phụ huynh của bạn
Saurabh Bhandari

bạn cũng cần đặt <item name = "windowActionBar"> false </ item>
htafoya

52

Trong tệp AndroidManifest.xml :

<activity
    android:name=".Launch"
    android:label="@string/app_name"
    android:theme="@android:style/Theme.NoTitleBar.Fullscreen" > <!-- This line is important -->

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

Hoặc trong mã Java :

protected void onCreate(Bundle savedInstanceState){
    requestWindowFeature(Window.FEATURE_NO_TITLE);
    getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);
}

2
bạn phải thêm một mã để thực hiện điều đó theo chương trình trong JAVA
Tiến sĩ aNdRO

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

chỉ muốn ẩn thanh điều hướng phía dưới chứ không phải thanh trạng thái. Có thể làm được không?
PvDev

32

Nếu bạn sử dụng AppCompat và ActionBarActivity, thì hãy sử dụng cái này

getSupportActionBar().hide();


Điều này sẽ không xóa thanh trạng thái trên đầu
Manohar Reddy

24

Cẩn thận với

requestWindowFeature(Window.FEATURE_NO_TITLE);

Nếu bạn đang sử dụng bất kỳ phương pháp nào để đặt thanh hành động như sau:

getSupportActionBar().setHomeButtonEnabled(true);

Nó sẽ gây ra một ngoại lệ con trỏ null.


Lý do là vì bạn đang điều chỉnh thanh hành động mà mã thay đổi kích thước đang cố ẩn!
Andy

22

Hãy thử điều này với appcompat từ style.xml. Nó cung cấp hỗ trợ cho tất cả các nền tảng.

<!-- Application theme. -->
<style name="AppTheme.FullScreen" parent="AppTheme">
    <item name="android:windowFullscreen">true</item>
</style>


<!-- Application theme. -->
<style name="AppTheme" parent="@style/Theme.AppCompat.Light.NoActionBar" />

giải pháp tốt đẹp và dễ dàng. Đối với người mới, hãy thêm chủ đề này vào thẻ Hoạt động hoặc Ứng dụng trong AndroidManifest.xml: android: theme = "@ style / AppTheme.FullScreen"
Leos Literak

1
chỉ muốn ẩn thanh điều hướng phía dưới chứ không phải thanh trạng thái. Có thể làm được không?
PvDev

13

Sử dụng Android Studio (phiên bản hiện tại là 2.2.2 tại thời điểm hiện tại) rất dễ dàng để thêm một hoạt động toàn màn hình.

Xem các bước:

  1. Nhấp chuột phải vào gói chính java của bạn> Chọn Tải New Mới> Chọn Hoạt động trực tuyến> Sau đó, nhấp vào trên Full Full Activity Activity.

Bước một

  1. Tùy chỉnh hoạt động (Tên hoạt động của tên khác, Tên bố cục của tên, v.v.) và nhấp vào Kết thúc trò chơi.

Bước hai

Làm xong!

Bây giờ bạn có một hoạt động toàn màn hình được thực hiện dễ dàng (xem lớp java và bố cục hoạt động để biết cách mọi thứ hoạt động)!


8

Đối với những người sử dụng AppCompact ... style.xml

 <style name="Xlogo" parent="Theme.AppCompat.DayNight.NoActionBar">
    <item name="android:windowNoTitle">true</item>
    <item name="android:windowFullscreen">true</item>
</style>

Sau đó đặt tên trong bảng kê khai của bạn ...


7

Trước tiên, bạn phải đặt cho bạn chủ đề ứng dụng với "NoActionBar" như bên dưới

<!-- Application theme. -->
<style name="AppTheme" parent="@style/Theme.AppCompat.Light.NoActionBar" />

Sau đó thêm các dòng này trong hoạt động toàn màn hình của bạn.

public class MainActiviy extends AppCompatActivity {
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        requestWindowFeature(Window.FEATURE_NO_TITLE);
        this.getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
                                  WindowManager.LayoutParams.FLAG_FULLSCREEN);
        setContentView(R.layout.main);
    }
}

Nó sẽ ẩn thanh hành động / thanh công cụ và cả thanh trạng thái trong hoạt động toàn màn hình của bạn


7

AndroidManifest.xml

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

I. Ứng dụng chính của bạn chủ đề là Theme.AppCompat.Light.DarkActionBar

Để ẩn ActionBar / StatusBar
style.xml

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

<style name="FullScreenTheme" parent="AppTheme">
    <!--this property will help hide the ActionBar-->
    <item name="windowNoTitle">true</item>
    <!--currently, I don't know why we need this property since use windowNoTitle only already help hide actionbar. I use it because it is used inside Theme.AppCompat.Light.NoActionBar (you can check Theme.AppCompat.Light.NoActionBar code). I think there are some missing case that I don't know-->
    <item name="windowActionBar">false</item>
    <!--this property is used for hiding StatusBar-->
    <item name="android:windowFullscreen">true</item>
</style>

Để ẩn thanh điều hướng hệ thống

public class MainActivity extends AppCompatActivity {

    protected void onCreate(Bundle savedInstanceState) {
        getWindow().getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_HIDE_NAVIGATION);
        setContentView(R.layout.activity_main)
        ...
    }
 }

II. Chủ đề ứng dụng chính của bạn là Theme.AppCompat.Light.NoActionBar

Để ẩn ActionBar / StatusBar
style.xml

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

<style name="FullScreenTheme" parent="AppTheme">
    <!--don't need any config for hide ActionBar because our apptheme is NoActionBar-->
    <!--this property is use for hide StatusBar-->
    <item name="android:windowFullscreen">true</item> // 
</style>

Để ẩn thanh điều hướng hệ thống

Tương tự như thế Theme.AppCompat.Light.DarkActionBar.

Bản giới thiệu


Cảm ơn. Đã thử nghiệm trên Android 5.0.1.
CoolMind

@CoolMind gặp lại bạn. Cảm ơn bạn đã chỉnh sửa
Phan Văn Linh

6

cảm ơn vì câu trả lời @Cristian tôi đã gặp lỗi

android.util.AndroidR nbException: requestFeature () phải được gọi trước khi thêm nội dung

tôi đã giải quyết điều này bằng cách sử dụng

@Override
protected void onCreate(Bundle savedInstanceState) {

    requestWindowFeature(Window.FEATURE_NO_TITLE);

    super.onCreate(savedInstanceState);

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

    setContentView(R.layout.activity_login);

    -----
    -----
}

Có nên đặt requestWindowFeature(Window.FEATURE_NO_TITLE);trước super.onCreate(savedInstanceState);?
CoolMind

4

hiển thị đầy đủ nhập vai:

private void askForFullScreen()
    {
        getActivity().getWindow().getDecorView().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);
    }

di chuyển ra khỏi chế độ nhập vai đầy đủ:

 private void moveOutOfFullScreen() {
        getActivity().getWindow().getDecorView().setSystemUiVisibility(
                View.SYSTEM_UI_FLAG_LAYOUT_STABLE
                        | View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION
                        | View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN);
    }

3

Tôi muốn sử dụng chủ đề của riêng mình thay vì sử dụng @android: style / Theme.NoTitleBar.Fullscreen. Nhưng nó không hoạt động như một số bài đăng ở đây đã đề cập, vì vậy tôi đã thực hiện một số điều chỉnh để tìm ra nó.

Trong AndroidManifest.xml:

<activity
    android:name=".ui.activity.MyActivity"
    android:theme="@style/MyTheme">
</activity>

Trong tệp kiểu tệp:

<style name="MyTheme">
    <item name="android:windowNoTitle">true</item>
    <item name="android:windowActionBar">false</item>
    <item name="windowNoTitle">true</item>
    <item name="windowActionBar">false</item>
    <item name="android:windowFullscreen">true</item>
</style>

Lưu ý: trong trường hợp của tôi, tôi phải sử dụng name="windowActionBar"thay vì name="android:windowActionBar"trước khi nó hoạt động đúng. Vì vậy, tôi chỉ sử dụng cả hai để đảm bảo trong trường hợp tôi cần chuyển sang phiên bản Android mới sau này.


3

Đây là một mã ví dụ. Bạn có thể bật / tắt cờ để ẩn / hiển thị các phần cụ thể.

nhập mô tả hình ảnh ở đây

public static void hideSystemUI(Activity activity) {
    View decorView = activity.getWindow().getDecorView();
    decorView.setSystemUiVisibility(
            View.SYSTEM_UI_FLAG_LAYOUT_STABLE
                    | View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
                    //| View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION
                    //| View.SYSTEM_UI_FLAG_HIDE_NAVIGATION
                    | View.SYSTEM_UI_FLAG_FULLSCREEN // hide status bar
                    | View.SYSTEM_UI_FLAG_IMMERSIVE);
}

Sau đó, bạn đặt lại về trạng thái mặc định :

nhập mô tả hình ảnh ở đây

public static void showSystemUI(Activity activity) {
    View decorView = activity.getWindow().getDecorView();
    decorView.setSystemUiVisibility(
            View.SYSTEM_UI_FLAG_LAYOUT_STABLE
                    | View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION
                    | View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN);
}

Bạn có thể gọi các chức năng trên từ onCreate:

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.course_activity);
    UiUtils.hideSystemUI(this);
}

3

KOTLINE

Theo tài liệu google, có một cách dễ dàng:

override fun onWindowFocusChanged(hasFocus: Boolean) {
super.onWindowFocusChanged(hasFocus)
if (hasFocus) hideSystemUI() }


private fun hideSystemUI() {
// Enables regular immersive mode.
// For "lean back" mode, remove SYSTEM_UI_FLAG_IMMERSIVE.
// Or for "sticky immersive," replace it with SYSTEM_UI_FLAG_IMMERSIVE_STICKY
window.decorView.systemUiVisibility = (View.SYSTEM_UI_FLAG_IMMERSIVE
        // Set the content to appear under the system bars so that the
        // content doesn't resize when the system bars hide and show.
        or View.SYSTEM_UI_FLAG_LAYOUT_STABLE
        or View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION
        or View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
        // Hide the nav bar and status bar
        or View.SYSTEM_UI_FLAG_HIDE_NAVIGATION
        or View.SYSTEM_UI_FLAG_FULLSCREEN)      }


// Shows the system bars by removing all the flags
// except for the ones that make the content appear under the system bars.
private fun showSystemUI() {
window.decorView.systemUiVisibility = 
(View.SYSTEM_UI_FLAG_LAYOUT_STABLE
        or View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION
        or View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN)       }

Tài liệu Google


2

MIPO: Sử dụng getWindow (). SetLayout () có thể làm hỏng màn hình toàn màn hình của bạn! Lưu ý các tài liệu cho phương pháp này nói:

Đặt tham số bố trí chiều rộng và chiều cao của cửa sổ ... bạn có thể thay đổi chúng thành ... một giá trị tuyệt đối để tạo một cửa sổ không toàn màn hình.

http://developer.android.com/reference/android/view/Window.html#setLayout%28int,%20int%29

Đối với mục đích của tôi, tôi thấy rằng tôi phải sử dụng setLayout với các tham số tuyệt đối để thay đổi kích thước cửa sổ toàn màn hình của mình một cách chính xác. Hầu hết thời gian, điều này làm việc tốt. Nó được gọi bởi một sự kiện onConfigurationChanged (). Có một tiếng nấc, tuy nhiên. Nếu người dùng thoát khỏi ứng dụng, thay đổi hướng và nhập lại, điều đó sẽ dẫn đến việc loại bỏ mã của tôi bao gồm setLayout (). Trong cửa sổ thời gian nhập lại này, thanh trạng thái của tôi (được ẩn bởi bảng kê khai) sẽ được tạo lại để xuất hiện, nhưng tại bất kỳ thời điểm nào khác, setLayout () sẽ không gây ra điều này! Giải pháp là thêm một lệnh gọi setLayout () bổ sung sau cuộc gọi có các giá trị cứng như vậy:

       public static void setSize( final int width, final int height ){
//DO SOME OTHER STUFF...
            instance_.getWindow().setLayout( width, height );
            // Prevent status bar re-appearance
            Handler delay = new Handler();
            delay.postDelayed( new Runnable(){ public void run() {
                instance_.getWindow().setLayout(
                    WindowManager.LayoutParams.FILL_PARENT,
                    WindowManager.LayoutParams.FILL_PARENT );
            }}, FILL_PARENT_ON_RESIZE_DELAY_MILLIS );
        }

Cửa sổ sau đó được định kích thước lại một cách chính xác và thanh trạng thái không xuất hiện lại bất kể sự kiện nào đã kích hoạt điều này.


2
 @Override
public void onConfigurationChanged(Configuration newConfig) {
    super.onConfigurationChanged(newConfig);
    adjustFullScreen(newConfig);
}

@Override
public void onWindowFocusChanged(boolean hasFocus) {
    super.onWindowFocusChanged(hasFocus);
    if (hasFocus) {
        adjustFullScreen(getResources().getConfiguration());
    }
}
private void adjustFullScreen(Configuration config) {
    final View decorView = getWindow().getDecorView();
    if (config.orientation == Configuration.ORIENTATION_LANDSCAPE) {
        decorView.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
                        | View.SYSTEM_UI_FLAG_FULLSCREEN
                        | View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY);
    } else {
        decorView.setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_STABLE);
    }
}

2

Bên trong Styles.xml ...

<!-- No action bar -->
<style name="NoActonBar" parent="Theme.AppCompat.Light.NoActionBar">
    <!-- Theme customization. -->
    <item name="colorPrimary">#000</item>
    <item name="colorPrimaryDark">#444</item>
    <item name="colorAccent">#999</item>
    <item name="android:windowFullscreen">true</item>
</style>

Điều này làm việc cho tôi. Hy vọng nó sẽ giúp bạn.


2

Với kotlin, đây là cách tôi đã làm:

class LoginActivity : AppCompatActivity() {

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_login)
        window.decorView.systemUiVisibility =
                View.SYSTEM_UI_FLAG_LAYOUT_STABLE or
                View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN or
                View.SYSTEM_UI_FLAG_FULLSCREEN

    }
}

Chế độ nhập vai

Chế độ nhập vai dành cho các ứng dụng mà người dùng sẽ tương tác nhiều với màn hình. Ví dụ là các trò chơi, xem hình ảnh trong thư viện hoặc đọc nội dung được phân trang, như một cuốn sách hoặc các slide trong bản trình bày. Đối với điều này, chỉ cần thêm dòng này:

View.SYSTEM_UI_FLAG_HIDE_NAVIGATION or
View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION

Dính nhập vai

Trong chế độ nhập vai thông thường, bất cứ khi nào người dùng vuốt từ một cạnh, hệ thống sẽ đảm bảo tiết lộ các thanh hệ thống. Ứng dụng của bạn thậm chí sẽ không biết rằng cử chỉ đó đã xảy ra. Vì vậy, nếu người dùng thực sự có thể cần phải vuốt từ mép màn hình như một phần của trải nghiệm ứng dụng chính, chẳng hạn như khi chơi một trò chơi đòi hỏi nhiều thao tác vuốt hoặc sử dụng ứng dụng vẽ, bạn nên bật chế độ nhập vai "dính" .

View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY

Để biết thêm thông tin: Kích hoạt chế độ toàn màn hình

Trong trường hợp bạn sử dụng bàn phím, đôi khi xảy ra StatusBar hiển thị khi bàn phím xuất hiện. Trong trường hợp đó, tôi thường thêm nó vào xml style của mình

kiểu tệp

<style name="FullScreen" parent="AppTheme">
    <item name="android:windowFullscreen">true</item>
</style>

Và cũng dòng này để hiển thị của tôi

<activity
        android:name=".ui.login.LoginActivity"
        android:label="@string/title_activity_login"
        android:theme="@style/FullScreen">

Cảm ơn. Yêu cầu API 16 và 19.
CoolMind 16/07/18

2

Chỉ cần dán mã này vào onCreate()phương thức

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

1

Nó làm việc cho tôi.

if (Build.VERSION.SDK_INT < 16) {
        getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
                WindowManager.LayoutParams.FLAG_FULLSCREEN);
    } else {
        View decorView = getWindow().getDecorView();
        int uiOptions = View.SYSTEM_UI_FLAG_FULLSCREEN;
        decorView.setSystemUiVisibility(uiOptions);
    }

1
Mặt khác, tốt hơn là sử dụng các mục sau: getWindow (). GetDecorView (). SetSystemUiVisibility (View.SYSTEM_UI_FLAG_FULLSCREEN);
Protonflux

1
 protected void onCreate(Bundle savedInstanceState) {
    requestWindowFeature(Window.FEATURE_NO_TITLE);
    super.onCreate(savedInstanceState);
    getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,WindowManager.LayoutParams.FLAG_FULLSCREEN);
    setContentView(R.layout.activity_splash_screen);
    getSupportActionBar().hide();

}

1

Sau rất nhiều thời gian không thành công, tôi đã tìm ra giải pháp của riêng mình, đó là bỏ tương tự với một nhà phát triển khác. Vì vậy, nếu ai đó cần cô ấy. Vấn đề là thanh điều hướng hệ thống không bị ẩn sau khi gọi. Ngoài ra trong trường hợp của tôi, tôi cần phong cảnh, vì vậy chỉ trong trường hợp bình luận dòng đó và tất cả. Trước hết tạo phong cách

    <style name="FullscreenTheme" parent="AppTheme">
    <item name="android:actionBarStyle">@style/FullscreenActionBarStyle</item>
    <item name="android:windowActionBarOverlay">true</item>
    <item name="android:windowBackground">@null</item>
    <item name="metaButtonBarStyle">?android:attr/buttonBarStyle</item>
    <item name="metaButtonBarButtonStyle">?android:attr/buttonBarButtonStyle</item>
</style>

Đây là tập tin kê khai của tôi

<activity
        android:name=".Splash"
        android:screenOrientation="landscape"
        android:configChanges="orientation|keyboard|keyboardHidden|screenLayout|screenSize"
        android:label="@string/app_name"
        android:theme="@style/SplashTheme">

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

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

    <activity
        android:name=".MainActivity"
        android:configChanges="orientation|keyboard|keyboardHidden|screenLayout|screenSize"
        android:screenOrientation="landscape"
        android:label="@string/app_name"
        android:theme="@style/FullscreenTheme">
    </activity>

Đây là hoạt động spalsh của tôi

public class Splash extends Activity {
/** Duration of wait **/
private final int SPLASH_DISPLAY_LENGTH = 2000;

/** Called when the activity is first created. */
@Override
public void onCreate(Bundle icicle) {
    super.onCreate(icicle);
    setContentView(R.layout.splash_creen);

    /* New Handler to start the Menu-Activity
     * and close this Splash-Screen after some seconds.*/
    new Handler().postDelayed(new Runnable(){
        @Override
        public void run() {
            /* Create an Intent that will start the Menu-Activity. */
            Intent mainIntent = new Intent(Splash.this,MainActivity.class);
            Splash.this.startActivity(mainIntent);
            Splash.this.finish();
        }
    }, SPLASH_DISPLAY_LENGTH);
}

}

Và đây là hoạt động toàn màn hình chính của tôi. Phương thức thi onSystemUiVisibilityChange được thoát quan trọng nếu không thanh điều hướng chính của Android sau khi gọi sẽ ở lại và không biến mất nữa. Vấn đề thực sự khó chịu, nhưng chức năng này giải quyết vấn đề đó.

lớp công khai MainActivity mở rộng AppCompatActivity {

private View mContentView;
@Override
public void onResume(){
    super.onResume();

    mContentView.setSystemUiVisibility(View.SYSTEM_UI_FLAG_LOW_PROFILE
            | View.SYSTEM_UI_FLAG_FULLSCREEN
            | View.SYSTEM_UI_FLAG_LAYOUT_STABLE
            | View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY
            | View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION
            | View.SYSTEM_UI_FLAG_HIDE_NAVIGATION);

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

    setContentView(R.layout.fullscreen2);
    ActionBar actionBar = getSupportActionBar();
    if (actionBar != null)
    {
        actionBar.hide();
    }
    mContentView = findViewById(R.id.fullscreen_content_text);
    mContentView.setSystemUiVisibility(View.SYSTEM_UI_FLAG_LOW_PROFILE
            | View.SYSTEM_UI_FLAG_FULLSCREEN
            | View.SYSTEM_UI_FLAG_LAYOUT_STABLE
            | View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY
            | View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION
            | View.SYSTEM_UI_FLAG_HIDE_NAVIGATION);



    View decorView = getWindow().getDecorView();
    decorView.setOnSystemUiVisibilityChangeListener
            (new View.OnSystemUiVisibilityChangeListener()
            {
                @Override
                public void onSystemUiVisibilityChange(int visibility)
                {
                    System.out.println("print");

                    if ((visibility & View.SYSTEM_UI_FLAG_FULLSCREEN) == 0)
                    {
                        mContentView.setSystemUiVisibility(View.SYSTEM_UI_FLAG_LOW_PROFILE
                                | View.SYSTEM_UI_FLAG_FULLSCREEN
                                | View.SYSTEM_UI_FLAG_LAYOUT_STABLE
                                | View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY
                                | View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION
                                | View.SYSTEM_UI_FLAG_HIDE_NAVIGATION);
                    }
                    else
                    {

                        mContentView.setSystemUiVisibility(View.SYSTEM_UI_FLAG_LOW_PROFILE
                                    | View.SYSTEM_UI_FLAG_FULLSCREEN
                                    | View.SYSTEM_UI_FLAG_LAYOUT_STABLE
                                    | View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY
                                    | View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION
                                    | View.SYSTEM_UI_FLAG_HIDE_NAVIGATION);

                        }
                }
            });

}

}

Đây là cách bố trí màn hình giật gân của tôi:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical" android:layout_width="fill_parent"
    android:layout_height="fill_parent">
    <ImageView android:id="@+id/splashscreen" android:layout_width="wrap_content"
        android:layout_height="fill_parent"
        android:background="@android:color/white"
        android:src="@drawable/splash"
        android:layout_gravity="center"/>
    <TextView android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:text="Hello World, splash"/>
</LinearLayout>

This is my fullscreen layout
    <?xml version="1.0" encoding="utf-8"?>
    <FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:background="#0099cc"
        >
        <TextView
            android:id="@+id/fullscreen_content_text"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:gravity="center"
            android:keepScreenOn="true"
            android:text="@string/dummy_content2"
            android:textColor="#33b5e5"
            android:textSize="50sp"
            android:textStyle="bold" />

    </FrameLayout>

Tôi hy vọng điều này sẽ giúp bạn


1

https://developer.android.com/training/system-ui/immersive.html

Hoạt động :

@Override
public void onWindowFocusChanged(boolean hasFocus) {
        super.onWindowFocusChanged(hasFocus);
    if (hasFocus) {
        decorView.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
                | View.SYSTEM_UI_FLAG_FULLSCREEN
                | View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY);
    }
}

AndroidQuản lý:

 <activity android:name=".LoginActivity"
            android:configChanges="orientation|keyboardHidden|screenSize"
            android:label="@string/title_activity_login"
            android:theme="@style/FullscreenTheme"
            ></activity>

1

Tạo một hoạt động trống và thêm hai dòng vào onCreate.

public class MainActivity extends AppCompatActivity {

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

        // full screen activity
        getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);
        getSupportActionBar().hide();

        setContentView(R.layout.activity_main);
    }
    ...
}

1

Sử dụng phương thức này sau setContentView trong onCreate () và truyền đối tượng Window bằng getWindow () .

    public void makeActivityFullScreen(Window window){
    View decorView = window.getDecorView();
    //        int uiOptions = View.SYSTEM_UI_FLAG_FULLSCREEN;
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.P) {
       window.getAttributes().layoutInDisplayCutoutMode = WindowManager.LayoutParams.LAYOUT_IN_DISPLAY_CUTOUT_MODE_SHORT_EDGES;
    }
    decorView.setSystemUiVisibility(View.SYSTEM_UI_FLAG_LOW_PROFILE
            | View.SYSTEM_UI_FLAG_FULLSCREEN
            | View.SYSTEM_UI_FLAG_LAYOUT_STABLE
            | View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY
            | View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION
            | View.SYSTEM_UI_FLAG_HIDE_NAVIGATION
    );
}

Mã này cũng sẽ làm việc cho màn hình notch. Để kiểm tra toàn màn hình notch, bạn cần có Android P nhưng nếu bạn có điện thoại hiển thị notch thì hãy vào cài đặt -> Cài đặt hiển thị -> tỷ lệ hiển thị ứng dụng ---> chọn ứng dụng của bạn ---> sẽ có hai tùy chọn an toàn là hiển thị và toàn màn hình, vui lòng chọn toàn màn hình và chạy ứng dụng, bạn cũng có thể thấy toàn màn hình mà không cần có Android Pie


1

Để làm cho hoạt động của bạn toàn màn hình làm điều này:

    // add following lines before setContentView
    // to hide toolbar
                if(getSupportActionBar()!=null)
                    getSupportActionBar().hide();
    //to hide status bar
                getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
                    WindowManager.LayoutParams.FLAG_FULLSCREEN);

Điều này sẽ ẩn thanh công cụ và thanh trạng thái.

Nhưng trong một số trường hợp, bạn có thể muốn hiển thị thanh trạng thái với nền trong suốt, trong trường hợp đó, hãy làm điều này:

// add following lines before setContentView
// to hide toolbar
if(getSupportActionBar()!=null)
   getSupportActionBar().hide();
// to make status bar transparent
getWindow().setFlags(WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS, WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS);

Một số thay thế khác để ẩn thanh công cụ thay vì getSupportActionBar().hide():

  1. Xóa thanh công cụ bằng cách thay đổi cha mẹ của chủ đề ứng dụng:

<style name="AppTheme" parent="Theme.AppCompat.NoActionBar">

  1. Nếu bạn muốn xóa thanh công cụ khỏi chỉ một hoạt động thì hãy chuyển đến tệp kê khai, bên dưới thẻ hoạt động thêm: android:theme="@style/Theme.AppCompat.Light.NoActionBar"

Đối với những người yêu thích kotlin , tại sao không sử dụng các chức năng mở rộng:

Đối với trường hợp đầu tiên:

fun AppCompatActivity.makeItFullScreenStatusBarVisible(){
    supportActionBar?.hide()
    window.setFlags(WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS, WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS)
}

Và gọi nó trước setContentView:

makeItFullScreenStatusBarVisible()

Đối với người thứ hai:

fun AppCompatActivity.makeItFullScreenStatusBarHidden(){
    supportActionBar?.hide()
    window.setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN)
}

Và gọi nó trước setContentView:

makeItFullScreenStatusBarHidden()

0

Trên Android 10, không ai làm việc cho tôi.

Nhưng tôi đã làm việc rất tốt (dòng đầu tiên trong oncreate):

    View decorView = getWindow().getDecorView();
    int uiOptions = View.SYSTEM_UI_FLAG_IMMERSIVE;
    decorView.setSystemUiVisibility(uiOptions);

    setContentView(....);

    if (getSupportActionBar() != null) {
        getSupportActionBar().hide();
    }

thưởng thức :)


0

Để hiển thị nội dung thông qua notch hoặc khu vực cắt bỏ. Điều này có thể giúp đỡ từ các tài liệu:

LAYOUT_IN_DISPLAY_CUTOUT_MODE_SHORT_EDGES - Nội dung hiển thị vào khu vực bị cắt ở cả chế độ dọc và ngang.

Điều quan trọng đối với tôi là dòng này trong phong cách hoạt động:

// Important to draw through the cutouts
<item name="android:windowLayoutInDisplayCutoutMode">shortEdges</item> 

Đối với tôi, tôi muốn hiển thị một hình ảnh ở chế độ nhập vai. Khi tôi nhấp vào nó, tôi muốn giao diện người dùng hệ thống (thanh trạng thái & điều hướng) hiển thị.

Đây là giải pháp của tôi:

1- Trong Hoạt động, một số phương pháp để hiển thị / ẩn UI hệ thống (thanh trạng thái / thanh điều hướng)

private fun hideSystemUI() {
    sysUIHidden = true
    window.decorView.systemUiVisibility = (
            View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY
            or View.SYSTEM_UI_FLAG_LAYOUT_STABLE 
            // Hide the nav bar and status bar
            or View.SYSTEM_UI_FLAG_HIDE_NAVIGATION // Hide nav bar
            or View.SYSTEM_UI_FLAG_FULLSCREEN // Hide status bar
            )
}


private fun showSystemUI() {
    sysUIHidden = false
    window.decorView.systemUiVisibility = (
            View.SYSTEM_UI_FLAG_LAYOUT_STABLE
            // Set the content to appear under the system bars so that the
            // content doesn't resize when the system bars hide and show.
            or View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION // layout Behind nav bar
            or View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN // layout Behind status bar
            )
}

2- Đảm bảo điều này trong chế độ xem gốc của bố cục xml của bạn

android:fitsSystemWindows="false"

3- Kiểu cho toàn màn hình Hoạt động sẽ cung cấp cho các thanh trạng thái / điều hướng một nền bán trong suốt khi chúng hiển thị:

<style name="FullscreenTheme" parent="AppTheme">
    <item name="android:actionBarStyle">@style/FullscreenActionBarStyle</item>
    <item name="android:windowActionBarOverlay">true</item>
    <item name="android:windowBackground">@null</item>
    <item name="metaButtonBarStyle">?android:attr/buttonBarStyle</item>
    <item name="metaButtonBarButtonStyle">?android:attr/buttonBarButtonStyle</item>
    <item name="android:statusBarColor">#50000000</item>
    <item name="android:navigationBarColor">#50000000</item>
    // Important to draw behind cutouts
    <item name="android:windowLayoutInDisplayCutoutMode">shortEdges</item> 
</style>

<style name="FullscreenActionBarStyle" parent="Widget.AppCompat.ActionBar">
    <item name="android:background">@color/sysTransparent</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.