自定義ToolBar+抽屜布局

自定義ToolBar

  • 之前學(xué)習(xí)的ToolBar都是V7包下的赚导,自從AndroidX推出后采桃,嘗試使用這個版本下的Toolbar
第一步:屏蔽掉系統(tǒng)的ActionBar
<resources>
    <!-- Base application theme. -->
    <!--屏蔽掉ActionBar-->
    <style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">
        <!-- Customize your theme here. -->
        <!--這個是ActionBar的顏色-->
        <item name="colorPrimary">@color/colorPrimary</item>
        <!--這個是頂部狀態(tài)欄的顏色-->
        <item name="colorPrimaryDark">@color/colorPrimaryDark</item>
        <!--這個是控件選中的顏色-->
        <item name="colorAccent">@color/colorAccent</item>
    </style>
</resources>
第二步:自定義ToolBar布局
<?xml version="1.0" encoding="utf-8"?>
<androidx.appcompat.widget.Toolbar
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/toolbar"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:background="@color/toolbar"
    android:minHeight="?attr/actionBarSize">
</androidx.appcompat.widget.Toolbar>
  • 關(guān)于 android:minHeight="?attr/actionBarSize"這個屬性秒际,稍加留意内地。定義好之后,將其添加到你需要的布局文件中
  <include layout="@layout/my_toolbar"/>
第三步:定義menu菜單
  • 首先,要在res文件夾下新建menu文件夾,之后創(chuàng)建menu布局文件
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto">
    <item
        android:id="@+id/a_search"
        android:orderInCategory="80"
        android:title="搜索"
        app:actionViewClass="androidx.appcompat.widget.SearchView"
        app:showAsAction="ifRoom"
        />
    <item
        android:id="@+id/a_share"
        android:orderInCategory="90"
        android:title="分享"
        app:showAsAction="ifRoom"/>
    <item
        android:id="@+id/a_setting"
        android:orderInCategory="100"
        android:title="設(shè)置"
        app:showAsAction="never"/>
</menu>
  • android:orderInCategory:控制選項的順序,數(shù)值越小羡棵,優(yōu)先級越高
  • app:showAsAction:定義顯示的方式,always(可以一直看到)嗅钻、never(隱藏在"..."之中)皂冰,ifRoom(有位置就顯示,否則就會隱藏在"..."之中)
第四步:加載menu+toolbar
  • 重寫onCreateOptionsMenu方法养篓,來加載menu布局
  @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        getMenuInflater().inflate(R.menu.menu_layout,menu);
        return true;
    }
  • 初始化控件
// TODO: 注意導(dǎo)包別導(dǎo)錯了 
import androidx.appcompat.widget.Toolbar;
public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        initView();
    }

    private void initView(){
        Toolbar toolbar = findViewById(R.id.toolbar);
        toolbar.setLogo(R.drawable.ic_public_black_24dp);
        toolbar.setTitle("自定義Toolbar");
        setSupportActionBar(toolbar);

        toolbar.setOnMenuItemClickListener(new Toolbar.OnMenuItemClickListener() {
            @Override
            public boolean onMenuItemClick(MenuItem item) {
                switch (item.getItemId()){
                    case R.id.a_share:
                        Toast.makeText(MainActivity.this,"a_share",Toast.LENGTH_LONG).show();
                        break;
                    case R.id.a_setting:
                        Toast.makeText(MainActivity.this,"a_setting",Toast.LENGTH_LONG).show();
                        break;
                    default:
                            break;
                }
                return true;
            }
        });
    }
}

更復(fù)雜的用法可以自己定義秃流;

抽屜布局

  • 關(guān)于抽屜布局,在布局文件中柳弄,有以下要注意的點:
    1舶胀、DrawerLayout包含主界面和側(cè)滑界面;
    2碧注、主界面布局一定要位于所有側(cè)滑界面布局之前嚣伐,寬高應(yīng)設(shè)置為match_parent且不能包含layout_gravity標(biāo)簽
    3、側(cè)滑界面必須設(shè)置layout_gravity屬性萍丐,左側(cè)滑出(start/left),右側(cè)滑出(end/right);
    4轩端、側(cè)滑界面高度建議設(shè)定為match_parent,寬度可以設(shè)定為一個定值;
    5、每個界面邊緣最多允許設(shè)置一個側(cè)滑界面碉纺,否則會報錯;

