development

EditText 커서 색상 설정

big-blog 2020. 2. 13. 00:47
반응형

EditText 커서 색상 설정


태블릿 프로젝트에서 Android의 Holo 테마를 사용하는 경우이 문제가 있습니다. 그러나 화면에 흰색 배경을 가진 조각이 있습니다. EditText이 조각에 구성 요소를 추가하고 있습니다. Holo.Light 테마 리소스의 배경을 설정하여 테마를 재정의하려고했습니다. 그러나 텍스트 커서 (캐럿)는 흰색으로 유지되어 화면에 보이지 않습니다 (편집 텍스트 필드에서 희미하게 볼 수 있습니다.).

누구든지 EditText가 더 어두운 커서 색상을 사용하도록하는 방법을 알고 있습니까? "@android:style/Widget.Holo.Light.EditText"긍정적 인 결과없이 EditText 스타일을 설정하려고했습니다 .


설정 android:textCursorDrawable특성은하기 @null의 사용을 초래한다 android:textColor커서 색상으로.

"textCursorDrawable"속성은 API 레벨 12 이상에서 사용 가능합니다.


레이아웃에서

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

그런 다음 drawable 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 속성에 흰색 커서가 있습니다.


마치 모든 대답이 덤불 주위를 돌아 다니는 것처럼 보입니다.

에서 다음 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>

필요한 경우보다 다양한 커서를 만드는 방법이기도합니다.


최신 Appcompactv21 에서 커서 색상을 변경하는 새로운 방법 이 있습니다. 다음과 같이 스타일을
변경 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+에서만 작동합니다.
업데이트 2 : 작동 가능한 최소 안드로이드 버전을 잘 모르겠습니다.
안드로이드 버전으로 테스트 :

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

나는 답을 찾았다 :)

테마의 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 이 여기에 핵심입니다.


EditText커서 색상을 동적으로 설정해야하는 사람은 아래에서이를 달성하는 두 가지 방법을 찾을 수 있습니다.


먼저 커서 드로어 블을 만듭니다.

<?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/widget/TextView.java#L562-564 "> 소스) :

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) {
    }
}

파티에 늦게, 여기 내 대답이 있습니다.

이것은하는 사람들을위한 하지 을 변경하고자하는 colorAccent부모 테마로하지만, 변화를 원하는 EditText속성!

이 답변은 변경하는 방법을 보여줍니다 ......

  1. 결론 선 색상
  2. 커서 색
  3. 커서 포인터 색상 (사용자 정의 이미지를 EditText사용했습니다 ) ..... 활동 테마에 적용된 스타일 사용.

여기에 이미지 설명을 입력하십시오

<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>

Edittext cursor color you want changes your color.
   <EditText  
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    android:textCursorDrawable="@drawable/color_cursor"
    />

그런 다음 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>

나를 위해 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>

editText 스타일 안에 넣은 @null에 android : textCursorDrawable 속성을 가져 왔습니다. 이것을 사용해 보았을 때 색상이 변하지 않았습니다.


와우 나는이 파티에 늦었지만 활동이 17 일 전에 있었다. 우리는 답변에 사용중인 Android 버전을 게시하는 것을 고려해야하므로 현재이 답변은 Android 2.1 이상에서 작동합니다 .RES /로 이동 값 / 스타일을 입력하고 아래 코드 줄을 추가하면 커서가 검은 색이됩니다.

    <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>

왜 이것을 늦게 게시해야합니까? 안드로이드가 된 많은 몬스터들에게 어떤 형태의 카테고리를 고려하는 것이 좋을 수도 있습니다!


여기서 @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);
    }
}

editcolor.xml

android:textCursorDrawable="@drawable/editcolor"

XML 파일의 색상 코드 설정 edittext배경 색상을


활동의 주제를 변경하는 유일한 올바른 대답은 다음과 같습니다. to를 <item name="colorAccent">#000000</item>사용하면 안됩니다 . 커서를 끌어 오려는 경우 커서 자체에만 관련되고 커서 아래의 핀에는 영향을 미치지 않기 때문입니다. 테마 솔루션이 가장 심각한 솔루션입니다.android:textCursorDrawable@null


또 다른 간단한 해결책은 프로젝트 폴더에서 res> values> colors.xml로 이동하여 원하는 색상의 색상 악센트 값을 편집하는 것

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

위의 코드는 커서를 검은 색으로 바꿉니다.


그것보다 훨씬 쉽습니다.

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

이것은 ICS 이상에서 작동합니다. 다른 버전에서는 테스트하지 않았습니다.


이것을 사용하십시오

android : textCursorDrawable = "@ color / white"


특정 색상을 원하십니까? AppCompatEditText사용해야하고 backround는 null을 설정 해야합니다.

나를 위해 일한다

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

이 요점을 참조하십시오


<!-- 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의 색상을 변경하면 간단합니다.


그것은 colorAccent안드로이드 에서 호출 됩니다.

res-> values-> styles.xml로 이동하십시오.

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

존재하지 않는 경우.


스타일을 사용하고 구현하는 경우

colorControlActivate

색상 / 흰색 이외의 다른 값으로 교체하십시오.


레이아웃에서 아래 코드를 사용할 수 있습니다

android:textCursorDrawable="@color/red"
        android:textColor="@color/black

참고 URL : https://stackoverflow.com/questions/7238450/set-edittext-cursor-color



반응형