Make an Android ActionBar's ActionView's Width match the ActionBar's width

我怕爱的太早我们不能终老 提交于 2019-12-24 14:35:02

问题


I want to show an AutoCompleteTextView that is always expanded in my ActionBar. This is my menu 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>

This is my 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" />

This is my Activity:

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);
    }
}

I'm using showAsAction="always" because I want the AutoCompleteTextView to always be visible (it will be the only thing in the ActionBar).

My AutoCompleteTextView is always right-aligned in the ActionBar and only has 100px width. Why is this?

Update

Thanks to Atul O Holic's answer, I found a preferred solution for my case, which doesn't require any special logic at all. I'm leaving my answer as correct because it works for the general case, but for my specific case, a SearchView is better and easier.


回答1:


theelfismike's answer pointed me in the right direction, but I was able to simplify it a bit. The answer he linked to referred to displaying a custom view with ActionBar#setCustomView, whereas I'm trying to make an action view set with MenuItem#setActionView take up the full width. It is possible that my simplification won't work well for ActionBar custom views.

This is the xml that worked for me:

<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>

Unfortunately, this hides the ActionBar's title. An answer in the question theelfismike linked to referred to this problem, but I couldn't get the suggested workaround to work.

Also, RelativeLayout seems to be the required root of an action view. I tried using a LinearLayout with many different combinations of layout_gravity and layout_width, but I couldn't get a LinearLayout to fill the full width.




回答2:


Checkout this solution: How to display custom view in ActionBar?

I think I had to do something similar.

I think the magic parts are that it has to be a LinearLayout inside a RelativeLayout and have this attribute set: android:layout_gravity="fill_horizontal"




回答3:


I agree with @Emmanuel in context of using SearchView as it's an in-built View and is meant to Search. :) It also goes along well specially with ActionBar.

I want it to be expanded all the time.

Adding the below will always keep it expanded by default (unless user himself closes it),

searchView.setIconified(false);

We can also add auto-suggestions to SearchView via a ContentProvider. Here's a doc from Google on the same. You may also like this.

Give it a shot. Have Fun. :)



来源:https://stackoverflow.com/questions/22823910/make-an-android-actionbars-actionviews-width-match-the-actionbars-width

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!