ฉันจะสร้างกิจกรรมแบบเต็มหน้าจอได้อย่างไร ฉันหมายถึงไม่มีแถบการแจ้งเตือน ความคิดใด ๆ
ฉันจะสร้างกิจกรรมแบบเต็มหน้าจอได้อย่างไร ฉันหมายถึงไม่มีแถบการแจ้งเตือน ความคิดใด ๆ
คำตอบ:
คุณสามารถทำได้โดยทางโปรแกรม:
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);
}
}
หรือคุณสามารถทำได้ผ่านAndroidManifest.xml
ไฟล์ของคุณ:
<activity android:name=".ActivityName"
android:label="@string/app_name"
android:theme="@android:style/Theme.NoTitleBar.Fullscreen"/>
แก้ไข:
หากคุณใช้ AppCompatActivity คุณต้องเพิ่มธีมใหม่
<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>
แล้วใช้มัน
<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
คุณจะต้องใส่ก่อนrequestWindowFeature
super.onCreate
มิฉะนั้นคุณจะได้รับ:android.util.AndroidRuntimeException: requestFeature() must be called before adding content
มีเทคนิคที่เรียกว่าเป็นImmersive โหมดเต็มหน้าจอที่มีอยู่ในKitKat
หากคุณไม่ต้องการที่จะใช้ชุดรูปแบบเพราะคุณอยู่แล้วโดยใช้รูปแบบของคุณเองคุณสามารถใช้@android:style/Theme.NoTitleBar.Fullscreen
android:windowFullscreen
ใน AndroidManifest.xml:
<activity
android:name=".ui.activity.MyActivity"
android:theme="@style/MyTheme">
</activity>
ใน styles.xml:
<style name="MyTheme" parent="your parent theme">
<item name="android:windowNoTitle">true</item>
<item name="android:windowFullscreen">true</item>
</style>
ในไฟล์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>
หรือในรหัสJava :
protected void onCreate(Bundle savedInstanceState){
requestWindowFeature(Window.FEATURE_NO_TITLE);
getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);
}
หากคุณใช้ AppCompat และ ActionBarActivity ให้ใช้สิ่งนี้
getSupportActionBar().hide();
ระวังด้วย
requestWindowFeature(Window.FEATURE_NO_TITLE);
หากคุณใช้วิธีการใด ๆ เพื่อตั้งค่าแถบการกระทำดังต่อไปนี้:
getSupportActionBar().setHomeButtonEnabled(true);
มันจะทำให้เกิดข้อยกเว้นตัวชี้โมฆะ
ลองนี้กับ AppCompat style.xml
จาก มันให้การสนับสนุนแพลตฟอร์มทั้งหมด
<!-- 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" />
การใช้ Android Studio (รุ่นปัจจุบันคือ 2.2.2 ในขณะนี้) เป็นเรื่องง่ายมากที่จะเพิ่มกิจกรรมแบบเต็มหน้าจอ
ดูขั้นตอน:
ทำ!
ตอนนี้คุณมีการทำกิจกรรมเต็มหน้าจอได้อย่างง่ายดาย (ดูคลาส java และโครงร่างกิจกรรมเพื่อทราบวิธีการทำงานของสิ่งต่าง ๆ )!
สำหรับผู้ที่ใช้ AppCompact ... style.xml
<style name="Xlogo" parent="Theme.AppCompat.DayNight.NoActionBar">
<item name="android:windowNoTitle">true</item>
<item name="android:windowFullscreen">true</item>
</style>
จากนั้นใส่ชื่อในรายการของคุณ ...
ก่อนอื่นคุณต้องตั้งค่าธีมของแอพด้วย "NoActionBar" เช่นด้านล่าง
<!-- Application theme. -->
<style name="AppTheme" parent="@style/Theme.AppCompat.Light.NoActionBar" />
จากนั้นเพิ่มบรรทัดเหล่านี้ในกิจกรรมเต็มหน้าจอของคุณ
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);
}
}
มันจะซ่อนแถบเครื่องมือ / แถบเครื่องมือและแถบสถานะในกิจกรรมเต็มหน้าจอของคุณ
AndroidManifest.xml
<activity ...
android:theme="@style/FullScreenTheme"
>
</activity>
สำหรับซ่อน 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>
เพื่อซ่อนแถบนำทางของระบบ
public class MainActivity extends AppCompatActivity {
protected void onCreate(Bundle savedInstanceState) {
getWindow().getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_HIDE_NAVIGATION);
setContentView(R.layout.activity_main)
...
}
}
สำหรับซ่อน 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>
เพื่อซ่อนแถบนำทางของระบบ
ที่คล้ายกันTheme.AppCompat.Light.DarkActionBar
เช่น
ขอบคุณสำหรับคำตอบ @Cristian ฉันได้รับข้อผิดพลาด
android.util.AndroidRuntimeException: requestFeature () ต้องถูกเรียกก่อนเพิ่มเนื้อหา
ฉันแก้ไขโดยใช้นี้
@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);
ก่อนหน้านี้super.onCreate(savedInstanceState);
หรือไม่
แสดงเต็มรูปแบบ Immersive:
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);
}
ย้ายออกจากโหมดเต็มรูปแบบ:
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);
}
ฉันต้องการใช้ธีมของตัวเองแทนการใช้ @android: style / Theme.NoTitleBar.Fullscreen แต่มันก็ไม่ได้ผลเหมือนที่โพสต์ในที่นี้ได้กล่าวถึงดังนั้นฉันจึงได้ปรับแต่งเพื่อให้เข้าใจได้
ใน AndroidManifest.xml:
<activity
android:name=".ui.activity.MyActivity"
android:theme="@style/MyTheme">
</activity>
ใน styles.xml:
<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>
หมายเหตุ: ในกรณีของฉันฉันต้องใช้name="windowActionBar"
แทนname="android:windowActionBar"
ก่อนที่มันจะทำงานได้อย่างถูกต้อง ดังนั้นฉันจึงใช้ทั้งคู่เพื่อให้แน่ใจว่าในกรณีที่ฉันต้องพอร์ตไปเป็น Android เวอร์ชันใหม่ในภายหลัง
นี่คือตัวอย่างรหัส คุณสามารถเปิด / ปิดธงเพื่อซ่อน / แสดงชิ้นส่วนเฉพาะ
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);
}
จากนั้นคุณรีเซ็ตเป็นสถานะเริ่มต้น :
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);
}
คุณสามารถเรียกฟังก์ชั่นด้านบนได้จากonCreate
:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.course_activity);
UiUtils.hideSystemUI(this);
}
Kotlin
การติดตาม google doc มีวิธีที่ง่าย:
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) }
เคล็ดลับ: การใช้ getWindow () setLayout () สามารถทำให้การแสดงผลเต็มหน้าจอของคุณเต็ม! หมายเหตุเอกสารประกอบสำหรับวิธีนี้พูดว่า:
ตั้งค่าพารามิเตอร์เลย์เอาต์ความกว้างและความสูงของหน้าต่าง ... คุณสามารถเปลี่ยนเป็น ... เป็นค่าสัมบูรณ์เพื่อสร้างหน้าต่างที่ไม่ใช่แบบเต็มหน้าจอ
http://developer.android.com/reference/android/view/Window.html#setLayout%28int,%20int%29
สำหรับวัตถุประสงค์ของฉันฉันพบว่าฉันต้องใช้ setLayout พร้อมพารามิเตอร์สัมบูรณ์เพื่อปรับขนาดหน้าต่างเต็มหน้าจออย่างถูกต้อง ส่วนใหญ่แล้วนี่ใช้งานได้ดี มันถูกเรียกโดยเหตุการณ์ onConfigurationChanged () อย่างไรก็ตามมีอาการสะอึก หากผู้ใช้ออกจากแอปเปลี่ยนการวางแนวและป้อนใหม่ก็จะนำไปสู่การปิดโค้ดของฉันซึ่งรวมถึง setLayout () ระหว่างหน้าต่างเวลาเข้าใหม่แถบสถานะของฉัน (ซึ่งถูกซ่อนไว้โดยรายการ) จะถูกทำให้ปรากฏขึ้นอีกครั้ง แต่ในเวลาอื่น setLayout () จะไม่ทำให้สิ่งนี้เกิดขึ้น! วิธีแก้ไขคือการเพิ่มการเรียก setLayout () เพิ่มเติมหลังจากการโทรด้วยค่าฮาร์ดเช่น:
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 );
}
จากนั้นหน้าต่างจะปรับขนาดให้ถูกต้องและแถบสถานะไม่ปรากฏขึ้นอีกครั้งโดยไม่คำนึงถึงเหตุการณ์ที่เกิดขึ้น
@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);
}
}
Inside 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>
สิ่งนี้ใช้ได้สำหรับฉัน หวังว่ามันจะช่วยคุณ
ด้วย kotlin นี่เป็นวิธีที่ฉันทำ:
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
}
}
โหมดดื่มด่ำ
โหมดดื่มด่ำมีไว้สำหรับแอพที่ผู้ใช้จะต้องโต้ตอบกับหน้าจอเป็นอย่างมาก ตัวอย่างเช่นเกมดูภาพในแกลเลอรี่หรืออ่านเนื้อหาที่แยกหน้าเช่นหนังสือหรือสไลด์ในงานนำเสนอ สำหรับสิ่งนี้เพียงเพิ่มบรรทัดนี้:
View.SYSTEM_UI_FLAG_HIDE_NAVIGATION or
View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION
เหนียวแน่นดื่มด่ำ
ในโหมดดื่มด่ำปกติทุกครั้งที่ผู้ใช้เลื่อนจากขอบระบบดูแลการเปิดเผยแถบระบบ - แอพของคุณจะไม่ได้ตระหนักว่าท่าทางที่เกิดขึ้น ดังนั้นหากผู้ใช้อาจต้องการปัดจากขอบของหน้าจอซึ่งเป็นส่วนหนึ่งของประสบการณ์การใช้งานแอปหลักเช่นเมื่อเล่นเกมที่ต้องใช้การปัดจำนวนมากหรือใช้แอพวาดรูป - คุณควรเปิดใช้โหมดดื่มด่ำ "เหนียว" .
View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY
สำหรับข้อมูลเพิ่มเติม: เปิดใช้งานโหมดเต็มหน้าจอ
ในกรณีที่คุณใช้แป้นพิมพ์บางครั้งก็เกิดขึ้นที่ StatusBar แสดงเมื่อแป้นพิมพ์ปรากฏขึ้น ในกรณีนั้นฉันมักจะเพิ่มสิ่งนี้ลงใน xml สไตล์ของฉัน
styles.xml
<style name="FullScreen" parent="AppTheme">
<item name="android:windowFullscreen">true</item>
</style>
และยังบรรทัดนี้เพื่อการแสดงออกของฉัน
<activity
android:name=".ui.login.LoginActivity"
android:label="@string/title_activity_login"
android:theme="@style/FullScreen">
เพียงวางรหัสนี้ในonCreate()
วิธีการ
requestWindowFeature(Window.FEATURE_NO_TITLE);
getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
WindowManager.LayoutParams.FLAG_FULLSCREEN);
มันใช้งานได้สำหรับฉัน
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();
}
หลังจากเวลาผ่านไปโดยที่ไม่ประสบความสำเร็จฉันมาพร้อมกับทางออกของตัวเองซึ่งคล้ายกับนักพัฒนาคนอื่น ดังนั้นหากใครต้องการเธอก็เป็นปัญหาของฉันคือว่าแถบนำทางของระบบไม่ได้ซ่อนหลังจากโทร นอกจากนี้ในกรณีของฉันฉันต้องการแนวนอนดังนั้นในกรณีที่แสดงความคิดเห็นในบรรทัดนั้นและทุกอย่าง ก่อนอื่นสร้างสไตล์
<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>
นี่คือไฟล์รายการของฉัน
<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>
นี่คือกิจกรรมที่สแลงของฉัน
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);
}
}
และนี่คือกิจกรรมเต็มหน้าจอหลักของฉัน วิธีการ onSystemUiVisibilityChange thi จะปิดที่สำคัญแถบนำทางหลัก Android มิฉะนั้นหลังจากการโทรจะอยู่และจะไม่หายไปอีกต่อไป ปัญหาที่น่ารำคาญจริง ๆ แต่ฟังก์ชั่นนี้แก้ปัญหานั้นได้
MainActivity ระดับสาธารณะขยาย 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);
}
}
});
}
}
นี่คือเค้าโครงหน้าจอสแปลชของฉัน:
<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>
ฉันหวังว่านี่จะช่วยคุณได้
https://developer.android.com/training/system-ui/immersive.html
กิจกรรม:
@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);
}
}
AndroidManifests:
<activity android:name=".LoginActivity"
android:configChanges="orientation|keyboardHidden|screenSize"
android:label="@string/title_activity_login"
android:theme="@style/FullscreenTheme"
></activity>
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);
}
...
}
ใช้วิธีการนี้หลังจาก setContentView ใน onCreate () และผ่านหน้าต่างวัตถุโดย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
);
}
รหัสนี้จะใช้งานได้กับหน้าจอบาก ในการตรวจสอบรอยเต็มหน้าจอคุณต้องใช้ Android P แต่ถ้าคุณมีโทรศัพท์ที่แสดงรอยแล้วไปที่การตั้งค่า -> การตั้งค่าการแสดงผล -> อัตราส่วนการแสดงผลแอป ---> เลือกแอปของคุณ ---> จะมีสองตัวเลือกที่ปลอดภัย จอแสดงผลและเต็มหน้าจอโปรดเลือกเต็มหน้าจอและเรียกใช้แอปคุณสามารถดูเต็มหน้าจอในรอยโดยไม่ต้องมี Android พาย
ในการทำให้กิจกรรมเต็มหน้าจอให้ทำดังนี้
// 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);
จะเป็นการซ่อนแถบเครื่องมือและแถบสถานะ
แต่ในบางกรณีคุณอาจต้องการแสดงแถบสถานะที่มีพื้นหลังโปร่งใสในกรณีนี้ให้ทำดังนี้
// 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);
มีทางเลือกอื่นเพื่อซ่อนแถบเครื่องมือแทน
getSupportActionBar().hide()
:
<style name="AppTheme" parent="Theme.AppCompat.NoActionBar">
android:theme="@style/Theme.AppCompat.Light.NoActionBar"
สำหรับคนรัก kotlinทำไมไม่ใช้ฟังก์ชั่นเสริม:
สำหรับกรณีแรก:
fun AppCompatActivity.makeItFullScreenStatusBarVisible(){
supportActionBar?.hide()
window.setFlags(WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS, WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS)
}
และเรียกสิ่งนี้มาก่อนsetContentView
:
makeItFullScreenStatusBarVisible()
สำหรับคนที่สอง:
fun AppCompatActivity.makeItFullScreenStatusBarHidden(){
supportActionBar?.hide()
window.setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN)
}
และเรียกมันก่อนsetContentView
:
makeItFullScreenStatusBarHidden()
ใน Android 10 ไม่มีใครทำงานให้ฉัน
แต่ฉันว่าทำงานได้อย่างสมบูรณ์แบบ (บรรทัดแรกใน oncreate):
View decorView = getWindow().getDecorView();
int uiOptions = View.SYSTEM_UI_FLAG_IMMERSIVE;
decorView.setSystemUiVisibility(uiOptions);
setContentView(....);
if (getSupportActionBar() != null) {
getSupportActionBar().hide();
}
สนุก :)
เพื่อแสดงเนื้อหาผ่านช่องหรือรอยตัด สิ่งนี้สามารถช่วยได้จากเอกสาร:
LAYOUT_IN_DISPLAY_CUTOUT_MODE_SHORT_EDGES - เนื้อหาแสดงผลในพื้นที่คัตเอาท์ทั้งในโหมดแนวตั้งและแนวนอน
สิ่งสำคัญสำหรับฉันคือบรรทัดนี้ในรูปแบบกิจกรรม:
// Important to draw through the cutouts
<item name="android:windowLayoutInDisplayCutoutMode">shortEdges</item>
สำหรับฉันฉันต้องการที่จะแสดงภาพในโหมดดื่มด่ำ เมื่อฉันคลิกฉันต้องการให้ระบบ UI (สถานะ & แถบการนำทาง) ปรากฏขึ้น
นี่คือทางออกของฉัน:
1- ในกิจกรรมบางวิธีในการแสดง / ซ่อน UI ของระบบ (แถบสถานะ / แถบนำทาง)
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- ตรวจสอบให้แน่ใจว่าสิ่งนี้ในมุมมองรูทของโครงร่าง xml ของคุณ
android:fitsSystemWindows="false"
3- สไตล์สำหรับกิจกรรมเต็มหน้าจอจะให้สถานะ / แถบนำทางเป็นพื้นหลังกึ่งโปร่งใสเมื่อปรากฏขึ้น:
<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>