在搜索视图中更改默认搜索图标位置

时间:2016-01-20 09:10:15

标签: android material-design searchview

我在项目中使用搜索视图为用户添加搜索功能。我的问题是我想将搜索图标位置从工具栏右侧更改为左侧。

这是我的菜单代码:

<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" tools:context=".MainActivity">
<item
    android:id="@+id/action_search"
    android:title="@android:string/search_go"
    android:icon="@drawable/search"
    app:showAsAction="ifRoom|collapseActionView"
    app:actionViewClass="android.support.v7.widget.SearchView"
    android:visible="true"/>

这是我的活动代码:

private SearchView mSearchView;
private MenuItem searchMenuItem;

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    // Inflate the menu; this adds items to the action bar if it is present.
    getMenuInflater().inflate(R.menu.menu_main, menu);
    searchMenuItem = menu.findItem(R.id.action_search);
    mSearchView = (SearchView) searchMenuItem.getActionView();
    mSearchView.setLayoutParams(new ActionBar.LayoutParams(Gravity.LEFT));
    mSearchView.setOnQueryTextListener(listener);
    return true;
}

SearchView.OnQueryTextListener listener = new SearchView.OnQueryTextListener() {
    @Override
    public boolean onQueryTextSubmit(String query) {
        if (query.equals("") || query.equals(" ")){
            Toast.makeText(G.context,"ابتدا یک متن برای جستجو بنویسید.",Toast.LENGTH_SHORT).show();
            return false;
        }
        Intent intent = new Intent(ContentsActivity.this,SearchActivity.class);
        intent.putExtra("KEYWORD", query);
        ContentsActivity.this.startActivity(intent);
        return false;
    }

    @Override
    public boolean onQueryTextChange(String newText) {
        return false;
    }
};

2 个答案:

答案 0 :(得分:0)

所以最后我找到了解决方案。 请注意,这不是一个好的解决方案。但它对我来说很好。

在menu_main.xml中

<item
    android:id="@+id/action_search"
    android:title="@android:string/search_go"
    android:icon="@drawable/search"
    app:showAsAction="always"
    app:actionViewClass="android.support.v7.widget.SearchView"
    android:visible="false"/>
菜单文件中的

我将搜索图标的可见性设置为false。所以现在当用户点击工具栏中的搜索图标时,我将可见性设置为true。

imgCatSearch.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            mSearchView.setBackgroundColor(Color.WHITE);
            Animation anim = AnimationUtils.loadAnimation(G.context,R.anim.m_anim);
            searchMenuItem.setVisible(true);
            mSearchView.setIconified(false);
            mSearchView.startAnimation(anim);
        }
    });

因此,当用户点击操作栏中的搜索按钮时,搜索视图可见性变为true并打开。

最后,此代码适用于用户点击searchView中的关闭按钮时:

mSearchView.setOnCloseListener(new SearchView.OnCloseListener() {
        @Override
        public boolean onClose() {
            searchMenuItem.setVisible(false);
            return false;
        }
    });

答案 1 :(得分:0)

在工具栏xml代码中,将方向设置为右侧。 像这样的android:layoutDirection =&#34; rtl&#34;

       <android.support.v7.widget.Toolbar
        android:layoutDirection="rtl"
        android:id="@+id/basepage_toolbar"
        android:layout_width="match_parent"
        android:layout_height="?attr/actionBarSize"
        android:background="#D4AC0D"
        app:popupTheme="@style/AppTheme.PopupOverlay"
        >