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