我的问题与
SearchView wrong alignment和
SearchView positions when expanded in ActionBar密切相关,但那里发布的答案不起作用.
所以,我在Action Bar使用的是SearchView:
<item android:id="@+id/action_search" android:icon="@drawable/navi_search" android:title="@string/action_search" android:showAsAction="ifRoom|collapseActionView" android:actionViewClass="android.widget.SearchView" />
它默认看起来像这样(右上角,溢出菜单旁边):
问题是,当扩展时,我希望SearchView保持在右侧,而是移动到左边缘,在主页按钮(应用程序图标)旁边.
我尝试将showAsAction更改为其中任何一个(as suggested here):
android:showAsAction="ifRoom" android:showAsAction="always"
…这会在展开时修复对齐,但在折叠状态下自定义图标会丢失:
此外,菜单上的android:layout_alignParentRight =“true”和android:layout_centerInParent =“true”等内容< item>没有效果.
有任何想法吗?
我的目标是Android 4.0及以上版本:
<uses-sdk android:minSdkVersion="14" android:targetSdkVersion="19" />
解决方法
好吧,我找到了一个方法:
在onCreateOptionsMenu()中,在标准菜单膨胀之后,设置
用于SearchView实例的Renvity.RIGHT为ActionBar.LayoutParams
:
@Override public boolean onCreateOptionsMenu(Menu menu) { MenuInflater inflater = getMenuInflater(); inflater.inflate(R.menu.main_activity_actions,menu); // ... // Find the SearchView; make it aligned to right,also in expanded mode: MenuItem item = menu.findItem(R.id.action_search); SearchView search = (SearchView) item.getActionView(); search.setLayoutParams(new ActionBar.LayoutParams(Gravity.RIGHT)); }
(在菜单定义XML中,我仍然使用android:showAsAction =“ifRoom | collapseActionView”.)
现在,SearchView将在右侧,图标所在的同一位置打开,并且自定义图标仍在使用中.