Dam*_*ian 17 android android-actionbar
冰淇淋三明治:
我想通过标准的Action View机制向ActionBar 添加一个AutoCompleteTextView(因为SearchView在ICS之前不可用,我也在使用ActionBarSherlock):
<item android:id="@+id/menu_search" android:actionViewClass="com.example.AutoCompleteActionView" android:showAsAction="ifRoom" android:title="@string/address"></item>
<item android:id="@+id/menu_close" android:icon="@drawable/ic_menu_close_clear_cancel" android:showAsAction="always"></item>
<item android:id="@+id/menu_ok" android:icon="@drawable/ic_menu_ok" android:showAsAction="always"></item>
Run Code Online (Sandbox Code Playgroud)
这可行,但默认情况下它不会占用ActionBar中的可用空间,我想要这样做.
我查看了SearchView的源代码,看了它如何覆盖onMeasure,并为我自己的类做了同样的事情,我从AutoCompleteTextView派生.当我这样做时,AutoCompleteTextView消耗所有空间,没有空间用于我想要显示在其右侧的两个菜单项.
当MeasureSpec.getMode()为MeasureSpec.AT_MOST时,看起来MeasureSpec.getSize()返回的宽度没有考虑其他两个菜单项.
有人做过类似的事吗?有什么建议?
谢谢,达米安
ste*_*pic 13
我认为这可能会有所帮助:
使用自定义布局创建可折叠菜单项:
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android" >
<item
android:id="@+id/menuSearch"
android:showAsAction="always|collapseActionView" android:icon="@drawable/action_search" android:actionLayout="@layout/collapsible_absearch">
</item>
</menu>
Run Code Online (Sandbox Code Playgroud)
这是自定义布局:
<?xml version="1.0" encoding="utf-8"?>
<AutoCompleteTextView xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/ab_Search"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="@string/search" />
Run Code Online (Sandbox Code Playgroud)
然后在你的活动中:
public boolean onCreateOptionsMenu(Menu menu) {
getSupportMenuInflater().inflate(R.menu.activitymenu, menu);
MenuItem menuItem=menu.findItem(R.id.menuSearch);
menuItem.setOnActionExpandListener(new OnActionExpandListener() {
@Override
public boolean onMenuItemActionExpand(MenuItem item) {
mAbSearch=(AutoCompleteTextView) item.getActionView().findViewById(R.id.ab_Search);
// Set your adapter and do whatever you want
return true;
}
});
Run Code Online (Sandbox Code Playgroud)
我无法得到Matthias的建议在代码中工作(也许我遗漏了一些东西),但是在我的Action View中向最顶层元素添加minWidth属性就可以了.
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="64dip"
android:minWidth="64dip"
android:layout_height="match_parent"
android:gravity="center" >
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:id="@+id/imageViewAnimatedProgressSpinner"
android:background="@drawable/animated_progress_spinner" />
</FrameLayout>
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
16198 次 |
| 最近记录: |