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>
필요한 경우보다 다양한 커서를 만드는 방법이기도합니다.
최신 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+에서만 작동합니다.
업데이트 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
속성!
이 답변은 변경하는 방법을 보여줍니다 ......
- 결론 선 색상
- 커서 색
- 커서 포인터 색상 (사용자 정의 이미지를
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
'development' 카테고리의 다른 글
원격 저장소는 이미 새로운 저장소에 대한 'git push'에 존재합니다. (0) | 2020.02.13 |
---|---|
최대 업로드 파일 크기 변경 (0) | 2020.02.13 |
MySQL : @ 변수와 변수 (0) | 2020.02.13 |
이 프로그램이 왜 유효합니까? (0) | 2020.02.13 |
HTML에서 단어 줄 바꿈을 해제하는 방법은 무엇입니까? (0) | 2020.02.13 |