【问题标题】:Android SearchView - change cursor colorAndroid SearchView - 更改光标颜色
【发布时间】:2019-03-11 17:21:05
【问题描述】:

我正在尝试更改我实例化并添加到操作栏中的 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>

有没有办法覆盖现有样式并更改自动完成文本视图的光标颜色?

【问题讨论】:

    标签: java android search themes


    【解决方案1】:

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

    第 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);
    }
    

    【讨论】:

    • 这个方法有效,但是像这样: final android.support.v7.widget.SearchView.SearchAutoComplete searchAutoComplete = (SearchView.SearchAutoComplete) searchView.findViewById(android.support.v7.appcompat.R.id .search_src_text); ... field.set(searchAutoComplete, R.drawable.white_cursor);所以需要来自searchview的文本框的字段,而不是searchview本身
    • @AndreiF 请仔细看看我的答案,我已经在搜索视图的文本框中设置了。
    • 是的,对不起。当我测试代码时我刚刚醒来,甚至没有喝我的咖啡。谢谢!
    • 不用担心。快乐编码:)
    • searchView.findViewById(androidx.appcompat.R.id.search_src_text) - 对于 androidx
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-07-23
    • 1970-01-01
    • 2017-11-25
    • 1970-01-01
    相关资源
    最近更新 更多