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;
}
}