[英]Android SearchView - Move icon to right (without ActionBar)
我有一個像這樣的 android SearchView -
<SearchView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:queryHint="Search the forum ..."
android:iconifiedByDefault="true"
android:id="@+id/search_forum"
android:layout_alignParentRight="true"
android:textColor="#aaa" />
這不在我的 ActionBar 中,它在我的活動中的其他地方。
我需要圖標(搜索圖標)留在我的布局右側。 單擊它應該擴展到 SearchView(與 ActionBar SearchView 相同的行為)。 我試過android:layout_alignParentRight="true"
但圖標停留在左邊。
任何幫助都會很棒:)
我找到了解決這個問題的方法。 只需將布局方向設置為“rtl”,圖標就會在右側。 這是我的搜索視圖的代碼,它按預期工作。
<SearchView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layoutDirection="rtl"
android:iconifiedByDefault="true"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
我找不到確切的答案,所以我做了這個 - 創建一個帶有搜索圖標的圖像視圖。 把它放在我的布局的右邊。 單擊時,使搜索視圖可見並設置圖標化 false 並請求搜索視圖的焦點。
如果有人最終能幫我找到合適的解決方案,我將不勝感激。
如果問題仍然沒有答案:
只需將 SearchView 移動到一個 RelativeLayout 中,並將其與父項的右側對齊:
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="match_parent">
<android.support.v7.widget.SearchView
android:layout_width="wrap_content"
android:id="@+id/searchView"
android:layout_alignParentRight="true"
android:layout_height="match_parent" />
最終結果如下所示:
添加 SearchView 作為菜單項而不是 Toolbar 元素本質上解決了這個問題。
一個優雅的方法:
第 1 步- 將搜索字段添加到您的工具欄:
<item
android:id="@+id/action_search"
android:icon="@android:drawable/ic_menu_search"
app:showAsAction="always|collapseActionView"
app:actionViewClass="android.support.v7.widget.SearchView"
android:title="Search"/>
第 2 步- 將邏輯添加到您的 onCreateOptionsMenu()
import android.support.v7.widget.SearchView; // not the default !
@Override
public boolean onCreateOptionsMenu( Menu menu) {
getMenuInflater().inflate( R.menu.main, menu);
MenuItem myActionMenuItem = menu.findItem( R.id.action_search);
searchView = (SearchView) myActionMenuItem.getActionView();
searchView.setOnQueryTextListener(new SearchView.OnQueryTextListener() {
@Override
public boolean onQueryTextSubmit(String query) {
UserFeedback.show( "SearchOnQueryTextSubmit: " + query);
if( ! searchView.isIconified()) {
searchView.setIconified(true);
}
myActionMenuItem.collapseActionView();
return false;
}
@Override
public boolean onQueryTextChange(String s) {
// UserFeedback.show( "SearchOnQueryTextChanged: " + s);
return false;
}
});
return true;
}
除了工具欄之外,我對 SearchView 的要求完全相同,即當折疊的搜索圖標應該在右端時,當展開時它會覆蓋整個寬度。
我已經在RelativeLayout 中為SearchView 嘗試了這個解決方案。
<androidx.appcompat.widget.SearchView
android:id="@+id/searchView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentEnd="true" />
並在代碼中處理OnSearchClickListener
和OnCloseListener
以在MATCH_PARENT
和WRAP_CONTENT
之間切換寬度。
searchView.setOnSearchClickListener {
val params = it.layoutParams as RelativeLayout.LayoutParams
params.width = RelativeLayout.LayoutParams.MATCH_PARENT
it.layoutParams = params
}
searchView.setOnCloseListener {
val params = searchView.layoutParams as RelativeLayout.LayoutParams
params.width = RelativeLayout.LayoutParams.WRAP_CONTENT
searchView.layoutParams = params
return@setOnCloseListener false
}
嘗試這個:
SearchView searchView =
(SearchView) findViewById(R.id.search_view);
searchView.setIconifiedByDefault(false);
searchView.setIconified(false);
ImageView searchViewIcon = (ImageView)searchView.findViewById(android.support.v7.appcompat.R.id.search_mag_icon);
ViewGroup linearLayoutSearchView =
(ViewGroup) searchViewIcon.getParent();
linearLayoutSearchView.removeView(searchViewIcon);
linearLayoutSearchView.addView(searchViewIcon);
取自這里。
以這種方式為我工作。 我使用工具欄而不是 ActionBar。
searchView.setLayoutParams(new Toolbar.LayoutParams(Gravity.RIGHT));
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.