재료 설계 및 AppCompat을 사용하는 Android의 컬러링 버튼
에 AppCompat
오늘 업데이트가 나왔습니다. 안드로이드 L에서는 버튼 색상을 변경할 수 있었지만 이전 버전에서는 변경할 수 없었습니다.새로운 AppCompat 업데이트를 포함한 후 두 버전의 색상을 변경할 수 없습니다. 시도하면 버튼이 사라집니다.단추 색깔을 어떻게 바꾸는지 아는 사람이 있습니까?
다음 사진은 내가 원하는 것을 보여줍니다.
흰색 버튼은 기본이고, 빨간색 버튼은 제가 원하는 것입니다.
이것은 제가 이전에 했던 것입니다.styles.xml
:
<item name="android:colorButtonNormal">insert color here</item>
동적으로 수행할 수 있습니다.
button.getBackground().setColorFilter(getResources().getColor(insert color here), PorterDuff.Mode.MULTIPLY);
또한 테마 부모를 변경했습니다.@android:style/Theme.Material.Light.DarkActionBar
Theme.AppCompat.Light.DarkActionBar
지원 도서관 rev.22(2015년 3월 13일 금요일)에 공식적으로 수정되었습니다.관련 Google 코드 문제를 참조하십시오.
https://issuetracker.google.com/issues/37008632
사용 예
theme.xml:
<item name="colorButtonNormal">@color/button_color</item>
v21/vmdk.xml
<item name="android:colorButtonNormal">@color/button_color</item>
편집(22.06.2016):
앱컴포트 라이브러리는 제가 원래 답변을 올린 후 자료 버튼을 지원하기 시작했습니다.이 게시물에서 상승 및 플랫 버튼의 가장 쉬운 구현을 볼 수 있습니다.
원본 답변:
그 앱컴포트는 아직 버튼을 지원하지 않기 때문에 xml을 배경으로 사용할 수 있습니다.그 과정에서 안드로이드의 소스 코드를 보고 스타일링 재료 버튼 관련 파일을 찾았습니다.
1 - 재료 버튼의 원래 구현을 소스에서 살펴봅니다.
안드로이드 소스 코드의 btn_default_material.xml을 확인합니다.
프로젝트 drawable-v21 폴더에 파일을 복사할 수 있습니다.하지만 여기서 색을 만지지 마세요.변경해야 할 파일은 두 번째 파일입니다.
drawable-v21/custom_btn.xml
<ripple xmlns:android="http://schemas.android.com/apk/res/android"
android:color="?attr/colorControlHighlight">
<item android:drawable="@drawable/btn_default_mtrl_shape" />
</ripple>
2 - 원래 재료 버튼의 모양을 얻습니다.
소스 코드의 이 파일에서 찾을 수 있는 이 드로잉 테이블 안에 사용된 모양이 있습니다.
<inset xmlns:android="http://schemas.android.com/apk/res/android"
android:insetLeft="@dimen/button_inset_horizontal_material"
android:insetTop="@dimen/button_inset_vertical_material"
android:insetRight="@dimen/button_inset_horizontal_material"
android:insetBottom="@dimen/button_inset_vertical_material">
<shape android:shape="rectangle">
<corners android:radius="@dimen/control_corner_material" />
<solid android:color="?attr/colorButtonNormal" />
<padding android:left="@dimen/button_padding_horizontal_material"
android:top="@dimen/button_padding_vertical_material"
android:right="@dimen/button_padding_horizontal_material"
android:bottom="@dimen/button_padding_vertical_material" />
</shape>
3 - 재료 버튼의 치수 가져오기
그리고 이 파일에는 여기서 찾을 수 있는 파일에서 사용된 몇 가지 차원이 있습니다.전체 파일을 복사하여 값 폴더에 넣을 수 있습니다.이는 모든 버튼에 동일한 크기(재료 버튼에 사용됨)를 적용하는 데 중요합니다.
4 - 이전 버전에 대해 그릴 수 있는 다른 파일 만들기
이전 버전의 경우 동일한 이름을 가진 다른 그림이 있어야 합니다.저는 참고하지 않고 직접 품목을 인라인에 넣는 것입니다.참조할 수도 있습니다.하지만 다시 말하지만, 가장 중요한 것은 재료 버튼의 원래 치수입니다.
그리기 가능/custom_btn.xml
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<!-- pressed state -->
<item android:state_pressed="true">
<inset xmlns:android="http://schemas.android.com/apk/res/android"
android:insetLeft="@dimen/button_inset_horizontal_material"
android:insetTop="@dimen/button_inset_vertical_material"
android:insetRight="@dimen/button_inset_horizontal_material"
android:insetBottom="@dimen/button_inset_vertical_material">
<shape android:shape="rectangle">
<corners android:radius="@dimen/control_corner_material" />
<solid android:color="@color/PRESSED_STATE_COLOR" />
<padding android:left="@dimen/button_padding_horizontal_material"
android:top="@dimen/button_padding_vertical_material"
android:right="@dimen/button_padding_horizontal_material"
android:bottom="@dimen/button_padding_vertical_material" />
</shape>
</inset>
</item>
<!-- focused state -->
<item android:state_focused="true">
<inset xmlns:android="http://schemas.android.com/apk/res/android"
android:insetLeft="@dimen/button_inset_horizontal_material"
android:insetTop="@dimen/button_inset_vertical_material"
android:insetRight="@dimen/button_inset_horizontal_material"
android:insetBottom="@dimen/button_inset_vertical_material">
<shape android:shape="rectangle">
<corners android:radius="@dimen/control_corner_material" />
<solid android:color="@color/FOCUSED_STATE_COLOR" />
<padding android:left="@dimen/button_padding_horizontal_material"
android:top="@dimen/button_padding_vertical_material"
android:right="@dimen/button_padding_horizontal_material"
android:bottom="@dimen/button_padding_vertical_material" />
</shape>
</inset>
</item>
<!-- normal state -->
<item>
<inset xmlns:android="http://schemas.android.com/apk/res/android"
android:insetLeft="@dimen/button_inset_horizontal_material"
android:insetTop="@dimen/button_inset_vertical_material"
android:insetRight="@dimen/button_inset_horizontal_material"
android:insetBottom="@dimen/button_inset_vertical_material">
<shape android:shape="rectangle">
<corners android:radius="@dimen/control_corner_material" />
<solid android:color="@color/NORMAL_STATE_COLOR" />
<padding android:left="@dimen/button_padding_horizontal_material"
android:top="@dimen/button_padding_vertical_material"
android:right="@dimen/button_padding_horizontal_material"
android:bottom="@dimen/button_padding_vertical_material" />
</shape>
</inset>
</item>
</selector>
결과
당신의 버튼은 롤리팝 장치에 파급 효과를 줄 것입니다.이전 버전의 버튼은 리플 효과를 제외하고는 완전히 동일합니다.그러나 여러 상태에 대해 그림 그리기 기능을 제공하기 때문에 터치 이벤트에도 반응합니다(예: 이전 방식).
이 기능은 AppCompat 라이브러리의 v23.0.0에서 향상되었으며 다음과 같은 더 많은 테마가 추가되었습니다.
Widget.AppCompat.단추.색이 있는
먼저 아직 appCompat 종속성을 포함합니다.
compile('com.android.support:appcompat-v7:23.0.0') {
exclude group: 'com.google.android', module: 'support-v4'
}
이제 앱 호환의 v23을 사용해야 하므로 SDK-v23도 대상으로 지정해야 합니다!
compileSdkVersion = 23
targetSdkVersion = 23
의 신의에서.values/theme
<item name="android:buttonStyle">@style/BrandButtonStyle</item>
의 신의에서.values/style
<style name="BrandButtonStyle" parent="Widget.AppCompat.Button.Colored">
<item name="colorButtonNormal">@color/yourButtonColor</item>
<item name="android:textColor">@color/White</item>
</style>
의 신의에서.values-v21/style
<style name="BrandButtonStyle" parent="Widget.AppCompat.Button.Colored">
<item name="android:colorButtonNormal">@color/yourButtonColor</item>
<item name="android:textColor">@color/White</item>
</style>
버튼 테마는 다음을 기반으로 하기 때문에Widget.AppCompat.Button.Colored
단추의 텍스트 색상은 기본적으로 흰색입니다!
하지만 버튼을 비활성화할 때 문제가 있는 것 같습니다. 버튼의 색상은 밝은 회색으로 변경되지만 텍스트 색상은 흰색으로 유지됩니다!
이 문제에 대한 해결 방법은 위에 표시된 스타일에서 수행한 것처럼 단추의 텍스트 색상을 흰색으로 설정하는 것입니다.
이제 간단히 버튼을 정의하고 AppCompat이 나머지를 수행하도록 할 수 있습니다 :)
<Button
android:layout_width="200dp"
android:layout_height="48dp" />
사용 안 함 상태
사용 가능 상태
편집:
추가하기<Button android:theme="@style/BrandButtonStyle"/>
22은 Android 지원 22.1.0을 .Button
정의하는 또 다른 은 단추의 배경색을 입니다.backgroundTint
기여하다.
예를들면,
<Button
android:id="@+id/add_remove_button"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:backgroundTint="@color/bg_remove_btn_default"
android:textColor="@android:color/white"
tools:text="Remove" />
색상이 지정된 버튼을 지원하려면 최신 AppCompat 라이브러리(>23.2.1)를 사용하여 다음 작업을 수행합니다.
bullet - XML
AppComp 위젯:
android.support.v7.widget.AppCompatButton
AppCompat 스타일:
style="@style/Widget.AppCompat.Button.Colored"
NB! 사용자 지정 색상을 xml로 설정하려면: 특성을 사용합니다.app
에 android
(사용)alt+enter
또는 선언합니다.xmlns:app="http://schemas.android.com/apk/res-auto"
용할을 app
)
앱:backgroundTint="@color/your_custom_color"
예:
<android.support.v7.widget.AppCompatButton
style="@style/Widget.AppCompat.Button.Colored"
app:backgroundTint="@color/your_custom_color"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Colored Button"/>
또는 프로그래밍 방식으로 설정 - JAVA
ViewCompat.setBackgroundTintList(your_colored_button,
ContextCompat.getColorStateList(getContext(),R.color.your_custom_color));
최신 지원 라이브러리를 사용하면 다음에서 작업을 상속할 수 있습니다.AppCompatActivity
그래서 그것은 당신을 부풀릴 것입니다.Button
~하듯이AppCompatButton
그리고 레이아웃의 모든 버튼의 색상을 사용하여 스타일을 지정할 수 있는 기회를 제공합니다.android:theme="@style/SomeButtonStyle"
서, 디에어SomeButtonStyle
다음과 같습니다.
<style name="SomeButtonStyle" parent="@android:style/Widget.Button">
<item name="colorButtonNormal">@color/example_color</item>
</style>
2.3.7, 4.4.1, 5.0.2에서 근무했습니다.
당신이 아래 스타일을 원한다면
단추에 이 스타일을 추가
style="@style/Widget.AppCompat.Button.Borderless.Colored"
이 스타일을 원하신다면
아래 코드 추가
style="@style/Widget.AppCompat.Button.Colored"
답은 스타일이 아닌 테마에 있습니다.
문제는 버튼 색상이 테마의 버튼 일반 색상에 고착되어 있다는 것입니다.저는 여러 가지 방법으로 스타일을 바꾸려고 노력했지만 실패했습니다.그래서 버튼 테마를 바꿨습니다.
colorButtonNormal 및 colorPrimary로 테마 만들기:
<style name="ThemeAwesomeButtonColor" parent="AppTheme">
<item name="colorPrimary">@color/awesomePrimaryColor</item>
<item name="colorButtonNormal">@color/awesomeButtonColor</item>
</style>
단추에서 이 테마 사용
<Button
android:id="@+id/btn_awesome"
style="@style/AppTheme.Button"
android:theme="@style/ThemeAwesomeButtonColor"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="@string/btn_awesome"/>
"앱 테마".단추"는 확장된 모든 것이 될 수 있습니다. 여기와 같은 단추 스타일입니다. 텍스트 색상은 기본 색상을 사용합니다.
<style name="AppTheme.Button" parent="Base.Widget.AppCompat.Button">
...
<item name="android:textColor">?attr/colorPrimary</item>
...
</style>
재료 디자인과 호환되는 어떤 색상이든 버튼을 사용할 수 있습니다.
버튼 색상과 리플 색상을 쉽게 수정할 수 있는 안드로이드 라이브러리를 방금 만들었습니다.
https://github.com/xgc1986/RippleButton
<com.xgc1986.ripplebutton.widget.RippleButton
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/btn"
android:text="Android button modified in layout"
android:textColor="@android:color/white"
app:buttonColor="@android:color/black"
app:rippleColor="@android:color/white"/>
원하는 모든 단추에 대해 다른 색상으로 스타일을 만들 필요가 없으므로 색상을 임의로 사용자 지정할 수 있습니다.
안드로이드 + 4.0에서 앱 compat-v7:22.2.0으로 나를 위한 이 작업.
style.xml에서
<style name="Button.Tinted" parent="Widget.AppCompat.Button">
<item name="colorButtonNormal">YOUR_TINT_COLOR</item>
<item name="colorControlHighlight">@color/colorAccent</item>
<item name="android:textColor">@android:color/white</item>
</style>
레이아웃 파일에서
<Button
android:id="@+id/but_next"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="@string/but_continue"
android:theme="@style/Button.Tinted" />
레이아웃:
<android.support.v7.widget.AppCompatButton
style="@style/MyButton"
...
/>
styles.xml:
<style name="MyButton" parent="Widget.AppCompat.Button.Colored">
<item name="backgroundTint">@color/button_background_selector</item>
<item name="android:textColor">@color/button_text_selector</item>
</style>
color/button_background_background.xml:
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_enabled="false" android:color="#555555"/>
<item android:color="#00ff00"/>
</selector>
color/button_text_text.xml:
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_enabled="false" android:color="#888888"/>
<item android:color="#ffffff"/>
</selector>
를 사용하는 사용자의 경우ImageButton
방법은 다음과 같습니다.
style.xml에서:
<style name="BlueImageButton" parent="Base.Widget.AppCompat.ImageButton">
<item name="colorButtonNormal">@color/primary</item>
<item name="android:tint">@color/white</item>
</style>
v21/style.xml에서:
<style name="BlueImageButton" parent="Widget.AppCompat.ImageButton">
<item name="android:colorButtonNormal">@color/primary</item>
<item name="android:tint">@color/white</item>
</style>
그런 다음 레이아웃 파일에서 다음 작업을 수행합니다.
<android.support.v7.widget.AppCompatImageButton
android:id="@+id/my_button"
android:theme="@style/BlueImageButton"
android:layout_width="42dp"
android:layout_height="42dp"
android:layout_gravity="center_vertical"
android:src="@drawable/ic_check_black_24dp"
/>
colorButtonNormal과 함께 스타일 솔루션을 사용하는 경우 Widget에서 상속하는 것을 잊지 마십시오.AppCompat.단추.리플 효과가 작동하도록 색상 지정 ;)
맘에 들다
<style name="CustomButtonStyle" parent="Widget.AppCompat.Button.Colored">
<item name="colorButtonNormal">@android:color/white</item>
</style>
저는 이거 써요.리플 효과 및 버튼 클릭 섀도우 작동.
style.xml
<style name="Button.Red" parent="Widget.AppCompat.Button.Colored">
<item name="android:textColor">@color/material_white</item>
<item name="android:backgroundTint">@color/red</item>
</style>
레이아웃의 버튼:
<Button
style="@style/Button.Red"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="@string/close"/>
AppCompatButton을 사용하는 또 다른 간단한 솔루션
<android.support.v7.widget.AppCompatButton
android:layout_width="wrap_content"
android:layout_height="wrap_content"
style="@style/Widget.AppCompat.Button.Colored"
app:backgroundTint="@color/red"
android:text="UNINSTALL" />
사용:
android:backgroundTint="@color/customColor"
또는 심지어:
android:background="@color/customColor"
그리고 그것은 버튼에 사용자 지정 색상을 줄 것입니다.
"평판" 재료 단추만 원하는 경우 선택 가능한 도구를 사용하여 배경을 사용자 정의할 수 있습니다.항목배경 특성은 여기에 설명되어 있습니다.
단일 단추의 색을 변경하려면
ViewCompat.setBackgroundTintList(button, getResources().getColorStateList(R.color.colorId));
저에게 문제는 안드로이드 5.0에서android:colorButtonNormal
효과도 없었고, 사실, 주제에서 나온 항목도 없었습니다.android:colorAccent
예를 들어 Android 4.4.3에서는 실행했습니다.프로젝트가 다음으로 구성되었습니다.compileSdkVersion
그리고.targetSdkVersion
22까지, 그래서 저는 @Muhammad Alfaifi가 제안한 대로 모든 변경을 했지만, 결국, 저는 문제가 빌드라는 것을 알아차렸습니다.도구 버전, 업데이트되지 않았습니다.23.0.1로 변경하면 모든 것이 거의 정상적으로 작동하기 시작합니다.자, 이제.android:colorButtonNormal
여전히 효과가 없지만 적어도 버튼은 반응합니다.android:colorAccent
저로서는 받아들일 수 있는 것입니다.
이 힌트가 누군가에게 도움이 되었으면 좋겠습니다.참고: 버튼의 특성상 버튼에 직접 스타일을 적용하였습니다.android:theme=[...]
또한 효과가 없었습니다.
이를 실현하는 한 가지 방법은 앱의 모든 버튼을 동일하게 테마로 지정하지 않고 스타일을 가리킬 수 있게 해줍니다.
memes.xml을 합니다.
<style name="Theme.MyApp.Button.Primary.Blue" parent="Widget.AppCompat.Button">
<item name="colorButtonNormal">@color/someColor</item>
<item name="android:textColorPrimary">@android:color/white</item>
</style>
이제 styles.xml 추가
<style name="MyApp.Button.Primary.Blue" parent="">
<item name="android:theme">@style/Theme.MyApp.Button.Primary.Blue</item>
</style>
이제 레이아웃에서 버튼의 스타일을 가리킵니다.
<Button
...
style="@style/MyApp.Button.Primary.Blue"
... />
갱신하다
아래와 같이 설계 지원 라이브러리(23.2.0) 및 앱 호환 위젯을 사용합니다.
Android 지원 라이브러리 22.1에서:
이는 레이아웃을 부풀릴 때 자동으로 수행됩니다. 즉, 버튼을 AppCompatButton으로, TextView를 AppCompatTextView로 대체하여 각각이 색조를 지원할 수 있도록 합니다.이번 릴리스에서는 이러한 색조 인식 위젯을 공개적으로 사용할 수 있으므로 지원되는 위젯 중 하나를 하위 분류해야 하는 경우에도 색조 지원을 계속할 수 있습니다.
색조 인식 위젯의 전체 목록:
AppCompatAutoCompleteTextView
AppCompatButton
AppCompatCheckBox
AppCompatCheckedTextView
AppCompatEditText
AppCompatMultiAutoCompleteTextView
AppCompatRadioButton
AppCompatRatingBar
AppCompatSpinner
AppCompatTextView
AppCompat(일명 ActionBarCompat)은 Gingerbread에서 실행되는 장치용 Android 4.0 ActionBar API의 백포트로 시작하여 백포트된 구현 및 프레임워크 구현 위에 공통 API 계층을 제공합니다.AppCompat v21은 Android 5.0과 함께 최신 API 및 기능 세트를 제공합니다.
위젯과 같은 AppCompat 스타일을 사용하려는 경우.AppCompat.버튼, 베이스.위젯.AppCompat.단추.색상 등이 지정된 스타일은 지원 라이브러리의 호환되는 보기와 함께 사용해야 합니다.
아래 코드는 사전 롤리팝 장치에 적용되지 않습니다.
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:theme="@style/Widget.AppCompat.Button" />
AppCompatButton을 사용하여 AppCompat 스타일을 활성화해야 합니다.
<android.support.v7.widget.AppCompatButton
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:theme="@style/Widget.AppCompat.Button" />
저는 사실 제 커스텀 버튼 스타일의 변경을 원하지 않았지만 불행히도 더 이상 작동하지 않았습니다.
내 앱은 minSdkVersion 9를 가지고 있고 모든 것이 이전에 작동했습니다.
이유는 모르겠지만 안드로이드를 제거한 이후로: 버튼 앞에 Style이 다시 작동하는 것 같습니다.
이제 = 작동 중:
<item name="buttonStyle">@style/ButtonmyTime</item>
= 앞에는 회색 재료 버튼만 있습니다.
<item name="android:buttonStyle">@style/ButtonmyTime</item>
제 버튼이 상당히 평평하고 모든 안드로이드 버전에서 동일하게 보여야 하기 때문에 새로운 안드로이드 버전을 위한 특별한 폴더가 없습니다.
아마도 누군가가 제가 왜 "안드로이드"를 제거해야 했는지 말해줄 수 있을 것입니다. 이미지 버튼은 여전히 "안드로이드:"와 함께 작동합니다.
<item name="android:imageButtonStyle">@style/ImageButtonmyTimeGreen</item>
이틀 동안 답을 찾았지만 API < 21에서 버튼밍이 작동하지 않았습니다.
나의 유일한 해결책은 AppCompatButton 색조를 기본 앱 테마 "colorButtonNormal"뿐만 아니라 다음과 같은 뷰 배경Tint로 재정의하는 것입니다.
public class AppCompatColorButton extends AppCompatButton {
public AppCompatColorButton(Context context) {
this(context, null);
}
public AppCompatColorButton(Context context, AttributeSet attrs) {
this(context, attrs, android.support.v7.appcompat.R.attr.buttonStyle);
}
public AppCompatColorButton(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
if (TintManager.SHOULD_BE_USED) {
setSupportBackgroundTintList(createButtonColorStateList(getContext(), attrs, defStyleAttr));
}
}
static final int[] DISABLED_STATE_SET = new int[]{-android.R.attr.state_enabled};
static final int[] FOCUSED_STATE_SET = new int[]{android.R.attr.state_focused};
static final int[] PRESSED_STATE_SET = new int[]{android.R.attr.state_pressed};
static final int[] EMPTY_STATE_SET = new int[0];
private ColorStateList createButtonColorStateList(Context context, AttributeSet attrs, int defStyleAttr) {
final int[][] states = new int[4][];
final int[] colors = new int[4];
int i = 0;
final int themeColorButtonNormal = ThemeUtils.getThemeAttrColor(context, android.support.v7.appcompat.R.attr.colorButtonNormal);
/*TypedArray a = context.obtainStyledAttributes(attrs, new int[] { android.R.attr.backgroundTint }, defStyleAttr, 0);
final int colorButtonNormal = a.getColor(0, themeColorButtonNormal);*/
TypedArray a = context.obtainStyledAttributes(attrs, android.support.v7.appcompat.R.styleable.View, defStyleAttr, 0);
final int colorButtonNormal = a.getColor(android.support.v7.appcompat.R.styleable.View_backgroundTint, themeColorButtonNormal);
a.recycle();
final int colorControlHighlight = ThemeUtils.getThemeAttrColor(context, android.support.v7.appcompat.R.attr.colorControlHighlight);
// Disabled state
states[i] = DISABLED_STATE_SET;
colors[i] = ThemeUtils.getDisabledThemeAttrColor(context, android.support.v7.appcompat.R.attr.colorButtonNormal);
i++;
states[i] = PRESSED_STATE_SET;
colors[i] = ColorUtils.compositeColors(colorControlHighlight, colorButtonNormal);
i++;
states[i] = FOCUSED_STATE_SET;
colors[i] = ColorUtils.compositeColors(colorControlHighlight, colorButtonNormal);
i++;
// Default enabled state
states[i] = EMPTY_STATE_SET;
colors[i] = colorButtonNormal;
i++;
return new ColorStateList(states, colors);
}
}
그런 다음 다음 다음과 같이 단추 색상을 정의할 수 있습니다.
<com.example.views.AppCompatColorButton
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:backgroundTint="#ffff0000"
app:backgroundTint="#ffff0000"
android:text="Button"
android:textColor="@android:color/white" />
이 SO 답변은 답변 https://stackoverflow.com/a/30277424/3075340 에 도달하는 데 도움이 되었습니다.
단추의 배경 색조를 설정하기 위해 이 유틸리티 방법을 사용합니다.롤리팝 이전 장치와 함께 작동합니다.
// Set button background tint programmatically so it is compatible with pre-lollipop devices.
public static void setButtonBackgroundTintAppCompat(Button button, ColorStateList colorStateList){
Drawable d = button.getBackground();
if (button instanceof AppCompatButton) {
// appcompat button replaces tint of its drawable background
((AppCompatButton)button).setSupportBackgroundTintList(colorStateList);
} else if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
// Lollipop button replaces tint of its drawable background
// however it is not equal to d.setTintList(c)
button.setBackgroundTintList(colorStateList);
} else {
// this should only happen if
// * manually creating a Button instead of AppCompatButton
// * LayoutInflater did not translate a Button to AppCompatButton
d = DrawableCompat.wrap(d);
DrawableCompat.setTintList(d, colorStateList);
button.setBackgroundDrawable(d);
}
}
코드에서 사용하는 방법:
Utility.setButtonBackgroundTintAppCompat(myButton,
ContextCompat.getColorStateList(mContext, R.color.your_custom_color));
이렇게 하면 배경 색조만 변경하고 예쁜 단추 효과만 유지하려는 경우에는 색상 상태 목록을 지정할 필요가 없습니다.
나는 설정android:textColor
@null
내 버튼 테마에서 도움이 됩니다.
styles.xml
<style name="Button.Base.Borderless" parent="Widget.AppCompat.Button.Borderless.Colored">
<item name="android:textColor">@null</item>
</style>
some_some.xml
<Button
style="@style/Button.Base.Borderless"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/hint" />
은 이제버텍색상은트스튼▁is색▁now입니다.colorAccent
에정된에 정의되어 .AppTheme
<style name="AppTheme" parent="@style/Theme.AppCompat.Light.NoActionBar">
<item name="colorAccent">@color/colorAccent</item>
<item name="borderlessButtonStyle">@style/Button.Base.Borderless</item>
<item name="alertDialogTheme">@style/AlertDialog</item>
</style>
코드를 통해 이 작업을 수행하려면 다음과 같이 하십시오.
DrawableCompat.setTintList(button.getBackground(), ColorStateList.valueOf(yourColor));
저의 경우, Button을 사용하는 대신 Androidx.appcompat을 사용합니다.위젯AppCompatButton과 그것은 저에게 효과가 있었습니다.
언급URL : https://stackoverflow.com/questions/26519979/coloring-buttons-in-android-with-material-design-and-appcompat
'programing' 카테고리의 다른 글
sqlite에서 문자열을 패딩과 연결하는 방법 (0) | 2023.09.02 |
---|---|
인터셉트와 트랜스폼 리스폰스의 정확한 차이점은 무엇입니까? (0) | 2023.09.02 |
jQuery를 사용하여 드롭다운 옵션을 선택하는 방법은 무엇입니까? (0) | 2023.09.02 |
MySQL 기본 ID UUID 설정 (0) | 2023.08.28 |
Swift에서 Double 및 Float의 최대값을 찾는 방법 (0) | 2023.08.28 |