Android 自訂ToolBar詳細使用

來源:互聯網
上載者:User

Android 自訂ToolBar詳細使用

自訂xml設定ToolBar,通過menu檔案擴充選項,通過繼承baseactivity使用

1.ToolBar布局

<?xml version="1.0" encoding="utf-8"?>
<Android.support.v7.widget.Toolbar xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:id="@+id/toolbar"
    android:layout_width="match_parent"
    android:layout_height="?attr/actionBarSize"
    app:popupTheme="@style/ThemeOverlay.AppCompat.Light"
    android:focusable="true"
    android:focusableInTouchMode="true"
    android:background="@color/color_bg_toolbar">
    <ImageView
        android:id="@+id/title_back"
        android:layout_width="wrap_content"
        android:layout_height="match_parent"
        android:visibility="gone"
        android:src="@mipmap/ic_back"/>
    <TextView
        android:id="@+id/title_name"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:singleLine="true"
        android:layout_gravity="center_horizontal"
        android:textSize="20sp"
        android:textColor="@color/color_bg_write"
        android:text="@string/app_name"/>
    <TextView
        android:id="@+id/title_rightTv"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:singleLine="true"
        android:layout_marginRight="10dp"
        android:layout_gravity="right"
        android:textColor="@color/color_bg_write"
        android:text="@string/app_name"
        android:visibility="gone"/>
</android.support.v7.widget.Toolbar>

2.menu檔案(title右側表徵圖,測試發現最多隻能顯示三個,如果超過三個第三個會變成更多的選項),另一種方式就是像上邊那樣在xml布局裡寫在Toolbar標籤裡

<?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/title_scan"    //id
        android:title="@string/scan"     //title長按顯示的文字
        android:visible="false"        //預設全部不顯示
        android:icon="@mipmap/ic_scan"    //表徵圖
        app:showAsAction="ifRoom"/>
    <!--添加-->
    <item android:id="@+id/title_add"
        android:title="@string/add"
        android:icon="@mipmap/ic_add"
        app:showAsAction="ifRoom"/>
    <!--設定-->
    <item android:id="@+id/title_setting"
        android:title="@string/setting"
        android:visible="false"
        android:icon="@mipmap/ic_setting"
        app:showAsAction="ifRoom"/>
    <!--搜尋-->
    <item android:id="@+id/title_search"
        android:title="@string/search"
        android:visible="false"
        android:icon="@mipmap/ic_search"
        app:showAsAction="ifRoom"/>
    <!--日期-->
    <item android:id="@+id/title_date"
        android:title="@string/date"
        android:visible="false"
        android:icon="@mipmap/ic_calendar"
        app:showAsAction="ifRoom"/>
    <!--重新整理-->
    <item android:id="@+id/title_refresh"
        android:title="@string/refresh"
        android:visible="false"
        android:icon="@mipmap/botton_refresh"
        app:showAsAction="ifRoom"/>
    <!--<item android:id="@+id/title_more1"-->
        <!--android:title="@string/right2"-->
        <!--app:showAsAction="never"/>-->
    <!--<item android:id="@+id/title_more2"-->
        <!--android:title="@string/right2"-->
        <!--app:showAsAction="never"/>-->
</menu>

3.BaseActivity

/**
 * Created by Administrator on 2016/9/5 0005.
 */

