更改搜索视图中的默认搜索图标位置
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"
>
我在我的项目中使用搜索视图来为用户添加搜索功能。我的问题是我想将搜索图标的位置从工具栏右侧更改为左侧。
这是我的菜单代码:
<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"
>