【android】ToolBar與彈出側邊欄佈局和SnackBar&&CoordinatorLayout

一:替換ToolBar

一.ToolBar基礎替換

  1. 先將主題中的ActionBar改爲Light.NoActionBar
  2. 修改main.xml文件
    1)將ToolBar的高度設置爲原ActionBar
    2)指定背景色
    3)由於設置了淡色系主題,ToolBar上的元素會使用深色主題以區分主體,原本白色會變黑色,比較壓抑,所以指定單獨深色ToolBar,上面的字會繼承原Light白色
    4)設置彈出的菜單項爲Light
    <androidx.appcompat.widget.Toolbar
        android:id="@+id/toolbar"
        android:layout_width="match_parent"
        android:layout_height="?attr/actionBarSize"
        android:background="?attr/colorPrimary"
        android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar"
        app:popupTheme="@style/ThemeOverlay.AppCompat.Light"
    />

在這裏插入圖片描述

  1. 這裏我們發現左上角就是項目名稱,來到清單文件修改label即可

在這裏插入圖片描述

二.ToolBar結合引入菜單

  1. res文件夾下創建menu文件夾,創建toolbar.xml的menu resourse file
  2. menu中加入app的資源地址,方便兼容,其中item組
  3. showasAction
    1)always: 永遠顯示在ToolBar中
    2)ifRoom:空間夠在toolbar不夠在菜單中
    3)never: 永遠顯示在菜單中
    ps:toolbar中item只顯圖標,菜單中action只顯文字
<menu xmlns:android="http://schemas.android.com/apk/res/android"
      xmlns:app="http://schemas.android.com/apk/res-auto">
    <item
        android:id="@+id/backup"
        android:icon="@mipmap/arrow_up"
        android:title="BackUP"
        app:showAsAction="always"/>
    <item
            android:id="@+id/delete"
            android:icon="@mipmap/delete"
            android:title="Delete"
            app:showAsAction="ifRoom"/>
    <item
            android:id="@+id/setting"
            android:icon="@mipmap/setting"
            android:title="Settings"
            app:showAsAction="never"/>
</menu>
  1. 來着MainActivity中複寫創建菜單的方法和點擊方法即可
    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        getMenuInflater().inflate(R.menu.toolbar,menu);
        return true;
    }

    @Override
    public boolean onOptionsItemSelected(@NonNull MenuItem item) {
        switch (item.getItemId()) {
            case R.id.backup:
                Toast.makeText(this,"BackUP",Toast.LENGTH_SHORT).show();
                break;
            case R.id.delete:
                Toast.makeText(this,"Delete",Toast.LENGTH_SHORT).show();
                break;
            case R.id.setting:
                Toast.makeText(this,"Setting",Toast.LENGTH_SHORT).show();
                break;

        }
        return true;
    }

在這裏插入圖片描述
在這裏插入圖片描述

二.彈出側邊欄

1. DrawerLayout

  1. 藉助Google提供的DrawerLayout,實心滑動菜單這個佈局可以放入兩個直接子控件,第一個是主屏幕中的內容,第二個是滑動菜單中顯示的內容
  2. 修改main.xml第一個Fragment子控件 爲主界面,第二個text
<androidx.drawerlayout.widget.DrawerLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/drawer_layout"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
   >
    <FrameLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent">


        <androidx.appcompat.widget.Toolbar
            android:id="@+id/toolbar"
            android:layout_width="match_parent"
            android:layout_height="?attr/actionBarSize"
            android:background="?attr/colorPrimary"
            android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar"
            app:popupTheme="@style/ThemeOverlay.AppCompat.Light"/>
    </FrameLayout>
    <TextView
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:layout_gravity="start"
            android:text="This Is Side"
            android:textSize="30sp"
            android:background="#FFF"/>
</androidx.drawerlayout.widget.DrawerLayout>

第二個子佈局Layout_gravity=“start” 必須要指定,start表示是按照系統的左右設置彈出菜單的,貌似也可以設置left等等,不設置只顯示第二個子項

在這裏插入圖片描述

