• menu 代码

    <menu xmlns:android="http://schemas.android.com/apk/res/android" >
    
        <!--
    android:actionViewClass="" 添加View 如果是系统提供的控件(包名.类名)
    !!!!!showAsAction如果为never将失去效果!!!!!
    android:actionLayout="@layout/layout" 添加自定义的View
    -->
    <item
    android:id="@+id/action_search"
    android:orderInCategory="100"
    android:showAsAction="always"
    android:actionViewClass="android.widget.SearchView"
    android:title="搜索"/>
    <item
    android:id="@+id/action_spinner"
    android:orderInCategory="100"
    android:showAsAction="collapseActionView"
    android:actionLayout="@layout/layout"
    android:title="spinner"/> </menu>
  • MainActivity XMl布局文件

    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    tools:context=".MainActivity" > <TextView
    android:id="@+id/tv_show"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="@string/hello_world" /> <Button
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:onClick="openClick"
    android:text="展开"
    />
    <Button
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:onClick="closeClick"
    android:text="折叠"
    /> </LinearLayout>
  • 一个自定义View(用于填充到menu中)

    <?xml version="1.0" encoding="utf-8"?>
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical" > <Spinner
    android:id="@+id/spinner"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    /> </LinearLayout>
  • MainActivity 代码:

    package com.qf.day15_actionbar_demo02;
    
    import android.app.Activity;
    import android.os.Bundle;
    import android.view.Menu;
    import android.view.MenuItem;
    import android.view.MenuItem.OnActionExpandListener;
    import android.view.View;
    import android.widget.ArrayAdapter;
    import android.widget.SearchView;
    import android.widget.SearchView.OnQueryTextListener;
    import android.widget.Spinner;
    import android.widget.TextView;
    import android.widget.Toast; public class MainActivity extends Activity { //SearchView searchView; private TextView tvSHow; private Menu menu; @Override
    protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main); tvSHow = (TextView) findViewById(R.id.tv_show);
    } //打开
    public void openClick(View v){
    MenuItem item = menu.findItem(R.id.action_spinner);
    if(!item.isActionViewExpanded()){//判断是否展开
    item.expandActionView();//展开
    } }
    //关闭
    public void closeClick(View v){
    MenuItem item = menu.findItem(R.id.action_spinner);
    if(item.isActionViewExpanded()){//判断是否展开
    item.collapseActionView();//关闭
    }
    } @Override
    public boolean onCreateOptionsMenu(Menu menu) {
    // Inflate the menu; this adds items to the action bar if it is present.
    getMenuInflater().inflate(R.menu.main, menu); this.menu = menu;
    //找出菜单项
    MenuItem item = menu.findItem(R.id.action_search); //从菜单项里找出View
    SearchView searchView = (SearchView) item.getActionView(); //设置查找的监听
    searchView.setOnQueryTextListener(new OnQueryTextListener() { //点击搜索按钮时 执行此方法
    @Override
    public boolean onQueryTextSubmit(String query) {
    // TODO Auto-generated method stub
    Toast.makeText(MainActivity.this, "=onQueryTextSubmit="+query, 0).show();
    return false;
    } //文本改变时 执行此方法
    @Override
    public boolean onQueryTextChange(String newText) {
    // TODO Auto-generated method stub
    Toast.makeText(MainActivity.this, "=onQueryTextChange="+newText, 0).show();
    return false;
    }
    }); //找出菜单项
    MenuItem spinnerItem = menu.findItem(R.id.action_spinner);
    //找出layout布局
    View view = spinnerItem.getActionView();
    //从布局中找控件
    Spinner spinner = (Spinner) view.findViewById(R.id.spinner); String[] items = {"c","c++","php","java","android"}; ArrayAdapter<String> adapter = new ArrayAdapter<String>(MainActivity.this,
    android.R.layout.simple_list_item_1, items); spinner.setAdapter(adapter); //展开和折叠的监听
    spinnerItem.setOnActionExpandListener(new OnActionExpandListener() { @Override
    public boolean onMenuItemActionExpand(MenuItem item) {
    // TODO Auto-generated method stub tvSHow.setText("==onMenuItemActionExpand===展开====");
    return true;//返回false 不会折叠
    } @Override
    public boolean onMenuItemActionCollapse(MenuItem item) {
    // TODO Auto-generated method stub tvSHow.setText("==onMenuItemActionCollapse===折叠的====");
    return true;
    }
    }); return true;
    } }

