私はActionBarSherlockを使用しています:
メニュー項目は3つあり、そのうち1つだけがActionLayoutを持っています。
default_menu.xml
<item
android:id="@+id/searchIcon"
android:icon="@drawable/search_icon"
android:actionLayout="@layout/search_icon_actionview"
android:showAsAction="always|collapseActionView"
android:title="Search"/>
<item
android:id="@+id/newIcon"
android:icon="@drawable/new_icon"
android:orderInCategory="0"
android:showAsAction="ifRoom|collapseActionView"
android:title="New"/>
<item
android:id="@+id/notificationIcon"
android:icon="@drawable/notification_icon"
android:orderInCategory="0"
android:showAsAction="ifRoom|collapseActionView"
android:title="Notifications"/>
上記のコードを使用している場合。最初の2つのアイコンのみが表示されます。そして、2番目と3番目をAlwaysにすると、 SearchをクリックしたときにactionLayoutを開いてもそれらは残ります。
最初に3つのメニュー項目すべてを表示し、search_iconをクリックするとすべての項目を非表示にします。
私は自分の実装についても疑問を持っています。私が正しいやり方でやっているかどうかです。
アクティビティ(viewPagerを含む)の最初のフラグメント:
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case R.id.searchIcon:
mEtSearchbar.clearFocus();
(new Handler()).postDelayed(new Runnable() {
public void run() {
mEtSearchbar.dispatchTouchEvent(MotionEvent.obtain(SystemClock.uptimeMillis(), SystemClock.uptimeMillis(), MotionEvent.ACTION_DOWN, 0, 0, 0));
mEtSearchbar.dispatchTouchEvent(MotionEvent.obtain(SystemClock.uptimeMillis(), SystemClock.uptimeMillis(), MotionEvent.ACTION_UP , 0, 0, 0));
}
}, 100);
return true;
case R.id.newIcon:
return true;
case R.id.notificationIcon:
return true;
default:
return super.onOptionsItemSelected(item);
}
}
@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
// TODO Auto-generated method stub
inflater.inflate(R.menu.default_menu, menu);
mSearchbar = (MenuItem) menu.findItem(R.id.searchIcon);
View actionview = mSearchbar.getActionView();
mEtSearchbar = ((EditText) actionview.findViewById(R.id.search_editText));
ImageView searchImage = ((ImageView) actionview.findViewById(R.id.search_image));
searchImage.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View arg0) {
String s = mEtSearchbar.getText().toString();
Toast.makeText(getSherlockActivity(), "Searching for: " + s, Toast.LENGTH_SHORT)
.show();
}
});
super.onCreateOptionsMenu(menu, inflater);
}