使Android ActionBar的ActionView的宽度与ActionBar的宽度相匹配

时间:2014-04-02 21:57:08

标签: android android-actionbar searchview

我希望在我的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更好更容易。

3 个答案:

答案 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似乎是操作视图的必需根。我尝试使用LinearLayoutlayout_gravitylayout_width的许多不同组合,但我无法获得LinearLayout来填充整个宽度。

答案 1 :(得分:2)

查看此解决方案:How to display custom view in ActionBar?

我想我必须做类似的事情。

我认为神奇的部分是它必须是RelativeLayout中的LinearLayout并设置此属性:android:layout_gravity="fill_horizontal"

答案 2 :(得分:2)

我同意@Emmanuel在使用SearchView的背景下,因为它是一个内置的View,并且意味着搜索。 :)它也特别适用于ActionBar。

I want it to be expanded all the time.

添加以下内容将始终保持默认扩展(除非用户自己关闭它),

searchView.setIconified(false);

我们还可以通过ContentProvider向SearchView添加自动建议。 Here's来自Google的文档同样如此。您可能也喜欢this.

试一试。玩得开心。 :)