我的问题与SearchView wrong alignment和SearchView positions when expanded in ActionBar密切相关,但那里发布的答案无效。
所以,我在SearchView中使用Action Bar:
<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" />
答案 0 :(得分:8)
好吧,我找到了办法:
在onCreateOptionsMenu()
中,在标准菜单膨胀之后,设置
Gravity.RIGHT
实例的ActionBar.LayoutParams
SearchView
:
@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会在右侧,图标所在的同一位置打开,并且自定义图标仍在使用中。
答案 1 :(得分:2)
尝试编辑此行
android:showAsAction="ifRoom|collapseActionView"
为:
android:showAsAction="ifRoom"
它会将编辑文本对齐到右边。
答案 2 :(得分:0)
使用此方法对我有用:
final SearchView searchView = (SearchView) searchMenuItem.getActionView();
searchView.setOnSearchClickListener(new View.OnClickListener()
{
@Override
public void onClick(View v)
{
searchView.setLayoutParams(new Toolbar.LayoutParams(Gravity.END));
}
});