SearchView宽度+自动完成下拉框的边距 [英] SearchView width + margin of AutoComplete dropdown

查看:110
本文介绍了SearchView宽度+自动完成下拉框的边距的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在尝试将AutoCompleteTextView生成的下拉菜单ListView设置为match_parent(屏幕的整个宽度)

I'm trying to set the dropdown ListView generated by the AutoCompleteTextView to match_parent (full width of the screen)

这是我到目前为止得到的:

This is what I got so far:

我也使用受此答案启发的SearchView 此处

I'm also using a SearchView inspired by this answer Here

这是使菜单膨胀的活动

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    getMenuInflater().inflate(R.menu.menu_search, menu);
    MenuItem searchItem = menu.findItem(R.id.action_search);
    searchItem.expandActionView();

    MenuItemCompat.setOnActionExpandListener(searchItem, new MenuItemCompat.OnActionExpandListener() {
        @Override
        public boolean onMenuItemActionExpand(MenuItem item) {
            return false;
        }
        @Override
        public boolean onMenuItemActionCollapse(MenuItem item) {
            onBackPressed();
            return false;
        }
    });


    final ArrayAdapterSearchView searchView = (ArrayAdapterSearchView) MenuItemCompat.getActionView(searchItem);
    searchView.setQueryHint(getResources().getString(R.string.location_autocomplete_hint));
    searchView.setAdapter(mPlaceAdapter);

    searchView.setDropDownAnchor(R.id.anchor_dropdown);
    searchView.setDropDownWidth(ViewGroup.LayoutParams.MATCH_PARENT);


    searchView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
        @Override
        public void onItemClick(AdapterView<?> parent, View view, int position, long id) {

            searchView.setText(mPlaceAdapter.getItem(position).toString());
            startSearch(position);

        }
    });

ArrayAdapter

public class ArrayAdapterSearchView extends SearchView {

    private SearchView.SearchAutoComplete mSearchAutoComplete;

    public ArrayAdapterSearchView(Context context) {
        super(context);
        initialize();
    }

    public ArrayAdapterSearchView(Context context, AttributeSet attrs) {
        super(context, attrs);
        initialize();
    }

    public void initialize() {
        mSearchAutoComplete = (SearchAutoComplete)     findViewById(android.support.v7.appcompat.R.id.search_src_text);
        this.setAdapter(null);
        this.setOnItemClickListener(null);
    }

    @Override
    public void setSuggestionsAdapter(CursorAdapter adapter) {
    // don't let anyone touch this
    }

    public void setOnItemClickListener(AdapterView.OnItemClickListener listener) {
        mSearchAutoComplete.setOnItemClickListener(listener);
    }

    public void setAdapter(ArrayAdapter<?> adapter) {
        mSearchAutoComplete.setAdapter(adapter);
    }

    public void setText(String text) {
        mSearchAutoComplete.setText(text);
    }

    public void setDropDownVerticalOffset(int value) {
        mSearchAutoComplete.setDropDownVerticalOffset(value);
    }

    public void setDropDownAnchor(int value) {
        mSearchAutoComplete.setDropDownAnchor(value);
    }

    public void setDropDownWidth (int value) {
        mSearchAutoComplete.setDropDownWidth(value);
    }

    public void setDropDownBackgroundResource(Drawable value) {
        mSearchAutoComplete.setDropDownBackgroundDrawable(value);
        LinearLayout.LayoutParams params = (LinearLayout.LayoutParams) mSearchAutoComplete.getLayoutParams();
        params.setMargins(0, 0, 0, 0); //substitute parameters for left, top, right, bottom
        mSearchAutoComplete.setLayoutParams(params);
    }

}

最后是menu_search.xml文件

<menu xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_margin="0dp"
    android:padding="0dp"
    tools:context="com.example.activities.SearchActivity">

    <item
        android:id="@+id/action_search"
        android:hint="@string/location_autocomplete_hint"
        android:title="@string/location_autocomplete_hint"
        android:icon="@android:drawable/ic_menu_search"
        app:showAsAction="collapseActionView"
        app:actionViewClass="com.example.adapters.ArrayAdapterSearchView" />

</menu>

主要活动xml

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:background="@color/myWindowBackground"
    tools:context="com.example.activities.SearchActiviKty"
    android:orientation="vertical">

<include
    android:id="@+id/toolbar_actionbar"
    layout="@layout/toolbar_default"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"/>

<View
    android:id="@+id/anchor_dropdown"
    android:layout_width="fill_parent"
    android:layout_height="16dp"/>

</LinearLayout>

最后,我使用一个简单的TextView填充ListView.

Finally, I'm using a simple TextView to populate the ListView.

我的想法

我认为SearchView与此问题有关,因为如果我将SearchView替换为简单的AutoCompleteTextView,则下拉列表将占据整个屏幕宽度.

I think the SearchView has something to do with this issue, because If I replace the SearchView by a simple AutoCompleteTextView, the dropdown takes the entire width of the screen.

谢谢!

推荐答案

我的方法是创建另一个锚视图,该视图的左边和右边为边距,高度为1dp.
setDropdownAnchor()转到该视图,然后下拉菜单将与您的视图匹配.

My way is create another anchor view which has margin left and right, and it height is 1dp.
setDropdownAnchor() to that view and drop down will match your view.

这篇关于SearchView宽度+自动完成下拉框的边距的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