J'ai ce problème où j'utilise le thème Holo d'Android sur un projet de tablette. Cependant, j'ai un fragment à l'écran qui a un fond blanc. J'ajoute un composant EditText
sur ce fragment. J'ai essayé de remplacer le thème en définissant l'arrière-plan des ressources de thème Holo.Light. Cependant, mon curseur de texte (carat) reste blanc et donc invisible à l’écran (je ne le vois que faiblement dans le champ edittext ..).
Est-ce que quelqu'un sait comment je peux amener EditText à utiliser une couleur de curseur plus sombre? J'ai essayé de définir le style de EditText sur "@Android:style/Widget.Holo.Light.EditText"
sans résultat positif.
Définir l'attribut Android:textCursorDrawable
sur @null
devrait entraîner l'utilisation de Android:textColor
comme couleur du curseur.
L'attribut "textCursorDrawable" est disponible dans les API de niveau 12 et supérieur.
Dans la mise en page
<EditText
Android:layout_width="match_parent"
Android:layout_height="wrap_content"
Android:textCursorDrawable="@drawable/color_cursor"
/>
Ensuite, créez XML xable: 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>
Vous avez un curseur de couleur blanche sur la propriété EditText.
On dirait que toutes les réponses vont autour des buissons.
Dans votre EditText
, utilisez la propriété:
Android:textCursorDrawable="@drawable/black_cursor"
et ajoutez le black_cursor.xml
dessinable à vos ressources, comme suit:
<?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>
C'est également le moyen de créer des curseurs plus divers, si vous en avez besoin.
Il existe un nouveau moyen de changer la couleur du curseur dans la dernière Appcompact
v21
Il suffit de changer colorAccent
dans un style comme ceci:
<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>
Appliquez ensuite ce style sur le thème ou les activités de votre application.
Mise à jour : cette méthode ne fonctionne que sur API 21+
Update 2 : Je ne suis pas sûr de la version minimale d'Android pour que cela puisse fonctionner.
Testé par la version Android:
2.3.7 - didn't work
4.4.4 - worked
5.0 - worked
5.1 - worked
J'ai trouvé la réponse :)
J'ai défini le style editText du thème sur:
<item name="Android:editTextStyle">@style/myEditText</item>
Ensuite, j'ai utilisé le dessin suivant pour définir le curseur:
`
<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 est la clé ici.
Pour tous ceux qui ont besoin de définir la couleur du curseur EditText
de manière dynamique, vous trouverez ci-dessous deux méthodes pour y parvenir.
Tout d’abord, créez votre curseur dessinable:
<?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>
Définissez l'ID de ressource que vous pouvez dessiner sur le curseur que vous avez créé (https://github.com/Android/platform_frameworks_base/blob/KitKat-release/core/Java/Android/widget/TextView.Java#L562-564"> source :
try {
Field f = TextView.class.getDeclaredField("mCursorDrawableRes");
f.setAccessible(true);
f.set(yourEditText, R.drawable.cursor);
} catch (Exception ignored) {
}
Pour modifier simplement la couleur du curseur pouvant être dessiné par défaut, vous pouvez utiliser la méthode suivante:
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) {
}
}
En retard à la fête, voici ma réponse,
Ceci est destiné aux personnes qui (pas} _ cherchent à changer la colorAccent
dans leur thème parent, mais veulent changer les attributs EditText
!
Cette réponse montre comment changer ......
- Couleur de fond
- Couleur du curseur
- Couleur du pointeur du curseur (j'ai utilisé mon image personnalisée) .......... de
EditText
en utilisant le style appliqué au thème Activité.
<Android.support.v7.widget.AppCompatEditText
Android:layout_width="match_parent"
Android:layout_height="wrap_content"
Android:text="Hey" />
Exemple:
<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>
Créez maintenant un dessin (edit_text_background
) et ajoutez une ressource xml pour l’arrière-plan! Vous pouvez personnaliser à votre guise!
<?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>
Maintenant, comme vous l'avez défini ce style dans votre thème d'activité.
Exemple :
Dans votre activité, vous avez un thème, définissez ce thème editText
personnalisé sur ce thème.
<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
<!-- Your Theme data -->
<item name="editTextStyle">@style/AppTheme.EditText</item> // inculude this
</style>
Edittext cursor color you want changes your color.
<EditText
Android:layout_width="fill_parent"
Android:layout_height="wrap_content"
Android:textCursorDrawable="@drawable/color_cursor"
/>
Puis créez drawalble 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>
Pour moi, j'ai modifié à la fois AppTheme et une valeur 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>
Voici les couleurs.xml
<?xml version="1.0" encoding="utf-8"?>
<resources>
<color name="yellow">#B7EC2A</color>
</resources>
J'ai sorti l'attribut Android: textCursorDrawable en @null que j'ai placé dans le style editText. Quand j'ai essayé d'utiliser ceci, les couleurs ne changeraient pas.
Wow, je suis vraiment en retard pour cette soirée mais elle a eu une activité il y a 17 jours Il semblerait que nous devions envisager de publier la version d'Android que nous utilisons pour obtenir une réponse. Cette réponse fonctionne désormais avec Android 2.1 et les versions ultérieures Allez à RES/VALUES/STYLES et ajoutez les lignes de code ci-dessous et votre curseur sera noir
<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>
Vous aurez besoin de cette ligne de code dans votre dossier RES/COLOR
<color name="color_Black">#000000</color>
Pourquoi poster ce retard? Il serait peut-être intéressant d’envisager certaines catégories de monstres qu’Android est devenu!
editcolor.xml
Android:textCursorDrawable="@drawable/editcolor"
Dans le fichier xml, définir le code de couleur de edittext
couleur
Ici @Jared Rummler set programmatique Version Drawable Color () adaptée pour fonctionner également sur 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);
}
}
si vous voulez une couleur spécifique, vous devez utiliser AppCompatEditText puis le jeu de fond null
travaille pour moi
<Android.support.v7.widget.AppCompatEditText
Android:background="@null"
Android:textCursorDrawable="@color/cursorColor"/>
Voir ce Gist
C'est encore plus facile que ça.
<style name="MyTextStyle">
<item name="Android:textCursorDrawable">#000000</item>
</style>
Cela fonctionne dans ICS et au-delà. Je ne l'ai pas testé dans d'autres versions.
utilisez ceci
Android: textCursorDrawable = "@ color/white"
Une autre solution simple consisterait à accéder à res> values> colors.xml dans le dossier de votre projet et à modifier la valeur de l’accent de couleur correspondant à la couleur de votre choix.
<color name="colorAccent">#000000</color>
Le code ci-dessus change votre curseur en noir.
cela s'appelle colorAccent
dans Android.
aller à res -> valeurs -> styles.xml add
<item name="colorAccent">#FFFFFF</item>
sinon existe.
<!-- 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" />
change t he color of colorAccent in styles.xm, that's it simple