プロジェクトでツールバー検索ウィジェットを使用しています。すべてが正常に機能しますが、ツールバーの検索フィールドの下にある下線を完全に削除することに固執しています。私は多くの解決策を試しましたが、何もうまくいきません。以下は、私が試したソリューションの一部です。
要件は、画像内の白い下線を削除することです
最初の解決策:
//Removing underline
int searchPlateId = searchView.getContext().getResources().getIdentifier("Android:id/search_plate", null, null);
View searchPlate = searchView.findViewById(searchPlateId);
if (searchPlate!=null) {
searchPlate.setBackgroundColor (Color.TRANSPARENT);
int searchTextId = searchPlate.getContext ().getResources ().getIdentifier ("Android:id/search_src_text", null, null);
}
第二の解決策:
EditText searchEdit = ((EditText)searchView.findViewById(Android.support.v7.appcompat.R.id.search_src_text));
searchEdit.setBackgroundColor(Color.TRANSPARENT);
上記のコードは、EditTextの背景を変更するために機能しますが、SearchBarの閉じるアイコンの下に下線が表示されます。
次のようにSearchBarウィジェットに使用している完全なコード:
@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater infl) {
super.onCreateOptionsMenu(menu, infl);
MenuInflater inflater = getActivity().getMenuInflater();
inflater.inflate(R.menu.action_search, menu);
final SearchView searchView = (SearchView) MenuItemCompat
.getActionView(menu.findItem(R.id.search));
SearchManager searchManager = (SearchManager) getActivity ().getSystemService (getActivity ().SEARCH_SERVICE);
searchView.setSearchableInfo (searchManager.getSearchableInfo (getActivity ().getComponentName ()));
//changing edittext color
EditText searchEdit = ((EditText)searchView.findViewById(Android.support.v7.appcompat.R.id.search_src_text));
searchEdit.setTextColor(Color.WHITE);
}
action_search.xml
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:Android="http://schemas.Android.com/apk/res/Android"
xmlns:compat="http://schemas.Android.com/apk/res-auto">
<item Android:id="@+id/search"
Android:title="Search"
Android:icon="@drawable/abc_ic_search_api_mtrl_alpha"
compat:showAsAction="ifRoom|collapseActionView"
compat:actionViewClass="Android.support.v7.widget.SearchView" />
</menu>
this の重複の可能性
事前に感謝します、どんな種類の解決策や提案も私にとって非常に役立ちます。
次のようにしてみてください
View v = searchView.findViewById(Android.support.v7.appcompat.R.id.search_plate);
v.setBackgroundColor(Color.parseColor("here give actionbar color code"));
これがあなたのお役に立てば幸いです。
SearchViewを使用している場合は、21未満のAPIに使用します
Android:queryBackground="@Android:color/transparent"
aPI 21以上を使用している場合は、以下のコードを使用できます
app:queryBackground="@Android:color/transparent"
または、スタイルを使用してこれを行うことができます。
<style name="SearchViewMy" parent="Widget.AppCompat.Light.SearchView">
<item name="submitBackground">@color/primaryColor</item>
<item name="queryBackground">@color/primaryColor</item>
</style>
queryBackgroundは、クエリの背景の属性です。音声検索をサポートしている場合は、そのマイクボタンの下の行も削除できます。それはsubmitBackground属性の目的です。
その後、もちろんスタイルをテーマに適用します。
<style name="Theme.App" parent="Theme.AppCompat.Light.NoActionBar.FullScreen">
<item name="searchViewStyle">@style/SearchViewMy</item>
</style>
v7ウィジェットを使用している場合は、この行を追加してください
app:queryBackground="@Android:color/transparent"
以下のコードを使用してみてください、私にとって魅力のように動作します。
View v = searchView.findViewById(Android.support.v7.appcompat.R.id.search_plate);
v.setBackgroundColor(ContextCompat.getColor(context,Android.R.color.transparent));
AndroidXの場合、他の回答に基づいてこれを使用しました。
mSearchView.findViewById(androidx.appcompat.R.id.search_plate)
.setBackgroundColor(Color.TRANSPARENT);
SearchView編集テキストの背景色を変更するコードは以下のとおりです
public static void setSearchViewEditTextBackgroundColor(Context context, SearchView searchView, int backgroundColor){
int searchPlateId = context.getResources().getIdentifier("Android:id/search_plate", null, null);
ViewGroup viewGroup = (ViewGroup) searchView.findViewById(searchPlateId);
viewGroup.setBackgroundColor(ComponentUtils.getColor(context, backgroundColor));
}
アクションバーの背景色が白の場合は、上記のメソッドを次のように呼び出します。
setSearchViewEditTextBackgroundColor(this, searchView, R.color.white);
これで、SearchView編集テキストの下線が消えます。
最初に、次のように簡単に最終結果を取得する必要があります。
searchPlate = (View) findViewById(R.id.search_plate);
次に、次のように背景色を透明に設定する必要があります。
searchPlate.setBackgroundColor(Color.TRANSPARENT);
これはandroidx.appcompat.widget.SearchViewに最適です!