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
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章