public class BaseActivity extends AppCompatActivity implements View.OnClickListener, Toolbar.OnMenuItemClickListener {
    /*Toolbar*/
    private Toolbar toolBar;
    /**/
    private CoordinatorLayout coordinatorLayout;
    /*是否第一次載入表徵圖(主要針對首頁一對多fragment)*/
    private boolean title_menu_first = true;
    /*是否第一次載入返回*/
    private boolean title_back_first = true;
    /*是否是返回(有可能是代表別的功能)*/
    private boolean is_title_back = true;
    /*返回*/
    private ImageView titleBack;
    /*標題名稱*/
    private TextView titleName;
    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        //豎屏
        setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
        setRootView();
//        coordinatorLayout = getView(R.id.coordinatorLayout);
        initToolbar();
        initWidght();
    }
    protected void setRootView(){}
    protected void initWidght(){};
    //
    protected <T extends View>T getView(int resourcesId){
        return (T) findViewById(resourcesId);
    }/*初始化toolbar*/
    private void initToolbar(){
        toolBar = getView(R.id.toolbar);
        toolBar.setTitle("");
        toolBar.setTitleTextColor(Color.WHITE);
        titleName = getView(R.id.title_name);
//        setSupportActionBar(toolBar);
    }
    /**
    * 設定返回
    * @param back :是否返回:是-->返回,不是則設定其他表徵圖
    * @param resourcesId :表徵圖id,返回時隨意設定,不使用
    * */
    protected void setTitleBack(final boolean back,int resourcesId){
        is_title_back = back;
        if (title_back_first || titleBack == null){
            titleBack= getView(R.id.title_back);
            titleBack.setOnClickListener(this);
            title_back_first = false;
        }
        titleBack.setVisibility(View.VISIBLE);
        if (!back){
            titleBack.setImageResource(resourcesId);
        }
    }
    /**
    * 設定title
    * @param title :title
    * */
    protected void setTitleName(String title){
        titleName.setText(title);
    }
    /**
    * title右側:表徵圖類
    * */
    protected void setRightRes(){
        //擴充menu
        toolBar.inflateMenu(R.menu.base_toolbar_menu);
        //添加監聽
        toolBar.setOnMenuItemClickListener(this);
    }
    /**
    * 顯示title表徵圖
    * @param itemId :itemId :表徵圖對應的選項id(1個到3個),最多顯示3兩個
    * */
    protected void showTitleRes(int... itemId){
        if (title_menu_first){
            setRightRes();
            title_menu_first = false;
        }
        for (int item:itemId){
            //顯示
            toolBar.getMenu().findItem(item).setVisible(true);//通過id尋找,也可以用setIcon()設定表徵圖
//            toolBar.getMenu().getItem(0).setVisible(true);//通過位置尋找
        }
    }
    /**
    * 隱藏title表徵圖
    * @param itemId :表徵圖對應的選項id
    * */
    protected void goneTitleRes(int... itemId){
        if (titleBack != null)
            titleBack.setVisibility(View.GONE);
        for (int item:itemId){
            //隱藏
            toolBar.getMenu().findItem(item).setVisible(false);
        }
    }
    /**
    * title右側文字
    * @param str :文字內容
    * */
    protected void setTitleRightText(String str){
        TextView textView = getView(R.id.title_rightTv);
        textView.setVisibility(View.VISIBLE);
        textView.setText(str);
        textView.setOnClickListener(this);
    }
    @Override
    public void onClick(View v) {
        if (v.getId() == R.id.title_back && is_title_back){
            onBackPressed();
        }
    }
    //toolbar菜單監聽
    @Override
    public boolean onMenuItemClick(MenuItem item) {
        return false;
    }
}

3.Activity使用

public class MainActivity extends BaseActivity{
    @Override
    protected void setRootView() {
        super.setRootView();
        setContentView(R.layout.activity_main);
    }
    @Override
    protected void initWidght() {
        super.initWidght();
      setTitleName(getResources().getString(R.string.chat));//title
//                  setTitleBack(false,R.mipmap.ic_search);//有表徵圖,但不是返回
                    //setTitleBack(true,0);//返回
//                  setTitleRightText("儲存");//右側文字
                    showTitleRes(R.id.title_add,R.id.title.setting);//擴充menu(表徵圖)
                    //goneTitleRes(R.id.title_add);隱藏表徵圖,一般用不到
    }
    @Override
    public void onClick(View v) {
        if (v.getId() == R.id.title_back){
            workFragment.titleSearch();
        }
    }
    @Override
    public boolean onMenuItemClick(MenuItem item) {
        switch (item.getItemId()){
            case R.id.title_add://添加
                break;
            case R.id.title_apps://應用break;
            case R.id.title_setting://設定
                break;
        }
        return super.onMenuItemClick(item);
    }
}

Toolbar其他設定

1.去掉左邊空白,在style檔案裡設定

<style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">
        <!-- Customize your theme here. -->
        <item name="colorPrimary">@color/colorAppTheme</item>
        <item name="colorPrimaryDark">@color/colorAppTheme</item>
        <item name="colorAccent">@color/colorAccent</item>
        <item name="toolbarStyle" tools:ignore="NewApi">@style/MyToolBar</item>
    </style>
    <style name="MyToolBar" parent="Widget.AppCompat.Toolbar">
        <!--左邊邊距-->
        <item name="contentInsetStart">0dp</item>
    </style>

https://www.bkjia.com/topicnews.aspx?tid=11

本文永久更新連結地址:https://www.bkjia.com/Linux/2018-03/151421.htm

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.