【问题标题】:SearchView width + margin of AutoComplete dropdownSearchView 宽度 + AutoComplete 下拉菜单的边距
【发布时间】:2015-11-26 19:18:38
【问题描述】:

我正在尝试将AutoCompleteTextView 生成的下拉列表ListView 设置为match_parent(全屏)

这是我目前得到的:

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

这是使菜单膨胀的活动

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

我的想法

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

谢谢!

【问题讨论】:

标签: android autocompletetextview searchview


【解决方案1】:

我的方法是创建另一个具有左右边距的锚视图,它的高度是 1dp。
setDropdownAnchor() 到该视图,下拉将匹配您的视图。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-10-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-11-29
    相关资源
    最近更新 更多