Android Developers安卓Android

Android 沉浸式模式与常见状态栏和导航栏效果

2016-11-03  本文已影响6307人  dingyx

Android沉浸式模式

官方称沉浸式状态栏为沉浸式模式。

进入程序时,自动隐藏了状态栏和导航栏。当用户从顶部向下滑动就能呼出半透明的状态栏和导航栏。

具体代码如下:

public class MainActivity extends AppCompatActivity {
    
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    }
    
    public void onWindowFocusChanged(boolean hasFocus) {
        super.onWindowFocusChanged(hasFocus);

        View mDecorView = getWindow().getDecorView();

        mDecorView.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_STICKY
        );
    }

}

注意:onWindowFocusChanged方法里面的代码不能直接写在onCreate方法中,如果这么写当应用处于后台Stoped状态,下次启动应用便执行不到处理沉浸式的代码。Activity生命周期中,真正的visible时间点是onWindowFocusChanged()函数被执行时,所以我们将这段代码写在这个方法中。

可以参考官方文档:https://developer.android.google.cn
中文翻译版:http://hukai.me/android-training-course-in-chinese

其他常见状态栏和导航栏效果

ActionBar actionBar = getSupportActionBar();
actionBar.hide();

上面的代码需要在放在setContentView方法之前,否则会出现ActionBar显示后再隐藏。如果整个应用没有用到ActionBar我们可以直接在AndroidManifest.xml中将application的theme设置为NoActionBar,如果只是某个activity不用也可以将这个activity的theme设置为NoActionBar。

<activity android:name=".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>

效果图如下:

//透明状态栏和导航栏,隐藏ActionBar
getSupportActionBar().hide();

getWindow().getDecorView().setSystemUiVisibility(
    View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN|View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION);

getWindow().setNavigationBarColor(Color.TRANSPARENT);
getWindow().setStatusBarColor(Color.TRANSPARENT);

效果图如下:

上一篇 下一篇

猜你喜欢

热点阅读