为了账号安全,请及时绑定邮箱和手机立即绑定

Android SearchView - 更改光标颜色

Android SearchView - 更改光标颜色

慕后森 2022-07-27 20:26:49
我正在尝试更改我实例化并添加到我的操作栏中的 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>有没有办法覆盖现有样式并更改自动完成文本视图的光标颜色?
查看完整描述

2 回答

?
繁星点点滴滴

TA贡献1803条经验 获得超3个赞

您可以执行以下步骤来更改光标颜色。


第1步:定义您自己的放置在res/drawable文件夹中的光标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);

}


查看完整回答
反对 回复 2022-07-27
?
一只名叫tom的猫

TA贡献1906条经验 获得超3个赞

在 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));

..并且那个工作正常!


查看完整回答
反对 回复 2022-07-27
  • 2 回答
  • 0 关注
  • 215 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信