二.加入導航按鈕

  1. oncreate方法中取得drawlay對象
  2. 拿到對應Actionbar實例(由ToolBar實現的)【getSupportAsUpEnabled(true)
  3. 讓導航按鈕顯示出來【 actionBar.setDisplayHomeAsUpEnabled(true)】設置圖標【setHomeAsUpIndicator()
  4. Toolba菜單項設置點擊,id永遠是是home,選中控制切換即可【 mDrawerLayout.openDrawer(GravityCompat.START)
  5. 點開只有一個text有點醜。。。不過沒事 ,接下來用到的NavigationViw可以解決這個問題

在這裏插入圖片描述

三.NavigationView

一. 導包

  1. Design庫
    implementation ‘com.android.support:design:24.2.1’
  2. 圓形化圖片開源項目
    implementation ‘de.hdodenhof:circleimageview:2.1.0’

二. 在寫之前還需要準備兩個東西

  1. menu用來在NaviagtionView中顯示具體的菜單項
    1)建立nav_menu後指定單選菜單項<group android:checkableBehavior="single">
    2)接着是item項

  2. headLayout用來在其中顯示頭部佈局的 ,新建一個RelativeLayout,限定高度,設置圓形圖片居中

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
              android:orientation="vertical"
              android:layout_width="match_parent"
              android:layout_height="180dp"
              android:padding="10dp"
              android:background="?attr/colorPrimary">
    <de.hdodenhof.circleimageview.CircleImageView
            android:id="@+id/icon_image"
            android:layout_width="70dp"
            android:layout_height="70dp"
            android:src="@mipmap/rolling"
            android:layout_centerInParent="true" />
    <TextView
            android:id="@+id/mail"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignParentBottom="true"
            android:text="[email protected]"
            android:textColor="#FFF"
            android:textSize="14sp" />
    <TextView
            android:id="@+id/username"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_above="@id/mail"
            android:text="風凌"
            android:textColor="#FFF"
            android:textSize="14sp" />
</RelativeLayout>
  1. 通過app方法添加兩個子佈局,大標題二中的text改爲NavigationView,app兼容引入即可
  <com.google.android.material.navigation.NavigationView
            android:id="@+id/nav_view"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:layout_gravity="start"
            app:menu="@menu/nav_menu"
            app:headerLayout="@layout/nav_header"/>

在這裏插入圖片描述

四.懸浮可交互按鈕

一. FloatingActionButton

  1. Design Support庫中提供的一個控件,可以輕鬆的實現懸浮按鈕效果。
  2. 在DrawableLayout第一主佈局中ToolBar後加入該按鈕,自帶陰影效果,也可以自帶指定app:elevation=“8dp”
  3. MainActivity可以設置點擊監聽
     <com.google.android.material.floatingactionbutton.FloatingActionButton
                android:id="@+id/fab"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_gravity="bottom|end"
                android:layout_margin="16dp"
                android:src="@mipmap/play"/>
  1. 設置點擊事件,和普通按鈕一樣,設置個click監聽就好了

二.Snackbar

  1. 在監聽事件中可以彈出小的個選框提示Snackbar
  2. 下面是示例代碼,有點套娃,點擊懸浮按鈕,彈出Snack信息:開始播放,點擊信息中的undo,顯示取消播放
  3. 但是這個時候我們發現原本的浮動按鈕被擋住了,emmm有點尷尬,這裏就可以使用CoordinatorLayout【類加強版FragmentLayout】
FloatingActionButton fab=(FloatingActionButton)findViewById(R.id.fab);
        fab.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                Snackbar.make(view, "開始播放", Snackbar.LENGTH_SHORT)
                        .setAction("Undo", new View.OnClickListener() {
                            @Override
                            public void onClick(View v) {
                                Toast.makeText(MainActivity.this, "取消播放",
                                        Toast.LENGTH_SHORT).show();
                            }
                        })
                        .show();
            }
        });

在這裏插入圖片描述

三.CoordinatorLayout

  1. CoordinatorLayout可監聽所有子控件【通過子控件傳入的View】的各種事件,然後幫助我們做最合理的響應,我們用這個替換Fragment,就行了
  2. 由於Drawable的第二個子佈局和CoordinatorLayout沒多大關係,所以佈局任然不會移動,相到移動方案再補充。
    在這裏插入圖片描述
    在這裏插入圖片描述
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章