摘要
常见的应用中应用头部都会出现标题、返回和一些自定义菜单,这些上部的菜单方便用户点击,合理运用可以提升一定的用户体验。
菜单配置
当控制器activity对窗体进行创建之时需要告知窗体,这个控制器有特定的菜单按钮需要设置。
onCreateOptionsMenu
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.first_menu,menu);
return true;
}
在这里我们需要一个可以配置菜单的试图配置XML文件。
在项目res文件夹下创建 AndroidResourceDirectory,选择menu,并在menu下创建一个 menu resource file 如下
<?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/menu_first"
android:icon="@android:drawable/ic_menu_add"
android:title="@string/menu_name"
app:showAsAction="ifRoom"
></item>
</menu>
效果初现
下图中的 ⊕ 为本次添加的结果。
那么有了按钮之后,点击按钮时需要应用程序有所响应。接下来安卓系统给开发者提供了一按钮被点击后的接口方法 onOptionsItemSelected ,我们可以在 这个方法中在按钮点击后进行操作。
onOptionsItemSelected
public boolean onOptionsItemSelected(@NonNull MenuItem item) {
switch (item.getItemId()){
case R.id.menu_first:
// do somethings
return true;
}
return false;
}
在方法体中为点击提供响应能够让你做任何你想要的事情。
特殊的查询按钮
我们在需要对当前控制器提供查询输入进行数据筛选时,实现下图的查询按钮,并点击按钮后得到输入框并能提交给控制器
在之前的菜单按钮XML里增加一个子节点item
如下图查询输入框的添加为节点添加actionViewClass属性,属性中可以定义点击后的对象,此处设置为android.widget.SearchView,如此重新生成即可得到上面两图效果
<item android:id="@+id/menu_search"
android:icon="@android:drawable/ic_menu_search"
android:title="@string/menu_search"
app:showAsAction="ifRoom"
app:actionViewClass="android.widget.SearchView"></item>
在创建窗体按钮菜单之时,为输入框输入提交后提供响应。通过menu获取到查询按钮,并通过查询按钮获取到上面设置给定的查询视图SearchView并为其设置提交和修改促发事件。
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.first_menu,menu);
MenuItem menuItem = menu.findItem(R.id.menu_search);
SearchView searchView =(SearchView) menuItem.getActionView();
searchView.setOnQueryTextListener(new SearchView.OnQueryTextListener() {
@Override
public boolean onQueryTextSubmit(String query) {
// 输入框中输入完成后提交事件
return false;
}
@Override
public boolean onQueryTextChange(String newText) {
// 输入框中内容变化事件
return false;
}
});
return true;
}
总结
安卓系统可以对头部菜单按钮进行操作控制,并可以为当前按钮设置响应相应的视图,通常可以通过onCreateOptionsMenu方法创建,onOptionsItemSelected响应按钮点击。按钮的响应可以通过在创建时进行添加响应事件,也可以放置到响应方法中统一处理。