低于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"