相關(guān)示例如下:

  <androidx.drawerlayout.widget.DrawerLayout
        android:id="@+id/drawer_layout"
        android:layout_width="match_parent"
        android:layout_height="match_parent">
        <!--主界面-->
        <LinearLayout
            android:id="@+id/ll_content"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:orientation="vertical"
            android:background="@drawable/ic_launcher_background"
            >
            <TextView
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                android:text="內(nèi)容界面"
                android:gravity="center"
                android:textColor="@android:color/white"
                />
        </LinearLayout>
        <!--側(cè)滑界面-->
        <LinearLayout
            android:id="@+id/ll_tabs"
            android:layout_width="300dp"
            android:layout_height="match_parent"
            android:orientation="vertical"
            android:background="@android:color/darker_gray"
            android:layout_gravity = "start"
            >
            <TextView
                android:id="@+id/tv_close"
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                android:clickable="true"
                android:gravity="center"
                android:text="側(cè)滑界面船万,點擊收回側(cè)滑"
                android:textColor="@android:color/white" />
        </LinearLayout>
    </androidx.drawerlayout.widget.DrawerLayout>
  • 相關(guān)代碼調(diào)用,ActionBarDrawerToggle + DrawerLayout 對側(cè)滑動作進行監(jiān)聽是常用組合刻撒,
        drawerLayout = findViewById(R.id.drawer_layout);
        //ActionBarDrawerToggle + DrawerLayout 對側(cè)滑動作進行監(jiān)聽
        ActionBarDrawerToggle mDrawerToggle = new ActionBarDrawerToggle(this,drawerLayout,toolbar,
                R.string.drawer_open,
                R.string.drawer_close){
            @Override
            public void onDrawerOpened(View drawerView) {
                super.onDrawerOpened(drawerView);
            }

            @Override
            public void onDrawerClosed(View drawerView) {
                super.onDrawerClosed(drawerView);
            }

            @Override
            public void onDrawerSlide(View drawerView, float slideOffset) {
                super.onDrawerSlide(drawerView, slideOffset);
            }
        };
        //側(cè)滑狀態(tài)同步
        mDrawerToggle.syncState();
        //設(shè)置側(cè)滑監(jiān)聽
        drawerLayout.setDrawerListener(mDrawerToggle);
        TextView close = findViewById(R.id.tv_close);
        close.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                //側(cè)滑界面在左邊,右邊為RIGHT
                drawerLayout.closeDrawer(Gravity.LEFT);
            }
        });

抽屜布局是比較常用的布局骨田,在此處做個記錄,方便自己以后查詢和使用声怔。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末态贤,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子醋火,更是在濱河造成了極大的恐慌悠汽,老刑警劉巖,帶你破解...
    沈念sama閱讀 212,383評論 6 493
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件芥驳,死亡現(xiàn)場離奇詭異柿冲,居然都是意外死亡,警方通過查閱死者的電腦和手機兆旬,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,522評論 3 385
  • 文/潘曉璐 我一進店門假抄,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事宿饱⊙椋” “怎么了?”我有些...
    開封第一講書人閱讀 157,852評論 0 348
  • 文/不壞的土叔 我叫張陵谬以,是天一觀的道長强饮。 經(jīng)常有香客問我,道長为黎,這世上最難降的妖魔是什么邮丰? 我笑而不...
    開封第一講書人閱讀 56,621評論 1 284
  • 正文 為了忘掉前任,我火速辦了婚禮碍舍,結(jié)果婚禮上柠座,老公的妹妹穿的比我還像新娘。我一直安慰自己片橡,他們只是感情好妈经,可當(dāng)我...
    茶點故事閱讀 65,741評論 6 386
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著捧书,像睡著了一般吹泡。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上经瓷,一...
    開封第一講書人閱讀 49,929評論 1 290
  • 那天爆哑,我揣著相機與錄音,去河邊找鬼舆吮。 笑死揭朝,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的色冀。 我是一名探鬼主播潭袱,決...
    沈念sama閱讀 39,076評論 3 410
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼锋恬!你這毒婦竟也來了屯换?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,803評論 0 268
  • 序言:老撾萬榮一對情侶失蹤与学,失蹤者是張志新(化名)和其女友劉穎彤悔,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體索守,經(jīng)...
    沈念sama閱讀 44,265評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡晕窑,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,582評論 2 327
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了卵佛。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片杨赤。...
    茶點故事閱讀 38,716評論 1 341
  • 序言:一個原本活蹦亂跳的男人離奇死亡蓝丙,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出望拖,到底是詐尸還是另有隱情渺尘,我是刑警寧澤,帶...
    沈念sama閱讀 34,395評論 4 333
  • 正文 年R本政府宣布说敏,位于F島的核電站鸥跟,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏盔沫。R本人自食惡果不足惜医咨,卻給世界環(huán)境...
    茶點故事閱讀 40,039評論 3 316
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望架诞。 院中可真熱鬧拟淮,春花似錦、人聲如沸谴忧。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,798評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽沾谓。三九已至委造,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間均驶,已是汗流浹背昏兆。 一陣腳步聲響...
    開封第一講書人閱讀 32,027評論 1 266
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留妇穴,地道東北人爬虱。 一個月前我還...
    沈念sama閱讀 46,488評論 2 361
  • 正文 我出身青樓,卻偏偏與公主長得像腾它,于是被迫代替她去往敵國和親跑筝。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 43,612評論 2 350

推薦閱讀更多精彩內(nèi)容