15 Action View 以及监听 的使用的更多相关文章

  1. Android 开发中的View事件监听机制

    在开发过程中,我们常常根据实际的需要绘制自己的应用组件,那么定制自己的监听事件,及相应的处理方法是必要的.我们都知道Android中,事件的监听是基于回调机制的,比如常用的OnClick事件,你了解它 ...

  2. RecyclerView实现一个页面有多种item,每个item有多个view,并且可以让任意item的任意view自定义监听,通过接口方法进行触发操作

    百度了很多贴子,看着大佬的博客,模仿尝试,最终都是以失败告终,api可能版本不一样, 毕竟博客大佬都是7~8前写的,日期新点的都是好几年前了,多次尝试,还是报出莫名其妙的错. 哎,忧伤. 翻阅各种资料 ...

  3. [Spring cloud 一步步实现广告系统] 15. 使用开源组件监听Binlog 实现增量索引准备

    MySQL Binlog简介 什么是binlog? 一个二进制日志,用来记录对数据发生或潜在发生更改的SQL语句,并以而进行的形式保存在磁盘中. binlog 的作用? 最主要有3个用途: 数据复制( ...

  4. Android WindowManager 监听返回键及home键

    一.监听home键盘,Android Home键系统负责监听,捕获后系统自动处理.有时候,我们需要监听home键处理自己的逻辑,监听方法如下: /** * 监听home键广播 */ private f ...

  5. oracle 11g 修改默认监听端口1521

    OS: Oracle Linux Server release 5.7 DB: Oracle Database 11g Enterprise Edition Release 11.2.0.3.0 - ...

  6. Android 使用 OnTouchListener 接口监听双击或多击事件

    这里是使用 OnTouchListener 实现的监听双击 or 多击的监听器.通过 View.setOnTouchListener ,可以实现在任意 View 上监听双击事件. 网上有许多文章简单的 ...

  7. android蓝牙耳机下的语音(输入/识别)及按键监听

    背景:本人负责公司android平台的app开发,最近要开发一个语音助手类的app,类似于灵犀语音助手.虫洞语音助手等.其中有两个蓝牙耳机下的语音识别问题,比较折腾人,问题描述:1.蓝牙耳机连接下捕获 ...

  8. vue的属性监听

    一.vue的监听 1.监听的例子 如: html:<input type="number" v-model="a" /> js: watch: { ...

  9. android listVIew实现button按钮监听程序

    1.重写simpleAdapter 方法@Override public HashMap<String,String> getItem(int position) { // TODO Au ...

随机推荐

  1. 51 nod 1406 与查询

    1406 与查询 题目来源: CodeForces 基准时间限制:2 秒 空间限制:131072 KB 分值: 80 难度:5级算法题   有n个整数.输出他之中和x相与之后结果为x的有多少个.x从0 ...

  2. 计蒜客NOIP2017提高组模拟赛(四)day1

    T1:小X的质数 小 X 是一位热爱数学的男孩子,在茫茫的数字中,他对质数更有一种独特的情感.小 X 认为,质数是一切自然数起源的地方. 在小 X 的认知里,质数是除了本身和 1 以外,没有其他因数的 ...

  3. 【CodeVs 6128 Lence的方块们】

    ·希望除了内部人员以外能有人通过这道题,因为这是大米饼第一次改编的题 ·我所见到的"本题原版"的题解也很少,搜索一下应该是: #include<stdio.h> #in ...

  4. 【codevs 1911 孤岛营救问题】

    ·为了分析方便,可以先做一个题目简化.去掉"钥匙"这个条件,那么就是一个BFS或者SPFA--现在加上该条件.如本题只给出最多两种钥匙,当然你可以继续坚持BFS等方式,时间不会太差 ...

  5. hdu 5646DZY Loves Partition(构造)

    DZY Loves Partition  Accepts: 154  Submissions: 843  Time Limit: 4000/2000 MS (Java/Others)  Memory ...

  6. 对中断的理解handle_level_irq【原创】

    如下为本人原创,在解决问题的过程中的一点心得,如果有描述不准确的地方还请各位指出,非常感谢 Linux内核版本:linux-4.9.18 曾有一次调试触摸屏的时候遇到如下的问题 /startup/mo ...

  7. sprintf()、fprintf()、fscanf()的用法

    sprintf函数的用法1.该函数包含在stdio.h的头文件中. 2.sprintf和平时我们常用的printf函数的功能很相似.sprintf函数打印到字符串中,而printf函数打印输出到屏幕上 ...

  8. scanf———while(scanf ("%lu",&num) = =1)什么意思

    scanf的返回值由后面的参数决定 scanf("%d%d", &a, &b); 如果a和b都被成功读入,那么scanf的返回值就是2 如果只有a被成功读入,返回值 ...

  9. C语言程序设计第三次作业——选择结构(1)

    一.改错题 1.题目计算f(x)的值:输入实数x,计算并输出下列分段函数f(x)的值,输出时保留1位小数. 源程序(有错误的程序): #include <stdio.h> int main ...

  10. window 2008 下 安装域管理并且控制禁用QQ和U盘

    场景需求下: 需求一:禁止普通用户使用USB.CD-ROM等驱动器防止病毒和资料外泄  需求二:并USB 键盘鼠标要可以使用 三:限制qq聊天工具的使用.这是公司真实环境需求.因此需要先模拟测试一下, ...