需求:
向ActionBar中添加自定义的View:
menu文件夹下的菜单选项:
<menu xmlns:android="http://schemas.android.com/apk/res/android" >
<item
android:id="@+id/custom"
android:actionLayout="@layout/custom"
android:orderInCategory="100"
android:showAsAction="ifRoom|collapseActionView"
android:title="自定义"/>
<!--
通过android:actionLayout="@layout/custom"
方法加载我们自定义的视图
-->
</menu>
MainActivity:
package com.example.custom;
import android.os.Bundle;
import android.annotation.SuppressLint;
import android.app.Activity;
import android.util.Log;
import android.view.Menu;
import android.view.MenuItem;
import android.view.MenuItem.OnActionExpandListener;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
public class MainActivity extends Activity {
private TextView tv;
private Button btn;
private EditText et;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
tv = (TextView) findViewById(R.id.tv);
}
@SuppressLint("NewApi")
@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);
// 获取菜单项中的条目
MenuItem item = menu.findItem(R.id.custom);
// 获取条目中的View视图
View view = item.getActionView();
// 获取View视图中的控件
btn = (Button) view.findViewById(R.id.btn);
et = (EditText) view.findViewById(R.id.et);
btn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
String msg = et.getText().toString();
tv.setText(msg);
}
});
// 定义展开的事件监听
item.setOnActionExpandListener(new OnActionExpandListener() {
// 展开时的动作,这里让它返回true
@Override
public boolean onMenuItemActionExpand(MenuItem item) {
Log.i("main", "展开了");
return true;
}
// 折叠时的动作,同样返回true
@Override
public boolean onMenuItemActionCollapse(MenuItem item) {
Log.i("main", "折叠了");
return true;
}
});
return true;
}
}
运行结果: