web-dev-qa-db-ja.com

EditTextカーソルの色を設定

タブレットプロジェクトでAndroidのHoloテーマを使用しているところで、この問題が発生しています。しかし、画面に白い背景の断片があります。このフラグメントにEditTextコンポーネントを追加しています。 Holo.Lightテーマリソースの背景を設定してテーマを上書きするようにしました。しかし、私のテキストカーソル(カラット)は白いままなので、画面上では見えません(私はそれをエディットテキストフィールドでかすかに見分けられます).

誰かが私がどのように私が暗いカーソル色を使うためにEditTextを得ることができるかを知っていますか? EditTextのスタイルを"@Android:style/Widget.Holo.Light.EditText"に設定してみましたが、良い結果は得られませんでした。

462
dineth

Android:textCursorDrawable属性を@nullに設定すると、カーソルの色としてAndroid:textColorが使用されます。

属性 "textCursorDrawable"は、APIレベル12以上で使用可能です。

1039
Dean

レイアウト内

<EditText  
    Android:layout_width="match_parent" 
    Android:layout_height="wrap_content" 
    Android:textCursorDrawable="@drawable/color_cursor"
    />

次に、描画可能なxml:color_cursorを作成します。

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:Android="http://schemas.Android.com/apk/res/Android" >
    <size Android:width="3dp" />
    <solid Android:color="#FFFFFF"  />
</shape>

EditTextプロパティに白い色のカーソルがあります。

408
star18bit

すべての答えが茂みの中を回っているように見えます。

EditTextでは、次のプロパティを使用してください。

Android:textCursorDrawable="@drawable/black_cursor"

次のように、描画可能なblack_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="1dp" />
    <solid Android:color="#000000"/>
</shape>

必要であれば、これはより多様なカーソルを作成する方法でもあります。

57
Zach-M

最新のAppcompact v21でカーソルの色を変える新しい方法があります。
colorAccentを次のように変更してください。

 <style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
    <!-- Set theme colors from http://www.google.com/design/spec/style/color.html#color-color-palette-->

    <!-- colorPrimary is used for the default action bar background -->
    <item name="colorPrimary">#088FC9</item>

    <!-- colorPrimaryDark is used for the status bar -->
    <item name="colorPrimaryDark">#088FC9</item>

    <!-- colorAccent is used as the default value for colorControlActivated
         which is used to tint widgets -->
    <!-- THIS IS WHAT YOU'RE LOOKING FOR -->
    <item name="colorAccent">#0091BC</item> 
</style>

それからアプリのテーマやアクティビティにこのスタイルを適用します。

更新 :この方法はAPI 21+でのみ機能する
Update 2 :それが動作することができる最小のAndroidのバージョンがわからない。
Androidのバージョンによってテスト済み:

2.3.7 - didn't work
4.4.4 - worked
5.0 - worked
5.1 - worked
40
R4j

答えが見つかりました:)

テーマのeditTextスタイルを次のように設定しました。

<item name="Android:editTextStyle">@style/myEditText</item>

それから私はカーソルを設定するために次のドロウアブルを使用しました:

`

<style name="myEditText" parent="@Android:style/Widget.Holo.Light.EditText">
    <item name="Android:background">@Android:drawable/editbox_background_normal</item>
    <item name="Android:textCursorDrawable">@Android:drawable/my_cursor_drawable</item>
    <item name="Android:height">40sp</item>
</style>

`

Android:textCursorDrawable がここでの鍵です。

36
dineth

動的にEditTextカーソルの色を設定する必要がある人のために、以下にこれを達成する2つの方法があります。


まず、描画可能なカーソルを作成します。

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

    <solid Android:color="#ff000000" />

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

</shape>

カーソル描画可能リソースIDを、作成した描画可能オブジェクトに設定します(https://github.com/Android/platform_frameworks_base/blob/KitKat- release/core/Java /Android /ウィジェット/TextView.Java#L562-564"> source)。 :

try {
    Field f = TextView.class.getDeclaredField("mCursorDrawableRes");
    f.setAccessible(true);
    f.set(yourEditText, R.drawable.cursor);
} catch (Exception ignored) {
}

描画可能なデフォルトのカーソルの色を変更するだけの場合は、次の方法を使用できます。

public static void setCursorDrawableColor(EditText editText, int color) {
    try {
        Field fCursorDrawableRes = 
            TextView.class.getDeclaredField("mCursorDrawableRes");
        fCursorDrawableRes.setAccessible(true);
        int mCursorDrawableRes = fCursorDrawableRes.getInt(editText);
        Field fEditor = TextView.class.getDeclaredField("mEditor");
        fEditor.setAccessible(true);
        Object editor = fEditor.get(editText);
        Class<?> clazz = editor.getClass();
        Field fCursorDrawable = clazz.getDeclaredField("mCursorDrawable");
        fCursorDrawable.setAccessible(true);

        Drawable[] drawables = new Drawable[2];
        Resources res = editText.getContext().getResources();
        drawables[0] = res.getDrawable(mCursorDrawableRes);
        drawables[1] = res.getDrawable(mCursorDrawableRes);
        drawables[0].setColorFilter(color, PorterDuff.Mode.SRC_IN);
        drawables[1].setColorFilter(color, PorterDuff.Mode.SRC_IN);
        fCursorDrawable.set(editor, drawables);
    } catch (final Throwable ignored) {
    }
}
23
Jared Rummler

パーティーに遅れて、これが私の答えです、

これは、not彼らの親テーマのcolorAccentを変更しようとしているが、EditText属性を変更したいと思っている人のためのものです!)

この答えは変更方法をデモします......

  1. ボトムラインカラー
  2. カーソル色
  3. カーソルのポインタの色(カスタムイメージを使用しました)..............アクティビティテーマに適用されているスタイルを使用したEditText

enter image description here

<Android.support.v7.widget.AppCompatEditText
    Android:layout_width="match_parent"
    Android:layout_height="wrap_content"
    Android:text="Hey" />

例:

<style name="AppTheme.EditText" parent="@style/Widget.AppCompat.EditText">
    <item name="Android:textColor">@color/white</item>
    <item name="Android:textColorHint">#8AFFFFFF</item>
    <item name="Android:background">@drawable/edit_text_background</item> // background (bottom line at this case)
    <item name="Android:textCursorDrawable">@color/white</item>  // Cursor
    <item name="Android:textSelectHandle">@drawable/my_white_icon</item> // For pointer normal state and copy text state
    <item name="Android:textSelectHandleLeft">@drawable/my_white_icon</item>
    <item name="Android:textSelectHandleRight">@drawable/my_white_icon</item>
</style>

今度はdrawable(edit_text_background)を作成して背景用のリソースxmlを追加しましょう!必要に応じてカスタマイズできます。

<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:Android="http://schemas.Android.com/apk/res/Android">
    <item
        Android:bottom="0dp"
        Android:left="-3dp"   
        Android:right="-3dp"
        Android:top="-3dp">

        <shape Android:shape="rectangle">
            <stroke
                Android:width="1dp"
                Android:color="@color/white"/>
        </shape>
    </item>
    </layer-list>

これで、アクティビティテーマでこのスタイルを設定しました。

例:

あなたのアクティビティにはテーマがあり、このカスタムeditTextテーマをそれに設定します。

<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
    <!-- Your Theme data -->
    <item name="editTextStyle">@style/AppTheme.EditText</item> // inculude this
</style>
10
Charuක
Edittext cursor color you want changes your color.
   <EditText  
    Android:layout_width="fill_parent" 
    Android:layout_height="wrap_content" 
    Android:textCursorDrawable="@drawable/color_cursor"
    />

次に、描画可能なxmlを作成します。color_cursor

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:Android="http://schemas.Android.com/apk/res/Android" >
    <size Android:width="3dp" />
    <solid Android:color="#FFFFFF"  />
</shape>
8
influx

私はAppThemeと値のcolors.xmlの両方を修正しました。

<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
    <!-- Customize your theme here. -->
    <item name="colorControlNormal">@color/yellow</item>
    <item name="colorAccent">@color/yellow</item>
</style>

これはcolors.xmlです。

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <color name="yellow">#B7EC2A</color>
</resources>

私はAndroid:textCursorDrawable属性を@nullにしてeditTextスタイルの中に配置しました。私がこれを使ってみると、色は変わりません。

うわー、私はこのパーティーに遅刻しましたが、17日前に活動していますVALUES/STYLESを入力して以下のコード行を追加すると、カーソルが黒くなります

    <style name="AppTheme" parent="Theme.AppCompat.NoActionBar">
    <!--<style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">-->
    <!-- Customize your theme here. -->
    <item name="colorControlActivated">@color/color_Black</item>
    <!--Sets COLOR for the Cursor in EditText  -->
</style>

RES/COLORフォルダーにこのコード行が必要です。

<color name="color_Black">#000000</color>

なぜこれを遅く投稿するの? Androidがなっている多くの頭のモンスターのためにカテゴリのいくつかのフォームを考慮するのはいいかもしれません!

4
Grendel

editcolor.xml

Android:textCursorDrawable="@drawable/editcolor"

Xmlファイルでedittext背景色のカラーコードを設定

3
Avnish Titoriya

唯一の有効な答えは、アクティビティのテーマを変更することです。<item name="colorAccent">#000000</item>これはカーソル自体に関係するだけで、カーソルの下にあるピンをドラッグしたい場合は関係ないため、Android:textCursorDrawable@nullに使用しないでください。テーマ解決は最も深刻なものです。

2
JPhi Denis

ここで@ Jared RummlerのプログラムによるsetCursorDrawableColor()バージョンはAndroid 9 Pieでも動作するようになっています。

@SuppressWarnings({"JavaReflectionMemberAccess", "deprecation"})
public static void setCursorDrawableColor(EditText editText, int color) {

    try {
        Field cursorDrawableResField = TextView.class.getDeclaredField("mCursorDrawableRes");
        cursorDrawableResField.setAccessible(true);
        int cursorDrawableRes = cursorDrawableResField.getInt(editText);
        Field editorField = TextView.class.getDeclaredField("mEditor");
        editorField.setAccessible(true);
        Object editor = editorField.get(editText);
        Class<?> clazz = editor.getClass();
        Resources res = editText.getContext().getResources();
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.P) {
            Field drawableForCursorField = clazz.getDeclaredField("mDrawableForCursor");
            drawableForCursorField.setAccessible(true);
            Drawable drawable = res.getDrawable(cursorDrawableRes);
            drawable.setColorFilter(color, PorterDuff.Mode.SRC_IN);
            drawableForCursorField.set(editor, drawable);
        } else {
            Field cursorDrawableField = clazz.getDeclaredField("mCursorDrawable");
            cursorDrawableField.setAccessible(true);
            Drawable[] drawables = new Drawable[2];
            drawables[0] = res.getDrawable(cursorDrawableRes);
            drawables[1] = res.getDrawable(cursorDrawableRes);
            drawables[0].setColorFilter(color, PorterDuff.Mode.SRC_IN);
            drawables[1].setColorFilter(color, PorterDuff.Mode.SRC_IN);
            cursorDrawableField.set(editor, drawables);
        }
    } catch (Throwable t) {
        Log.w(TAG, t);
    }
}
2
Oliver Jonas

特定の色が必要ですか? AppCompatEditText 次にbackround set null

私のために働く

<Android.support.v7.widget.AppCompatEditText
    Android:background="@null"
    Android:textCursorDrawable="@color/cursorColor"/>

この要旨 を参照してください

1
ssdeno

もう1つの簡単な解決策は、プロジェクトフォルダのres> values> colors.xmlに移動して、カラーアクセントの値を好みの色に編集することです。

<color name="colorAccent">#000000</color>

上記のコードはカーソルを黒に変えます。

1
xwaxes

それよりもさらに簡単です。

<style name="MyTextStyle">
    <item name="Android:textCursorDrawable">#000000</item>
</style>

これはICS以降で動作します。他のバージョンではテストしていません。

1

これを使って

Android:textCursorDrawable = "@色/白"

1

これはAndroidではcolorAccentと呼ばれます。

res->値-> styles.xml addに移動します

<item name="colorAccent">#FFFFFF</item>

存在しない場合。

0
<!-- Base application theme. -->
<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
    <!-- Customize your theme here. -->
    <item name="colorPrimary">#36f0ff</item>
    <item name="colorPrimaryDark">#007781</item>
    <item name="colorAccent">#000</item>
</style>

<style name="AppTheme.NoActionBar">
    <item name="windowActionBar">false</item>
    <item name="windowNoTitle">true</item>
</style>

<style name="AppTheme.AppBarOverlay" parent="ThemeOverlay.AppCompat.Dark.ActionBar" />

<style name="AppTheme.PopupOverlay" parent="ThemeOverlay.AppCompat.Light" />

styles.xmのcolorAccentの色を変更する、それは簡単です

0
Abhishek Saini