10

我正在尝试更改 EditText 光标指针颜色(从原色蓝色变为白色),但没有解决方案适用于我的项目。我试图开发一个演示项目,其中相同的代码运行良好。此代码适用于 >=android 5.0

我不知道,哪个属性被我的值覆盖。我有两个选择来遇到这个问题:

  1. 找到控制该颜色值的属性。
  2. 页面加载时(在 onViewCreated 中)通过 java 代码更改颜色值。

请建议如何解决此问题。

样式.xml

<?xml version="1.0" encoding="utf-8"?>
<resources>

    <style name="my_text_layout_style">
        
        <item name="android:textColor">#FFF</item>
        <item name="android:textColorHint">#FFF</item>
      
        <item name="colorAccent">#FFF</item>
        <item name="colorControlNormal">#FFF</item>
        <item name="colorControlActivated">#FFF</item>

        <item name="colorControlHighlight">#FFF</item>

    </style>

    

    <style name="my_edit_text_style">
        <item name="colorAccent">#FFF</item>
        <item name="android:editTextStyle">@style/MyEditTextStyle</item>
    </style>

    <style name="MyEditTextStyle" parent="Widget.AppCompat.EditText" />
</resources>

布局.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:background="@color/base_disable_btn_bg_color"
    android:orientation="vertical">

    <android.support.design.widget.TextInputLayout
        android:layout_width="match_parent"
        android:hint="just a hint"
        app:hintTextAppearance="@style/my_text_layout_style"
        android:theme="@style/my_text_layout_style"
        android:layout_height="wrap_content">

        <android.support.design.widget.TextInputEditText
            android:layout_width="match_parent"
            android:theme="@style/my_edit_text_style"
            android:layout_height="wrap_content" />

    </android.support.design.widget.TextInputLayout>
</LinearLayout>

试图以编程方式添加视图但没有成功

AppLinearLayout appLinearLayout = (AppLinearLayout) view.findViewById(R.id.some_id);
EditText editText = new EditText(new ContextThemeWrapper(getContext(), R.style.AppTheme_Cursor));
ViewGroup.LayoutParams params = new ViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT);
editText.setLayoutParams(params);
appLinearLayout.addView(editText);

截屏

4

8 回答 8

3

试试这个链接。对我来说,它奏效了。drawables而且,您可以在SDK此处找到并修改: Android\sdk\platforms\YOUR_ANDROID_VERSION\data\res at drawables-*dpi.

你可以copy and modify随心所欲color/form

于 2016-12-20T13:02:40.670 回答
2

试试这个解决方案:

在 中使用此属性EditTextandroid:textCursorDrawable="@drawable/cursor_color"

drawable中,创建:cursor_color.xml

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android" >

<size android:width="1dp" />

<solid android:color="#c8c8c8" />

于 2016-12-20T10:55:20.363 回答
1

style/theme您可以为此创建自己的EditText并更改ColorAccent

<style name="EditTextColorCustom" parent="@style/AppBaseTheme">
    <!-- Customize your theme here. -->
    <item name="colorAccent">@color/colorAccent</item>
</style>

style在您的values-21文件夹中使用相同的内容。

于 2016-12-20T10:52:21.427 回答
1

attribute你的EditText

android:textCursorDrawable="@null"
于 2016-12-20T10:40:03.377 回答
1

我使用了它,它可以正确地与我一起使用。

<style name="edittext" parent="Theme.AppCompat.Light.DarkActionBar">
    <item name="colorControlNormal">@color/gray</item>
    <item name="colorControlActivated">@color/colorAccent</item>
    <item name="colorControlHighlight">@color/colorAccent</item>
    <item name="android:textColor">@color/white</item>
    <item name="android:textColorHint">@color/gray</item>
</style>

<EditText
            android:id="@+id/email"
            android:layout_width="250dp"
            android:layout_height="wrap_content"
            android:layout_gravity="center"
            android:layout_marginTop="30dp"
            android:gravity="center"
            android:hint="@string/email_address"
            android:inputType="textEmailAddress"
            android:padding="@dimen/padding_16"
            android:textColor="@color/white"
            android:textColorHint="@color/login_color"
            android:textCursorDrawable="@color/mdtp_white"
            android:theme="@style/edit" />
于 2017-01-03T10:32:34.200 回答
1

制作一个新的drawable.

在这里,cursor.xml

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

EditText像这样使用它:

 <EditText
      android:id="@+id/ed"
      android:layout_width="match_parent"
      android:layout_height="wrap_content"
      android:background="@drawable/roundedcornerwhite"
      android:hint="edit text"
      android:paddingBottom="10dp"
      android:paddingRight="10dp"
      android:paddingTop="10dp"
      android:maxLines="1"
      android:singleLine="true"
      android:imeOptions="actionNext"
      android:textColor="@color/colorPrimaryText"
      android:textColorHint="@color/hintcolor"
      android:textCursorDrawable="@drawable/cursor"
      android:textSize="16sp" />

更新:

只需制作一个新主题,例如-

<style name="themex" parent="Theme.AppCompat.Light.NoActionBar">

        <item name="colorPrimaryDark">#666666</item>
        <item name="android:listDivider">@color/white_pressed</item>
        <item name="colorPrimary">@color/colorIcons</item>
        <item name="android:textColor">#b6b6b6</item>
        <item name="android:windowDisablePreview">true</item>
        <item name="colorControlActivated">@color/olagreen</item>
        <item name="android:windowAnimationStyle">@null</item>

    </style>

这里 colorcontrolactivated 将是您问题的答案。并将此主题添加到您的活动中,并删除您在布局中为 edittext 提供的样式-

<activity
            android:name="youractivityname"
            android:parentActivityName="com.example.AboutUs"
            android:screenOrientation="portrait"
            android:theme="@style/themex"/>

更新:

如果那时不起作用,只需检查您的片段是否在活动内,并且您为该活动提供了正确的主题。该片段也将具有此主题。如果它不起作用,那么试试这个 -

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"

        android:id="@+id/mainlayout"
        style="@style/themex"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:background="@color/colorIcons"
        android:orientation="vertical"
        android:weightSum="2">

    </RelativeLayout> 

我希望这能帮到您。

于 2017-01-03T08:06:28.797 回答
0
<style name="my_edit_text_style">
    <item name="colorAccent">#FFF</item>
    <item name="android:editTextStyle">@style/MyEditTextStyle</item>
    <item name="colorAccent">#FFF</item>
    <item name="colorControlNormal">#FFF</item>
    <item name="colorControlActivated">#FFF</item>
</style>

这可能会对您有所帮助。

于 2017-01-03T11:36:52.190 回答
0

我在 SO 上结合了几个答案,并找到了最好的方法:

  1. 在您的 android sdk 文件夹 (\android-sdk\platforms\android-23\android.jar\res\drawable-hdpi-v4) 中查找原始可绘制对象 在此处输入图像描述

  2. 使用编辑器编辑这些图像并将它们放在您的可绘制文件夹中。

  3. 将以下行添加到您的样式中:

    <item name="android:textSelectHandle">@drawable/my_drawable_handle</item>
    <item name="android:textSelectHandleLeft">@drawable/my_drawable_handle_left</item>
    <item name="android:textSelectHandleRight">@drawable/my_drawable_handle_right</item>
    

结果:

在此处输入图像描述

于 2017-01-03T11:06:09.410 回答