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