appcompat v7을 사용하여 Android 5 이하에서 일관된 모양을 얻습니다. 오히려 잘 작동합니다. 그러나 EditText의 결론 색상과 악센트 색상을 변경하는 방법을 알 수 없습니다. 가능합니까?
사용자 정의를 정의하려고 시도했지만 android:editTextStyle
(아래 참조) 전체 배경색 또는 텍스트 색상 만 변경했지만 결론이나 악센트 색상은 변경하지 못했습니다. 사용할 특정 속성 값이 있습니까? android:background
속성을 통해 사용자 정의 드로어 블 이미지를 사용해야 합니까? hexa로 색상을 지정할 수 없습니까?
<style name="Theme.App.Base" parent="Theme.AppCompat.Light.DarkActionBar">
<item name="android:editTextStyle">@style/Widget.App.EditText</item>
</style>
<style name="Widget.App.EditText" parent="Widget.AppCompat.EditText">
???
</style>
안드로이드 API 21 소스에 따르면, 머티리얼 디자인의 EditTexts는 colorControlActivated
및 을 사용하는 것으로 보입니다 colorControlNormal
. 따라서 이전 스타일 정의에서 이러한 속성을 재정의하려고 시도했지만 아무런 효과가 없습니다. 아마도 appcompat는 그것을 사용하지 않습니다. 불행히도, 머티리얼 디자인의 마지막 버전의 appcompat에 대한 소스를 찾을 수 없습니다.
답변
마지막으로 해결책을 찾았습니다. 그것은 단순히 값을 오버라이드 (override)으로 구성 colorControlActivated
, colorControlHighlight
그리고 colorControlNormal
당신 글고 스타일 앱 테마 정의하지. 그런 다음 원하는 활동에이 테마를 사용하십시오. 아래는 예입니다.
<style name="Theme.App.Base" parent="Theme.AppCompat.Light.DarkActionBar">
<item name="colorControlNormal">#c5c5c5</item>
<item name="colorControlActivated">@color/accent</item>
<item name="colorControlHighlight">@color/accent</item>
</style>
답변
누군가 단일 편집 텍스트 만 변경하려는 경우 답변이 필요하다고 생각했습니다. 나는 이렇게한다 :
editText.getBackground().mutate().setColorFilter(ContextCompat.getColor(context, R.color.your_color), PorterDuff.Mode.SRC_ATOP);
답변
하지만 로렌 솔루션이 올바른지, 그것은이의 하단 라인뿐만 아니라 이후의 주석에 설명 된대로 몇 가지 단점이 함께 제공 EditText
착색됩니다 만의 뒤로 버튼 Toolbar
, CheckBoxes
뿐만 아니라 등.
운 좋게도 몇 가지 새로운 가능성 v22.1
이 appcompat-v7
소개되었습니다. 이제 특정 테마를 하나의보기에만 지정할 수 있습니다. 변경 로그 에서 바로 :
툴바 스타일링에 app : theme을 사용하지 않습니다. 이제 모든 API 레벨 7 이상 디바이스에서 도구 모음에 android : theme을 사용할 수 있으며 , API 레벨 11 이상 디바이스에서 모든 위젯 에 대해 android : theme 지원 을 사용할 수 있습니다.
전역 테마에서 원하는 색상을 설정하는 대신 새 색상을 만들어에 지정합니다 EditText
.
예:
<style name="MyEditTextTheme">
<!-- Used for the bottom line when not selected / focused -->
<item name="colorControlNormal">#9e9e9e</item>
<!-- colorControlActivated & colorControlHighlight use the colorAccent color by default -->
</style>
<EditText
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:theme="@style/MyEditTextTheme"/>
답변
다음을 사용하여 XML로 변경할 수 있습니다.
참조 API> = 21 호환성의 경우 :
android:backgroundTint="@color/blue"
하위 API <21 호환성의 경우 :
app:backgroundTint="@color/blue"
답변
다음은 API <21 이상의 솔루션입니다.
Drawable drawable = yourEditText.getBackground(); // get current EditText drawable
drawable.setColorFilter(Color.GREEN, PorterDuff.Mode.SRC_ATOP); // change the drawable color
if(Build.VERSION.SDK_INT > 16) {
yourEditText.setBackground(drawable); // set the new drawable to EditText
}else{
yourEditText.setBackgroundDrawable(drawable); // use setBackgroundDrawable because setBackground required API 16
}
도움이되기를 바랍니다.
답변
허용되는 답변은 스타일별로 조금 더 있지만, 가장 효율적인 방법은 AppTheme 스타일에 다음과 같이 colorAccent 속성 을 추가하는 것입니다.
<style name="AppTheme.Base" parent="Theme.AppCompat.Light.NoActionBar">
<item name="colorAccent">@color/colorAccent</item>
<item name="android:editTextStyle">@style/EditTextStyle</item>
</style>
<style name="EditTextStyle" parent="Widget.AppCompat.EditText"/>
colorAccent 속성은 앱 전체에서 위젯 색조에 사용되므로 일관성에 사용해야합니다.
답변
당신이 사용하는 경우 appcompat-v7:22.1.0+
에는 사용할 수 DrawableCompat를 위젯의 착색에
public static void tintWidget(View view, int color) {
Drawable wrappedDrawable = DrawableCompat.wrap(view.getBackground());
DrawableCompat.setTint(wrappedDrawable.mutate(), getResources().getColor(color));
view.setBackgroundDrawable(wrappedDrawable);
}