Android appcompat-v7 : 21.0.0 재질 확인란 색상 변경
최신 appcompat 지원 라이브러리를 사용하도록 프로젝트를 업데이트했으며 새 버전은 머티리얼 디자인 확인란과 라디오 버튼을 사용합니다. 내 앱은 어두운 테마이고 체크 박스는 검은 색으로 잘 보이지 않습니다. 호환성 유지 에 따라 색상을 변경하려고 했지만 지금까지는 아무것도 작동하지 않습니다.
res / values / styles.xml
<style name="AppBaseTheme" parent="@style/Theme.AppCompat.Light">
<!-- customize the color palette -->
<item name="colorAccent">@color/silver</item>
</style>
build.gradle에서 :
android {
compileSdkVersion 21
buildToolsVersion '21.1.1'
defaultConfig {
minSdkVersion 9
targetSdkVersion 19
}
}
.....
.....
compile 'com.android.support:appcompat-v7:21.0.0'
AndroidManifest.xml :
<application
android:name="ee.mtakso.App"
android:allowBackup="true"
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppBaseTheme">
확인란, editTexts, 라디오 버튼 등은 검은 색으로 유지됩니다.
편집하다
이것이 큰 차이가 있는지 모르겠지만 내가 사용하는 라디오 버튼과 확인란 CheckedTextView
은 다음과 같이.
단일 (라디오 버튼) : android:checkMark="?android:attr/listChoiceIndicatorSingle"
다중 (확인란) : android:checkMark="?android:attr/listChoiceIndicatorMultiple"
이것들은 검은 색 소재의 드로어 블을 가져 오기 때문에 문제가 발생한다고 생각하지 않습니다.
확인되지 않은 CheckBoxes 및 RadioButtons 와 비슷한 문제가 있습니다. 컨트롤이 "꺼짐"색상을 가져 오는 것을 알았을 때 해결책을 찾았습니다.
<item name="android:textColorSecondary">@color/secondary_text</item>
편집하다:
앱 또는 활동의 테마가 L의 AppCompat (Dark / Light / Light.DarkActionBar) 중 하나를 상속하는 경우 다음을 설정할 수 있습니다.
<style name="SampleTheme" parent="Theme.AppCompat">
<item name="colorAccent">@color/green</item>
<item name="android:textColorSecondary">@color/red</item>
</style>
그 결과 :
주의 : 다른 효과를 얻으면 아마도 "잘못된" 테마를 사용하고있을 것입니다. 올바르게 설정했는지 확인하십시오.
나는 이것이 AppCompat 테마의 오류라고 생각합니다. 내 해결 방법은 xml 레이아웃 파일의 각 CheckBox에 두 줄의 코드를 추가합니다.
android:button="@drawable/abc_btn_check_material"
android:buttonTint="@color/colorAccent"
참조 abc_ 드로어 블을 직접 지정하고 싶지는 않지만이 경우에는 다른 해결책을 찾지 못했습니다.
이것은 RadioButton 위젯에도 적용됩니다! 당신은 사용하는 것이 abc_btn_radio_material 대신 abc_btn_check_material
최소한 확인란의 테두리를 변경하기 위해 이렇게했습니다.
<style name="checkBoxComponent" parent="AppTheme">
//Checked color
<item name="colorAccent">@color/blueBackground</item>
//Checkbox border color
<item name="android:textColorSecondary">@color/grayBorder</item>
</style>
그리고 내 레이아웃에서
<android.support.v7.widget.AppCompatCheckBox
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:theme="@style/checkBoxComponent"
android:text="Yay" />
그래도 확인란의 배경을 얻는 방법을 알아내는 중입니다. 도움이 되었기를 바랍니다.
당신과 같은 문제가있었습니다. AppCompat v21 — Pre-Lollipop 장치를위한 머티리얼 디자인을 다시 한 번 살펴 보았습니다 !
그리고 "모든 활동은 v4 지원 라이브러리의 FragmentActivity에서 확장 된 ActionBarActivity 에서 확장되어야 하므로 조각을 계속 사용할 수 있습니다." .
그래서 내 활동을 ActionBarActivity로 변경하고 내 문제를 해결했습니다. 당신도 해결되기를 바랍니다.
나는 해결책을 찾고 있었고 그것을 찾았습니다.
1 단계 :
ActionBarActivity 확장
public static class MyActivity extends ActionBarActivity {
//...
}
2 단계
스타일 파일에서 두 개의 값을 작성합니다.
<style name="MyTheme" parent="Theme.AppCompat.NoActionBar">
<item name="colorAccent">#009688</item>
<item name="android:textColorSecondary">#757575</item>
</style>
colorAccent- 체크 색상
android : textColorSecondary- 체크되지 않은 색상
3 단계
AndroidManifest.xml에서 테마 설정
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.test.radiobutton"
android:versionCode="1"
android:versionName="1.0">
<application android:label="@string/app_name" android:icon="@drawable/ic_launcher">
....
<activity android:name=".activity.MyActivity "
android:theme="@style/MyTheme"/>
.....
</application>
</manifest>
결과
Android 5
Android 4.2.2
1. styles.xml 파일에서 사용자 정의 스타일을 선언하십시오.
<style name="CustomStyledRadioButton" parent="Theme.AppCompat.Light">
<item name="colorControlNormal">@color/red</item>
<item name="colorControlActivated">@color/red_pressed</item>
</style>
2. android : theme 속성을 통해이 스타일을 RadioButton에 적용합니다.
<RadioButton android:id="@+id/rb_option1"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:checked="true"
android:gravity="left"
android:lineSpacingExtra="10dp"
android:padding="10dp"
android:text="Option1"
android:textColor="@color/black"
android:theme="@style/CustomStyledRadioButton"/>
100 % 작동
RadioButton의 스타일을 만들고 아래와 같이 colorAccent를 변경하십시오.
<style name="RadioButtonTeal" parent="Theme.AppCompat.Light.NoActionBar">
<item name="colorAccent">@color/md_teal_600</item>
</style>
그런 다음 AppCompatRadioButton에이 스타일을 추가하기 만하면됩니다.
<android.support.v7.widget.AppCompatRadioButton
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:theme="@style/RadioButtonTeal" />
색상을 지정하려면 다음을 재정의하십시오.
체크 색상 :
<item name="android:colorControlActivated">@color/your_color</item>
고정되지 않은 색상 :
<item name="android:colorControlNormal">@color/your_color</item>
확인란과 라디오 버튼이 모두있는 호환성 라이브러리에 많은 문제가 발생합니다.
1) They come only in black for any Android 4.x devices. They come ok in Android 5.x and 2.x (don't ask me why it works on 2.x, have no clue).
2) They don't have a disabled state (doesn't matter if all your checkboxes are enabled, otherwise you're good for a very bad surprise).
Note that the default dark theme background is grey, not black, so if you keep default it's "ok".
To solve this I created the white and a disabled version of the following drawables, all added to my core project, but not in the compat project (for obvious maintenance purpose):
abc_btn_check_to_on_mtrl_000
abc_btn_check_to_on_mtrl_015
abc_btn_radio_to_on_mtrl_000
abc_btn_radio_to_on_mtrl_015
Then created a drawable to manage all states (to override compat original state):
For example, the dark theme will use this:
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_enabled="false" android:state_checked="true" android:drawable="@drawable/abc_btn_check_to_on_mtrl_015_disabled" />
<item android:state_enabled="true" android:state_checked="true" android:drawable="@drawable/abc_btn_check_to_on_mtrl_015" />
<item android:state_enabled="true" android:drawable="@drawable/abc_btn_check_to_on_mtrl_000" />
<item android:drawable="@drawable/abc_btn_check_to_on_mtrl_000_disabled" />
</selector>
The light theme will use this (user can switch theme in my app):
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_enabled="false" android:state_checked="true" android:drawable="@drawable/abc_btn_check_to_on_mtrl_015_disabled" />
<item android:state_enabled="true" android:state_checked="true" android:drawable="@drawable/abc_btn_check_to_on_mtrl_015_light" />
<item android:state_enabled="true" android:drawable="@drawable/abc_btn_check_to_on_mtrl_000_light" />
<item android:drawable="@drawable/abc_btn_check_to_on_mtrl_000_disabled" />
</selector>
Then all I had to do is override the default compat theme (both activity and dialog, for both light/dark themes), adding something like this:
<item name="android:listChoiceIndicatorSingle">@drawable/abc_btn_radio_material</item>
<item name="android:listChoiceIndicatorMultiple">@drawable/abc_btn_check_material</item>
And this for light themes:
<item name="android:listChoiceIndicatorSingle">@drawable/abc_btn_radio_material_light</item>
<item name="android:listChoiceIndicatorMultiple">@drawable/abc_btn_check_material_light</item>
Now I've got fully operational check boxes and radios on every Android versions! IMO the compat library was not tested at all for dark theme, only white theme were used. Disabled state is likely never used by the dev of the compat lib either.
Just extend the ActionBarActivity like so:
Public class MainActivity extends ActionBarActivity {
//...
}
What you did should work for according to android blog post :
colorAccent : Bright complement to the primary branding color. By default, this is the color applied to framework controls (via colorControlActivated).
colorControlActivated : The color applied to framework controls in their activated (ex. checked) state.
Maybe the problem is coming from your theme that has @style/Theme.AppCompat.Light as parent, try with just Theme.AppCompat :
<style name="AppBaseTheme" parent="Theme.AppCompat.Light">
<!-- customize the color palette -->
<item name="colorAccent">@color/silver</item>
</style>
If you want to change a specific checkbox background color (not the whole app), you can try this trick:
Create custom_checkbox.xml file for background in drawable folder:
<shape xmlns:android="http://schemas.android.com/apk/res/android">
<stroke android:width="14dp" android:color="@android:color/transparent" />
<solid android:color="#ffffff" /> //the intended color of the background
<corners android:radius="2dp" />
</shape>
and then set it as background of the checkbox:
<CheckBox
android:id="@+id/rebate_tnc_checkbox"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="@drawable/custom_checkbox" />
you can pass another theme to the construct of the alert dialog
<style name="RadioButton" parent="Theme.AppCompat.Light.Dialog.Alert">
<item name="colorControlNormal">@color/red</item>
<item name="colorControlActivated">@color/green</item>
</style>
and use that style in the constructor
new AlertDialog.Builder(getContext(), R.style.RadioButton);
The parent of your AppTheme is @style/Theme.AppCompat.Light
.
Change it to @style/Theme.AppCompat
.
Now your controls will be light on a dark background.
I am using appcompat library v21:
<style name="AppBaseTheme" parent="Theme.AppCompat.Light">
<item name="colorPrimary">@color/custom_color</item>
<item name="colorAccent">@color/custom_color</item>
</style>
The above style makes my checkbox to appear with material design (tested on android 5, 4.3, 4.1.1) but on android 2.3.3 appears with old checkbox style.
ComboBox를 손으로 만들려고하면 (new ComboBox () ...), 설정 한 내용에 관계없이 항상 검은 색이됩니다. compat 라이브러리가 손상되었다는 것이 분명하며 이에 대한 버그 보고서를 만들었습니다 : https://code.google.com/p/android/issues/detail?id=158020
이 구문을 추가하여 확인란 또는 라디오 버튼과 같은 위젯의 색상을 지정합니다. android : buttonTint = "@ color / silver"
더하다
<item name="android:textColorSecondary">@color/secondary_text</item>
style.xml 및 style.xml (v21)
'developer tip' 카테고리의 다른 글
Android의 스피너 배경 디자인 및 색상을 변경하는 방법은 무엇입니까? (0) | 2020.11.22 |
---|---|
부트 스트랩의 고정 바닥 글 (0) | 2020.11.22 |
부팅 할 시뮬레이터 장치를 확인할 수 없습니다. (0) | 2020.11.22 |
LocalDB SQL Server 2014 Express는 2 개의 인스턴스 (localdb) \ ProjectsV12 & (localdb) \ MSSQLLocalDB? (0) | 2020.11.21 |
팬더의 크기와 개수의 차이점은 무엇입니까? (0) | 2020.11.21 |