Android——Toolbar使用

低于5.0版本的需要添加v7包依赖

高版本的使用androidx包下面的ToolBar

自定义主题——无ActionBar

<!--自定义弹出式菜单的样式--> 
<style name="AppTheme.NoActionBar">     
    <item name="windowNoTitle">true</item>     
    <item name="windowActionBar">false</item> 
</style> 
<!--自定义菜单底纹文字颜色--> 
<style name="AppTheme.AppBarOverlay" parent="ThemeOverlay.AppCompat.Dark.ActionBar"/> 
<!--溢出菜单(右侧...菜单)是否覆盖锚点--> 
<style name="AppTheme.PopupOverlay" parent="ThemeOverlay.AppCompat.Light"/> 
<style name="OverflowMenu" parent="Widget.AppCompat.PopupMenu.Overflow">
    <item name="overlapAnchor">false</item> 
</style>

调用主题

android:theme="@style/AppTheme.NoActionBar"

添加ToolBar

<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/AppTheme.AppBarOverlay"
   app:title="首页"
   app:logo="@mipmap/ic_launcher"
   app:popupTheme="@style/AppTheme.PopupOverlay"/>

?attr/:使用系统预定义的值

ToolBar返回主界面

1.配置当前Activity的父级Activity

<activity android:name=".Main2Activity"
    android:parentActivityName=".MainActivity">
    <meta-data
        android:name="android.support.PARENT_ACTIVITY"
        android:value=".MainActivity"/>

2.设置ActionBar返回首页按钮可见

Toolbar toolbar=(Toolbar)findViewById(R.id.toolbar);
//设置ToolBar
setSupportActionBar(toolbar);
//获得ActionBar
ActionBar actionBar=getSupportActionBar();
//使用app Bar的导航功能,设置返回按钮显示
actionBar.setDisplayHomeAsUpEnabled(true);

使用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/action_search"
     android:icon="@mipmap/sousuo"
     android:title="搜索"
     app:showAsAction="always|collapseActionView"
     app:actionViewClass="androidx.appcompat.widget.SearchView"/>
   <item
     android:id="@+id/action_add"
     android:icon="@mipmap/youxi"
     android:title="添加"
     app:showAsAction="ifRoom"
     app:actionProviderClass="com.example.mytoolbar.MyActionProvider"/>
   <item
     android:id="@+id/action_setting"
     android:icon="@mipmap/saoma"
     android:title="设置"
     app:showAsAction="never"/>
   <item
     android:id="@+id/action_share"
     android:title="分享"
     app:showAsAction="collapseActionView"
    app:actionProviderClass="androidx.appcompat.widget.ShareActionProvider"/>
 </menu>

app:showAsAction:设置view在导航栏的显示方式

app:actionViewClass:设置导航栏的一些功能,比如:搜索框

app:actionProviderClass:设置子级菜单,分享

扫描二维码关注公众号,回复: 11904188 查看本文章

使用搜索框SearchView

//配置Toolbar
@Override
public boolean onCreateOptionsMenu(Menu menu) {
    
    
    getMenuInflater().inflate(R.menu.menu, menu);
    //在menu中获得指定MenuItem,此处获得搜索框
    MenuItem menuItem=menu.findItem(R.id.action_search);
    //通过Item获得SearchView对象
//  SearchView searchView= (SearchView) menuItem.getActionView();
    SearchView searchView= (SearchView) MenuItemCompat.getActionView(menuItem);
    //设置搜索框提示字体
    searchView.setQueryHint("请输入搜索项");
    //设置搜索文本监听
    searchView.setOnQueryTextListener(new SearchView.OnQueryTextListener() {
    
    
        //当点击搜索按钮时调用此方法
        @Override
        public boolean onQueryTextSubmit(String query) {
    
    
            Toast.makeText(MainActivity.this, query, Toast.LENGTH_SHORT).show();
            return false;
        }
        //当搜索内容改变时调用此方法
        @Override
        public boolean onQueryTextChange(String newText) {
    
    
            Toast.makeText(MainActivity.this, newText, Toast.LENGTH_SHORT).show();
            return false;
        }
    });
    return true;
}

//MenuItem的单击事件
@Override
public boolean onOptionsItemSelected(@NonNull MenuItem item) {
    
    
    switch (item.getItemId()) {
    
    
        case R.id.action_search:
            Toast.makeText(this, "搜索", Toast.LENGTH_SHORT).show();
            break;
        case R.id.action_add:
            Toast.makeText(this, "添加", Toast.LENGTH_SHORT).show();
            break;
        case R.id.action_setting:
            Toast.makeText(this, "设置", Toast.LENGTH_SHORT).show();
            break;
    }
    return super.onOptionsItemSelected(item);
}

