프로그래밍 방식으로 버튼 틴트를 추가하는 방법
새 AppCompat 라이브러리에서는 다음과 같은 방식으로 단추를 색칠할 수 있습니다.
<Button
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="@string/follow"
android:id="@+id/button_follow"
android:backgroundTint="@color/blue_100"
/>
내 코드에서 버튼의 틴트를 프로그래밍 방식으로 설정하려면 어떻게 해야 합니까?저는 기본적으로 어떤 사용자 입력을 기반으로 조건부 버튼 컬러링을 구현하려고 합니다.
관련 방법은 문서에 의거하여 다음과 같이 합니다.android:backgroundTint
is setBackgroundTintList(ColorStateList)
갱신하다
이 링크를 따라 색상 상태 목록 리소스를 만드는 방법을 확인합니다.
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android" >
<item
android:color="#your_color_here" />
</selector>
그런 다음 를 사용하여 로드합니다.
setBackgroundTintList(contextInstance.getResources().getColorStateList(R.color.your_xml_name));
어디에contextInstance
A의 한 예입니다.Context
AppCompart 사용하기
btnTag.setSupportButtonTintList(ContextCompat.getColorStateList(Activity.this, R.color.colorPrimary));
당신은 사용할 수 있습니다.
button.setBackgroundTintList(ColorStateList.valueOf(resources.getColor(R.id.blue_100)));
하지만 어제 출시된 지원 라이브러리 드로잉 가능 틴팅을 사용하는 것을 추천합니다.
Drawable drawable = ...;
// Wrap the drawable so that future tinting calls work
// on pre-v21 devices. Always use the returned drawable.
drawable = DrawableCompat.wrap(drawable);
// We can now set a tint
DrawableCompat.setTint(drawable, Color.RED);
// ...or a tint list
DrawableCompat.setTintList(drawable, myColorStateList);
// ...and a different tint mode
DrawableCompat.setTintMode(drawable, PorterDuff.Mode.SRC_OVER);
자세한 내용은 이 블로그 게시물에서 확인할 수 있습니다("그림으로 그릴 수 있는 선팅" 섹션 참조).
보기에는 틴트 관리를 위한 자체 메커니즘이 있는 것 같습니다. 그래서 틴트 리스트를 두는 것이 더 좋을 것 같습니다.
ViewCompat.setBackgroundTintList(
editText,
ColorStateList.valueOf(errorColor));
코틀린으로 하는 방법은 다음과 같습니다.
view.background.setTint(ContextCompat.getColor(context, textColor))
실제 코드 상황을 제공하여 dimsuz의 답변을 적절히 확장하려면 다음 코드 스니펫을 참조하십시오.
Drawable buttonDrawable = button.getBackground();
buttonDrawable = DrawableCompat.wrap(buttonDrawable);
//the color is a direct color int and not a color resource
DrawableCompat.setTint(buttonDrawable, Color.RED);
button.setBackground(buttonDrawable);
이 솔루션은 단추의 배경으로 드로잉이 사용되는 시나리오에 대한 것입니다.롤리팝 이전 기기에서도 작동합니다.
간단한 방법은
자바어로
myButton.setBackgroundTintList(ColorStateList.valueOf(resources.getColor(R.id.white)));
코틀린에서
myButton.setBackgroundTintList(ColorStateList.valueOf(resources.getColor(R.id.white)))
이런 거 먹어봤어요?
button.setBackgroundTintList(getResources().getColorStateList(R.id.blue_100));
getResources()는 활동에서만 작동합니다.하지만 그것은 모든 맥락에서 또한 호출될 수 있습니다.
재료 설계 라이브러리의 새로운 재료 버튼에서 쉽게 처리할 수 있습니다. 먼저 종속성을 추가합니다.
implementation 'com.google.android.material:material:1.1.0-alpha07'
그런 다음 XML에서 단추에 다음을 사용합니다.
<com.google.android.material.button.MaterialButton
android:id="@+id/accept"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="@string/i_accept"
android:textSize="18sp"
app:backgroundTint="@color/grayBackground_500" />
색상을 변경하고 싶을 때, 다음은 Kotlin의 코드입니다. 이 코드는 더 이상 사용되지 않으며 Android 21 이전에 사용할 수 있습니다.
accept.backgroundTintList = ColorStateList.valueOf(ResourcesCompat.getColor(resources,
R.color.colorPrimary, theme))
Drawable Compate를 사용할 수 있습니다. 예를 들어,
public static Drawable setTint(Drawable drawable, int color) {
final Drawable newDrawable = DrawableCompat.wrap(drawable);
DrawableCompat.setTint(newDrawable, color);
return newDrawable;
}
제가 일을 시작할 수 있었던 방법은CompoundButtonCompat.setButtonTintList(button, colour)
.
안드로이드 버전에 상관없이 작동하는 것으로 알고 있습니다.
다음과 같은 것을 사용할 수 있습니다.
myButton.backgroundTintList = AppCompatResources.getColorStateList(context, R.color.primary_variant)
저도 비슷한 문제가 있었습니다.저는 색상(int) 값을 기준으로 뷰에 대해 복잡한 그리기 가능한 배경에 색상을 입히고 싶었습니다.코드를 사용하여 성공했습니다.
ColorStateList csl = new ColorStateList(new int[][]{{}}, new int[]{color});
textView.setBackgroundTintList(csl);
여기서 color는 필요한 색상을 나타내는 int 값입니다.이것은 단순한 xml ColorStateList를 나타냅니다.
<selector xmlns:android="http://schemas.android.com/apk/res/android" >
<item android:color="color here"/>
</selector>
도움이 되길 바랍니다.
사용하시는 경우Kotlin
그리고.Material Design
, 당신은 당신의 색을 바꿀 수 있습니다.MaterialButton
다음과 같이:
myButton.background.setTintList(ContextCompat.getColorStateList(context, R.color.myColor))
사용자의 확장 기능을 만들어 더욱 향상시킬 수 있습니다.MaterialButton
보다 가독성이 높고 보다 편리하게 코딩할 수 있도록 하기 위해:
fun MaterialButton.changeColor(color: Int) {
this.background.setTintList(ContextCompat.getColorStateList(context, color))
}
그러면 다음과 같이 어디서나 기능을 사용할 수 있습니다.
myButton.changeColor(R.color.myColor)
ImageButton의 경우 다음을 사용할 수 있습니다.
favoriteImageButton.setColorFilter(Color.argb(255, 255, 255, 255)); // White Tint
XML 기반 색상 상태 목록이 테마 속성을 참조하는 경우 여기서 제안하는 답변은 Android 5.0에서 제대로 작동하지 않습니다.예를 들어, 다음과 같은 xml 색상 상태 목록을 가지고 있습니다.
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:color="?colorPrimary" android:state_enabled="true"/>
<item android:alpha="0.12" android:color="?attr/colorOnSurface"/>
</selector>
이것을 내 배경으로 사용하는 것 xml의 Tint는 안드로이드 5.0과 다른 모든 것에서 잘 작동합니다.그러나 이 코드를 다음과 같이 설정하려고 하면 다음과 같습니다.
(이러지마)
myButton.setSupportButtonTintList(ContextCompat.getColorStateList(myButton.getContext(), R.color.btn_tint_primary));
활동이나 단추의 컨텍스트를 ContextCompat.getColorStateList() 메서드로 전달해도 상관이 없으며, 단추 안에 있는 테마에 대한 적절한 색상 상태 목록을 제공하지 않습니다.이는 api 23 및 ContextCompat가 이러한 문제를 해결하기 위해 특별한 기능을 수행하지 않을 때까지 색상 상태 목록에서 테마 속성을 사용하는 것이 지원되지 않았기 때문입니다.대신 장치 < API 23에서 자체 리소스 파싱/테마 특성 확인을 수행하는 AppCompatResources.getColorStateList()를 사용해야 합니다.
대신 다음을 사용해야 합니다.
myButton.setSupportBackgroundTintList(AppCompatResources.getColorStateList(myButton.getContext(), R.color.btn_tint_primary));
TLDR: 안드로이드의 모든 API 버전에서 해결된 테마 리소스가 필요하다면 -ContextCompat가 아닌 AppCompat Resources를 사용합니다.
주제에 대한 자세한 내용은 이 문서를 참조하십시오.
Shayne3000의 답변 외에 색상 리소스(int 색상뿐 아니라)도 사용할 수 있습니다.코틀린 버전:
var indicatorViewDrawable = itemHolder.indicatorView.background
indicatorViewDrawable = DrawableCompat.wrap(indicatorViewDrawable)
val color = ResourcesCompat.getColor(context.resources, R.color.AppGreenColor, null) // get your color from resources
DrawableCompat.setTint(indicatorViewDrawable, color)
itemHolder.indicatorView.background = indicatorViewDrawable
Δ Δ Δ Δ Δ Δ Δ Δ Δ Δ Δ Δ Δ Δ Δ Δ Δ Δ Δ Δ Δ Δ setBackgroundTintList
int myColor = Color.BLACK;
button.setBackgroundTintList(new ColorStateList(EMPTY, new int[] { myColor }));
button.setBackgroundTintList(ColorStateList.valueOf(myColor));
button.setBackgroundTintList(contextInstance.getResources().getColorStateList(R.color.my_color));
다른 버전의 안드로이드를 신경쓰지 않으려면 기본적으로 모든 보기를 위해 이 코드를 사용할 수 있습니다.나를 위해 일했습니다.
val states = arrayOf(intArrayOf(android.R.attr.state_enabled))
val colors = intArrayOf(Color.GREEN) // your color here
val colorStateList = ColorStateList(states, colors)
ViewCompat.setBackgroundTintList(yourButtonHere,colorStateList)
코틀린 버전, 이 글을 읽는 모든 사람들에게 좋은 하루가 되길 바랍니다 ;)
그건 그렇고. 만약 당신이 그릴 수 있는 배경 모양을 만들었다면 이것은 틴트 색상만 덮어쓸 것입니다.
checkbox.ButtonTintList = ColorStateList.ValueOf(Android.Color.White);
사용하다ButtonTintList
에 대신에BackgroundTintList
다음과 같이 단추에 틴트를 추가할 수 있습니다.
filterBtn.setBackgroundTintList(ContextCompat.getColorStateList(context,R.color.colorPrimary))
이미지 뷰를 위해 사용할 수 있는 단순한
imageView.setColorFilter(ContextCompat.getColor(context,
R.color.COLOR_YOUR_COLOR));
백그라운드 틴트에서 HTML 컬러 코드를 설정하는 방법을 알고 싶은 사람이 있는 경우(컬러 코드가 백엔드에서 오는 경우)
String htmlColorCode = "#FF0000";
int colorInt = Color.parseColor(htmlColorCode);
View myView = findViewById(R.id.my_view);
ViewCompat.setBackgroundTintList(myView, ColorStateList.valueOf(colorInt));
코틀린이랑.
checkbox.buttonTintList = AppCompatResources.getColorStateList(context, color.colorPrimary)
언급URL : https://stackoverflow.com/questions/29801031/how-to-add-button-tint-programmatically
'programing' 카테고리의 다른 글
컨스트럭터 기능이 약속을 반환하도록 하는 것은 나쁜 관행입니까? (0) | 2023.09.12 |
---|---|
비주얼 스튜디오 C#에서 오피스를 사용하는 방법? (0) | 2023.09.12 |
CSS와 SCSS의 차이점은 무엇입니까? (0) | 2023.09.07 |
ajax 호출 시 마우스 포인터 변경 (0) | 2023.09.07 |
도커 파일에서 PATH 환경 변수를 업데이트하는 방법? (0) | 2023.09.07 |