簡體   English   中英

Android SearchView - 更改光標顏色

[英]Android SearchView - change cursor color

我正在嘗試更改我實例化並添加到我的操作欄中的 SearchView 的光標顏色,如下所示:

MenuItem findItem = menu.findItem(R.id.menu_action_search);
        searchView = (SearchView) findItem.getActionView();

xml代碼:

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

      <item android:id="@+id/menu_action_search"
          android:title="Search"
          android:icon="@drawable/ic_search_white"
          app:showAsAction="collapseActionView|always"
          app:actionViewClass="android.support.v7.widget.SearchView" />

</menu>

我的活動有一個這樣的工具欄:

<android.support.design.widget.AppBarLayout
    android:id="@+id/appbarLayout"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"

    >

        <android.support.v7.widget.Toolbar
            android:id="@+id/toolbar"
            android:layout_width="match_parent"
            android:layout_height="?attr/actionBarSize"
            android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar"

            style="@style/EActionBar"

            />
</android.support.design.widget.AppBarLayout>

有沒有辦法覆蓋現有樣式並更改自動完成文本視圖的光標顏色?

您可以執行以下步驟來更改光標顏色。

第 1 步:定義您自己的可繪制光標,該光標可放置在res/drawable文件夾中。

my_cursor.xml

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
       android:shape="rectangle">
    <solid android:color="#0f0"/>
    <size android:width="1dp"/>
</shape>

第 2 步:將此代碼添加到onCreateOptionsMenu中。

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    getMenuInflater().inflate(R.menu.menu_main, menu);

    MenuItem findItem = menu.findItem(R.id.menu_action_search);
    searchView = (SearchView) findItem.getActionView();

    // Add this code
    SearchView.SearchAutoComplete searchTextView = searchView.findViewById(R.id.search_src_text);
    try {
        Field field = TextView.class.getDeclaredField("mCursorDrawableRes");
        field.setAccessible(true);
        field.set(searchTextView, R.drawable.my_cursor);
    } catch (Exception e) {
        // Ignore exception
    }

    // Your logic code here

    return super.onCreateOptionsMenu(menu);
}

在 Android Q 及更高版本中,您可以在代碼中輕松完成此操作。 首先,找到你的 searchView:

SearchView search = findViewById(R.id.search);

然后使用您的 searchView 找到 searchText 字段:

EditText searchText = search.findViewById(androidx.appcompat.R.id.search_src_text);

然后使用它來更改光標的顏色:

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) {
    searchText.setTextCursorDrawable(R.drawable.cursor_primary);
}

您還需要為您希望使用的每種顏色創建一個可繪制對象。 在我上面的例子中是 cursor_primary.xml:

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
    android:shape="rectangle">
    <solid android:color="@color/colorPrimary"/>
    <size android:width="1dp"/>
</shape>

就這樣!

2022 年 7 月 8 日更新

后來我發現在重新啟動應用程序之前,drawable 沒有正確更新。 因此,不要使用可繪制對象,而是使用以下命令:

searchText.getTextCursorDrawable().setTint(ContextCompat.getColor(context, R.color.colorPrimary));

..並且那個工作正常!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM