Câu trả lời:
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.xml
tậ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"/>
@android:style/Theme.Holo.Light.NoActionBar.Fullscreen
AppCompatActivity
, bạn cần phải đặt requestWindowFeature
trước super.onCreate
. Nếu không, bạn sẽ nhận được:android.util.AndroidRuntimeException: requestFeature() must be called before adding content
Có một kỹ thuật gọi là Chế độ toàn màn hình nhập vai có sẵn trong KitKat .
Nếu bạn không muốn sử dụng chủ đề @android:style/Theme.NoTitleBar.Fullscreen
vì 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>
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);
}
Nếu bạn sử dụng AppCompat và ActionBarActivity, thì hãy sử dụng cái này
getSupportActionBar().hide();
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.
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" />
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:
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)!
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
AndroidManifest.xml
<activity ...
android:theme="@style/FullScreenTheme"
>
</activity>
Để ẩ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)
...
}
}
Để ẩ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
.
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);
-----
-----
}
requestWindowFeature(Window.FEATURE_NO_TITLE);
trước super.onCreate(savedInstanceState);
?
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);
}
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.
Đâ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ể.
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 :
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);
}
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) }
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.
@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);
}
}
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.
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">
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);
}
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();
}
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
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>
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);
}
...
}
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
Để 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()
:
<style name="AppTheme" parent="Theme.AppCompat.NoActionBar">
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()
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 :)
Để 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>