Android设置Activity全屏的方式

本文介绍了一种有效的Android应用全屏显示方法,在AndroidManifest.xml中设置Activity主题为Theme.AppCompat.Light.NoActionBar实现全屏效果,并解释了为何部分主题会导致错误。

想把Activity设置为全屏,在网上找到的都是比较老的方案,经过试验,比较好的方案是在AndroidMenifest.xml文件中设置Activity的主题为**@style/Theme.AppCompat.Light.NoActionBar**
代码如下

<activity android:name=".ui.MainActivity"
            android:theme="@style/Theme.AppCompat.Light.NoActionBar">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
 </activity>

如果设置为
**android:theme=" @android :style/Theme.NoTitleBar.Fullscreen"> **时,则会在启动是报错

Caused by: java.lang.IllegalStateException: You need to use a Theme.AppCompat theme (or descendant) with this activity.
        at androidx.appcompat.app.AppCompatDelegateImpl.createSubDecor(AppCompatDelegateImpl.java:843)
        at androidx.appcompat.app.AppCompatDelegateImpl.ensureSubDecor(AppCompatDelegateImpl.java:806)
        at androidx.appcompat.app.AppCompatDelegateImpl.setContentView(AppCompatDelegateImpl.java:693)
        at androidx.appcompat.app.AppCompatActivity.setContentView(AppCompatActivity.java:170)
        at com.v2ng.jjnavi.ui.MainActivity.onCreate(MainActivity.java:111)
        at android.app.Activity.performCreate(Activity.java:8121)
        at android.app.Activity.performCreate(Activity.java:8109)
        at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1320)

因为Activity继承都是AppCompatActivity,如果你的不是继承的这个话,则可以采用该方案.

另外在网上还找到另外一个方案,也同步放在这里,不过感觉不够优美,即在onCreate函数中增加两个标志位.

super.onCreate(savedInstanceState);
this.requestWindowFeature(Window.FEATURE_NO_TITLE);
this.getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
                WindowManager.LayoutParams.FLAG_FULLSCREEN);
setContentView(R.layout.loading);

我在实际使用过程中,经常出现title去不掉的情况.具体原因未知.

### Android 设置页面全屏展示的实现方式Android 中实现页面的全屏展示,需要根据不同的 API 级别设置系统 UI 标志,并结合 Activity 生命周期进行管理。以下是详细的实现方法: #### 1. 使用 `setSystemUiVisibility` 方法隐藏状态栏和导航栏 通过设置系统 UI 标志可以隐藏状态栏和导航栏,从而实现全屏效果。以下是一个代码示例: ```java import android.view.View; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_fullscreen); // 隐藏状态栏和导航栏 View decorView = getWindow().getDecorView(); int uiOptions = View.SYSTEM_UI_FLAG_FULLSCREEN | View.SYSTEM_UI_FLAG_HIDE_NAVIGATION | View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY | View.SYSTEM_UI_FLAG_LAYOUT_STABLE | View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN | View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION; decorView.setSystemUiVisibility(uiOptions); } ``` 上述代码中,`SYSTEM_UI_FLAG_FULLSCREEN` 和 `SYSTEM_UI_FLAG_HIDE_NAVIGATION` 分别用于隐藏状态栏和导航栏[^1]。而 `SYSTEM_UI_FLAG_IMMERSIVE_STICKY` 提供沉浸式体验,当用户与屏幕交互时会短暂显示导航栏,随后自动隐藏。 #### 2. 在主题中配置全屏模式 为了确保全屏效果一致,可以在 `styles.xml` 文件中定义一个全屏主题: ```xml <style name="FullScreenTheme" parent="Theme.AppCompat.Light.NoActionBar"> <item name="android:windowNoTitle">true</item> <item name="android:windowFullscreen">true</item> <item name="android:windowContentOverlay">@null</item> </style> ``` 然后在 `AndroidManifest.xml` 文件中将该主题应用到目标 Activity: ```xml <activity android:name=".FullScreenActivity" android:theme="@style/FullScreenTheme" /> ``` 此方法适用于需要静态全屏效果的场景,且避免了动态设置带来的复杂性[^3]。 #### 3. 兼容不同 API 级别的实现 从 Android 4.4(API 级别 19)开始支持沉浸式全屏模式。对于较低版本的设备,可以通过兼容库或条件判断来适配: ```java if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.KITKAT) { 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 { // 对于较低版本,仅隐藏状态栏 getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN); } ``` 上述代码确保了应用能够在不同版本的 Android 系统上实现全屏效果[^2]。 #### 4. 处理 Activity 生命周期中的 UI 恢复 在某些情况下,例如接收到电话或切换到其他应用后返回,全屏效果可能会被重置。因此,需要在 `onResume` 方法中重新设置系统 UI 标志: ```java @Override protected void onResume() { super.onResume(); View decorView = getWindow().getDecorView(); int uiOptions = View.SYSTEM_UI_FLAG_FULLSCREEN | View.SYSTEM_UI_FLAG_HIDE_NAVIGATION | View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY; decorView.setSystemUiVisibility(uiOptions); } ``` 此操作保证了用户返回应用时仍能保持全屏体验。 --- ###
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值