web-dev-qa-db-ja.com

ツールバーのSearchViewウィジェットで白い下線を削除する方法Android

プロジェクトでツールバー検索ウィジェットを使用しています。すべてが正常に機能しますが、ツールバーの検索フィールドの下にある下線を完全に削除することに固執しています。私は多くの解決策を試しましたが、何もうまくいきません。以下は、私が試したソリューションの一部です。

要件は、画像内の白い下線を削除することです

enter image description here

最初の解決策:

//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 の重複の可能性

事前に感謝します、どんな種類の解決策や提案も私にとって非常に役立ちます。

45
Chandru

次のようにしてみてください

View v = searchView.findViewById(Android.support.v7.appcompat.R.id.search_plate);
v.setBackgroundColor(Color.parseColor("here give actionbar color code"));

これがあなたのお役に立てば幸いです。

43
Nagaraju V

SearchViewを使用している場合は、21未満のAPIに使用します

Android:queryBackground="@Android:color/transparent"

aPI 21以上を使用している場合は、以下のコードを使用できます

app:queryBackground="@Android:color/transparent"
70
kshitij jain

または、スタイルを使用してこれを行うことができます。

<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>
39
Tomask

v7ウィジェットを使用している場合は、この行を追加してください

app:queryBackground="@Android:color/transparent"
12

以下のコードを使用してみてください、私にとって魅力のように動作します。

View v = searchView.findViewById(Android.support.v7.appcompat.R.id.search_plate);
    v.setBackgroundColor(ContextCompat.getColor(context,Android.R.color.transparent));
6
ranasaha

AndroidXの場合、他の回答に基づいてこれを使用しました。

mSearchView.findViewById(androidx.appcompat.R.id.search_plate)
        .setBackgroundColor(Color.TRANSPARENT);
3
Ebrahim Byagowi

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編集テキストの下線が消えます。

1
Siddarth Kanted

最初に、次のように簡単に最終結果を取得する必要があります。

searchPlate = (View) findViewById(R.id.search_plate);

次に、次のように背景色を透明に設定する必要があります。

searchPlate.setBackgroundColor(Color.TRANSPARENT);

これはandroidx.appcompat.widget.SearchViewに最適です!

0
Ali Najafi