내 활동에 버튼이 있고 내 테마의 강조 색상을 사용하고 싶습니다. 사전 롤리팝을해야하는 것처럼 내 자신의 드로어 블을 만드는 대신 당연히 새 backgroundTint
속성 을 사용하고 싶습니다 .
<Button
android:id="@+id/btnAddCode"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:backgroundTint="@color/accent"
android:text="@string/addressInfo_edit_addCode" />
불행히도 효과가 없으며 버튼이 회색으로 유지됩니다.
에 대해 다른 값을 시도했지만 backgroundTintMode
아무것도 변경하지 않았습니다.
나는 또한 내 활동에서 프로그래밍 방식으로 시도했지만 아무것도 변경하지 않았습니다.
addCodeView.findViewById(R.id.btnAddCode).setBackgroundTintList(
getResources().getColorStateList(R.color.accent));
내 색조가 무시되는 이유는 무엇입니까?
편집 : 명확히하기 위해 실제로 Lollipop 장치에서 테스트하고 있습니다. 다른 위젯 (예 : EditText)은 정확하고 자동으로 착색됩니다.
답변
API 19에서 API 27까지 테스트
<?xml version="1.0" encoding="utf-8"?>
<android.support.v7.widget.AppCompatButton
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
style="@style/Widget.AppCompat.Button.Colored"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/retry"
android:textColor="@android:color/white"
app:backgroundTint="@android:color/holo_red_dark" />
다음과 같이 출력을 생성합니다.
답변
나쁜 소식
BoD가 말했듯이 Lollipop 5.0 (API 레벨 21)에서 Button의 배경에 색을 입히는 것은 의미가 없습니다.
좋은 뉴스
Lollipop 5.1 (API 레벨 22)은 btn_mtrl_default_shape.xml (다른 파일 중에서)을 변경하여이 문제를 해결 한 것 같습니다. https://android.googlesource.com/platform/frameworks/base/+/6dfa60f33ca6018959ebff1efde82db7d2aed1e3%5E!/#F0
좋은 소식
새로운 지원 라이브러리 (버전 22.1+)는 이전 버전과 호환 염색 지원 추가 를 포함하여 구성 요소의 많은에 AppCompatButton를 !
불행하게도, android:backgroundTint
속성은 아직도 일을 (어쩌면 내가 뭔가 잘못하고 있어요) 않습니다 – 당신은 설정해야하므로 ColorStateList
사용하여 코드에서 setSupportBackgroundTintList()
. android:backgroundTint
앞으로 지원되는 모습을 보면 정말 좋을 것 같습니다. 업데이트 : Marcio Granzotto app:backgroundTint
가 AppCompatButton에서 작동하는 댓글을 달았습니다 ! 그것의 것을 참고 app:
하지, android:
그것을 응용 프로그램 / 라이브러리에 있기 때문에.
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="match_parent" >
<AppCompatButton
android:id="@+id/mybutton"
android:layout_width="wrap_content" android:layout_height="wrap_content"
android:text="Testing, testing"
app:backgroundTint="#ff00ff"/>
</LinearLayout>
에서 상속하도록 허용하면 활동이 AppCompatButton
정상 대신 자동으로 팽창 Button
됩니다 AppCompatActivity
.
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
AppCompatButton v = (AppCompatButton) findViewById(R.id.mybutton);
ColorStateList csl = new ColorStateList(new int[][]{new int[0]}, new int[]{0xffffcc00});
v.setSupportBackgroundTintList(csl);
}
}
물론 ColorStateList
색상 리소스에서 가져와야하지만 나는 게으 르기 때문에 …
아, 그리고 테마 중 하나를 기반으로 앱 테마를 작성하는 것을 잊지 마십시오 Theme.AppCompat
.
이것은 2.3.7 (Gingerbread MR1)과 5.0 (Lollipop ‘Classic’) 모두에서 작동했습니다.
답변
잔물결 드로어 블에 색조를 지정하는 것은 의미가없는 것 같습니다 (그리고 버튼의 기본 배경은 잔물결 드로어 블입니다).
사실, 플랫폼의 기본 버튼 드로어 블을 살펴본 후 “올바른”방법을 찾았습니다. 테마에서 이것을 정의해야합니다.
<item name="android:colorButtonNormal">@color/accent</item>
(물론 이것은 레벨 21 이상에만 해당됩니다.)
경고 : 이것은 테마에 정의되어 있으므로 모든 버튼 (최소한 해당 테마를 사용하는 활동의 모든 버튼)에 지정된 색상을 사용합니다.
보너스로 다음을 정의하여 잔물결 색상을 변경할 수도 있습니다.
<item name="android:colorControlHighlight">@color/accent_ripple</item>
답변
Android 5.0.x에서 색조와 관련된 문제를 해결하려면 다음과 같이 사용합니다.
public static void setButtonTint(Button button, ColorStateList tint) {
if (Build.VERSION.SDK_INT == Build.VERSION_CODES.LOLLIPOP && button instanceof AppCompatButton) {
((AppCompatButton) button).setSupportBackgroundTintList(tint);
} else {
ViewCompat.setBackgroundTintList(button, tint);
}
}
API 21에 대해서만 지원 방법을 사용하고 다른 모든 경우에는 ViewCompat 하나를 사용합니다.
답변
답변
app:backgroundTint
대신 사용 android:backgroundTint
하면 Lollipop 아래에서 색조가 적용됩니다. 그 이유는 AppCompatActivity
사용 AppCompatViewInflater
AppCompatButton 또는 AppCompatTextView로 자동 변경 버튼 또는 텍스트 뷰를 선택한 다음 app:backgroundTint
적용됩니다.
답변
나는 당신이 일을 android:background
하기 위해 준비 해야한다고 생각 android:backgroundTint
한다.
좀 더 정확하게 말하면, 내 생각 backgroundTint
에 RippleDrawable
.