我希望在我的ActionBar
中展示始终展开的AutoCompleteTextView。这是我的菜单xml:
<menu xmlns:android="http://schemas.android.com/apk/res/android">
<item
android:id="@+id/visibility_menu_search"
android:icon="@drawable/ic_action_search"
android:showAsAction="always"
android:actionLayout="@layout/visibility_search" />
</menu>
这是我的layout/visibility_search.xml
<AutoCompleteTextView xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@+id/visibility_search_auto_complete_text_view" />
这是我的活动:
public class VisibilityActivity extends Activity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(layout.visibility_activity);
getActionBar().setDisplayShowTitleEnabled(false);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.visibility, menu);
return super.onCreateOptionsMenu(menu);
}
}
我正在使用showAsAction="always"
,因为我希望AutoCompleteTextView
始终可见(这将是ActionBar
中唯一的内容。)
我的AutoCompleteTextView
始终在ActionBar
中右对齐,且宽度仅为100px。这是为什么?
更新
感谢Atul O Holic's answer,我为我的案例找到了一个首选解决方案,它根本不需要任何特殊逻辑。我要离开my answer是正确的,因为它适用于一般情况,但对于我的具体情况,SearchView
更好更容易。
答案 0 :(得分:9)
theelfismike's answer指出了我正确的方向,但我能够简化它。他链接到的答案提到使用ActionBar#setCustomView
显示自定义视图,而我尝试使用MenuItem#setActionView
设置操作视图占据整个宽度。我的简化可能不适用于ActionBar
自定义视图。
这是适合我的xml:
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="wrap_content"
android:layout_height="match_parent">
<EditText xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@+id/visibility_search_edit_text"/>
</RelativeLayout>
不幸的是,这会隐藏ActionBar
的标题。 An answer in the question theelfismike linked to提到了这个问题,但我无法让suggested workaround工作。
此外,RelativeLayout
似乎是操作视图的必需根。我尝试使用LinearLayout
与layout_gravity
和layout_width
的许多不同组合,但我无法获得LinearLayout
来填充整个宽度。
答案 1 :(得分:2)
查看此解决方案:How to display custom view in ActionBar?
我想我必须做类似的事情。
我认为神奇的部分是它必须是RelativeLayout中的LinearLayout并设置此属性:android:layout_gravity="fill_horizontal"
答案 2 :(得分:2)