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

Change default search icon position in search view

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

这是我的菜单代码:

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

这是我的 activity 代码:

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

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

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

在工具栏 xml 代码中,将方向设置为向右。 像这样 android:layoutDirection="rtl"

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