android 如何在com.mancj.materialsearchbar.MaterialSearchBar中更改文本颜色

szqfcxe2  于 2023-05-21  发布在  Android
关注(0)|答案(1)|浏览(130)

我导入了库mancj.materialSearchBar,当我开始搜索时,我输入的文本是白色的,与materialSearchBar的背景颜色相同。用户无法看到他们在搜索栏中输入的内容。如何在mancj.materialSearchBar中更改键入的文本颜色?我已经应用了Android:主题,但似乎没有任何效果...
activity_food_list.xml

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
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"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".FoodList"
>

<com.mancj.materialsearchbar.MaterialSearchBar
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:id="@+id/searchBar"
    android:layout_alignParentTop="true"
    app:mt_speechMode="false"
    app:mt_hint="Enter your food"
    app:mt_textColor="#000000"
    android:background="@color/colorPrimary"
    />

<android.support.v7.widget.RecyclerView
    android:layout_height="match_parent"
    android:layout_width="match_parent"
    android:id="@+id/recycler_food"
    android:scrollbars="vertical"
    android:layout_below="@id/searchBar"/>


</RelativeLayout>
a8jjtwal

a8jjtwal1#

使用反射解决问题

前言

您可以使用反射来获取编辑文本并为其着色。请注意,它也适用于占位符(注:您没有指定您是在请求有关与用户键入的搜索关键字相对应的实际编辑文本的帮助,还是有关占位符的帮助)。
在这个答案中,我将向您展示1)如何获得上述编辑文本和2)如何获得上述占位符,以及3)如何设置文本和颜色。在最后一节中,相应的代码绑定到这个答案。
注:* 答案的目的不是解释“反射”的概念,而是解释Java或Android的情况。它的唯一目标是让你能够使用反射自定义mancj/MaterialSearchBar的关键字编辑文本和占位符(以及所有的小部件)。

步骤

获取widget

实际阅读mancj/MaterialSearchBar的类,您将看到它的字段列表。根据你的问题,有趣的是:

  1. searchEdit
  2. placeholder
    (显然,请注意,它可能会(非常)不同于(搜索 * 例如 *)API。
    然后,您可以获取它并使其可访问以获取相应的EditText(与搜索编辑关联)和TextView(与占位符关联)。

设置文字和颜色

一旦你得到了足够的小部件,你就可以使用它们的方法(* 即:EditTextTextView的 * 方法)来设置它们的文本和颜色。有趣的方法如下:setTextsetTextColor

更进一步:设置字体系列

一个有趣的事情可能是自定义占位符和关键字编辑文本的字体家族。
与上一节类似,您可以1)获取字体(ResourcesCompat.getFont(some_context, R.font.some_fonte.g.)和2)在获得的小部件上使用setTypefaceEditText和/或TextView)。

来源

这里是相应的搜索关键字编辑文本的来源。按照前面的解释,可以对占位符进行相同的操作。

final Field searchEdit;
try {
    searchEdit = material_search_bar.getClass().getDeclaredField("searchEdit");
    searchEdit.setAccessible(true);
    final EditText editText = (EditText) searchEdit.get(material_search_bar);
    editText.setText("Your text");
    editText.setTextColor(getResources().getColor(R.color.your_color));
    Typeface typeface = ResourcesCompat.getFont(Objects.requireNonNull(getContext()), R.font.your_font);
    editText.setTypeface(typeface);

} catch (NoSuchFieldException | IllegalAccessException e) {
    e.printStackTrace();
}

相关问题