AndroidUI:沉浸式状态栏和自定义toolbar

1.去除系统自带actionbar

修改res/values目录下style.xml文件中AppTheme默认继承的Theme.AppCompat.Light.DarkActionBar为Theme.AppCompat.Light.NoActionBar

<style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">
        <!-- Customize your theme here. -->
        <item name="colorPrimary">@android:color/holo_blue_light</item>
        <item name="colorPrimaryDark">@android:color/holo_blue_light</item>
        <item name="colorAccent">@android:color/holo_blue_light</item>
    </style>

androidmanifest清单文件中application的主题为AppTheme

android:theme="@style/AppTheme">

到这里app就没有系统默认的actionbar了。

2.沉浸式状态栏

google在Android4.4以后提供了设置沉浸式状态栏的方法,实际的效果其实就是透明的状态栏,因为是4.4+才有,所以需要在activity中判断sdk版本然后再设置状态栏颜色为透明,也可以创建一个BaseActivity继承自AppCompatActivity,然后让需要隐藏系统栏的activity继承BaseActivity。

public abstract class BaseActivity extends AppCompatActivity {
@Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        if(Build.VERSION.SDK_INT>=21){ //如果在安卓5.0以上运行则隐藏系统栏
            View decorView = getWindow().getDecorView();
            int option=View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN|View.SYSTEM_UI_FLAG_LAYOUT_STABLE;
            decorView.setSystemUiVisibility(option);
            getWindow().setStatusBarColor(Color.TRANSPARENT);
        }
    }
}

这样app的状态栏就是透明色了,但是注意要在跟布局或者自定义的toolbar中加入
android:fitsSystemWindows="true"给系统窗口留出空间,相当于使顶部留出系统状态栏高度的padding,否则布局上面就会和状态栏里的字挤在一起。

3.自定义toolbar

在布局中加入toolbar组件,注意要加上android:fitsSystemWindows=“true”

<android.support.v7.widget.Toolbar
            android:id="@+id/toolbar"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:fitsSystemWindows="true"
            android:background="?attr/colorPrimary"
            app:popupTheme="@style/AppTheme.PopupOverlay">
            <RelativeLayout
            <!--写toolbar里的内容-->
                android:gravity="center_vertical"
                android:layout_width="wrap_content"
                android:layout_gravity="top|start"
                android:layout_height="wrap_content"
                android:minHeight="?attr/actionBarSize">
               
            </RelativeLayout>
</android.support.v7.widget.Toolbar>        

注意toolbar中子布局要加入android:minHeight="?attr/actionBarSize"表示该布局的高度最小要为系统actionbar的高度。
好啦,然后可以在代码中对toolbar操作啦,比如设置导航图标,设置监听事件等,但是很多方法只有ActionBar有,而Toolbar没有,所以有需要的话可以先将toolbar用setSupportActionBar(toolbar)传到actionbar中,然后用getSupportActionBar()来获得一个actionbar对象,调用actionbar的方法。

public class MainActivity extends BaseActivity{
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        
        android.support.v7.widget.Toolbar toolbar=(android.support.v7.widget.Toolbar) findViewById(R.id.toolbar);
// 设置Toolbar
        setSupportActionBar(toolbar);
// 设置监听.必须在setSupportActionBar()之后调用
        toolbar.setNavigationOnClickListener(clickListener);
//        getSupportActionBar().setDisplayHomeAsUpEnabled(true);//是否显示NavigationIcon返回图标,这个方法是ActionBar的方法,Toolbar没有这个方法.
//        getSupportActionBar().setHomeAsUpIndicator(circleDrawable);
//        toolbar.setNavigationIcon(drawable); //设置icon

猜你喜欢

转载自blog.csdn.net/tensixchuan/article/details/84889241