ListView文本过滤

lv = (ListView) findViewById(R.id.*lv*);
 
 ArrayAdapter<String> adapter=new ArrayAdapter<String>(this,android.R.layout.*simple_list_item_1*,str);
 lv.setAdapter(adapter);
 //设置ListView允许文本过滤
 lv.setTextFilterEnabled(true);
//配置Toolbar
   @Override
   public boolean onCreateOptionsMenu(Menu menu) {
    
    
     getMenuInflater().inflate(R.menu.*menu*, menu);
     //搜索
     //获得菜单项
     MenuItem menuItem=menu.findItem(R.id.*action_search*);
     //获得SearchView文本框
 //    SearchView searchView= (SearchView) menuItem.getActionView();
     SearchView searchView= (SearchView) MenuItemCompat.*getActionView*(menuItem);
     //默认提示
     searchView.setQueryHint("请输入要搜索的关键字");
     //输入监听
     searchView.setOnQueryTextListener(new SearchView.OnQueryTextListener() {
    
    
       //按下键盘上的"搜索"按钮时调用的方法
       @Override
       public boolean onQueryTextSubmit(String query) {
    
    
 
         return true;
       }
       //当搜索内容改变时触发
       @Override
       public boolean onQueryTextChange(String newText) {
    
    
         if(!TextUtils.*isEmpty*(newText)){
    
    
           lv.setFilterText(newText);//设置文本过滤关键字
         }else {
    
    
           lv.clearTextFilter();//清空文本过滤
         }
         return true;
       }
     });
     return true;
   }

分享ShareActionProvider

<item
    android:id="@+id/action_share"
    android:title="分享"
    app:showAsAction="never"
    app:actionProviderClass="androidx.appcompat.widget.ShareActionProvider"/>
//获得分享按钮
MenuItem menuItem1=menu.findItem(R.id.action_share);
//得到分享类
ShareActionProvider shareActionProvider= (ShareActionProvider) MenuItemCompat.getActionProvider(menuItem1);
//通过意图去分享
Intent intent = new Intent();
intent.setAction(Intent.ACTION_SEND);//设置动作——发送消息
intent.putExtra(Intent.EXTRA_TEXT,"测试");//设置分享内容——分享数据为文本
intent.setType("text/plain");//设置发送的类型——文本类型
shareActionProvider.setShareIntent(intent);//实现分享

子级菜单ActionProvider使用

创建类继承自androidx包的ActionProvider类并重写以下方法

public MyActionProvider(Context context) {
    
    
    super(context);
}

@Override
public View onCreateActionView() {
    
    
    return null;
}

@Override
public void onPrepareSubMenu(SubMenu subMenu) {
    
    
    //将原本的subMenu清空
    subMenu.clear();
   //添加子item选项
    subMenu.add("sub item 1") //子菜单名字
            .setIcon(R.mipmap.youxi) //子菜单图标
            .setOnMenuItemClickListener(new MenuItem.OnMenuItemClickListener() {
    
    
                @Override
                public boolean onMenuItemClick(MenuItem item) {
    
    

                    return true;
                }
            });  //添加子菜单监听
    subMenu.add("sub item 2") //子菜单名字
            .setIcon(R.mipmap.ic_launcher) //子菜单图标
            .setOnMenuItemClickListener(new MenuItem.OnMenuItemClickListener() {
    
    
                @Override
                public boolean onMenuItemClick(MenuItem item) {
    
    
                    return true;
                }
            }); //添加子菜单监听
}

//此处需要返回true,表明该Action的Provider有子菜单
@Override
public boolean hasSubMenu() {
    
    
    return true;
}

使用自定义菜单

在MenuItem控件上加 [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-dSZZFCtS-1600931464944)(file:///C:\Users\acer\AppData\Local\Temp\SGPicFaceTpBq\14092\03D06C7A.png)] 实现调用

app:actionProviderClass="com.example.mytoolbar.MyActionProvider"

//添加子菜单监听
}

//此处需要返回true,表明该Action的Provider有子菜单
@Override
public boolean hasSubMenu() {
return true;
}


#### 使用自定义菜单

在MenuItem控件上加 [外链图片转存中...(img-dSZZFCtS-1600931464944)]  实现调用

```xml
app:actionProviderClass="com.example.mytoolbar.MyActionProvider"

猜你喜欢

转载自blog.csdn.net/qq_44408913/article/details/108774925