배경 설정 vs 배경 설정 그리기 가능(안드로이드)
뷰의 배경을 그릴 수 있도록 설정하고 싶습니다.이를 위한 두 가지 방법이 있습니다(제가 보기에는).setBackground
그리고.setBackgroundDrawable
.
사용할 때setBackground
API 레벨 16에 추가된 것으로 나오는데, 제 프로젝트의 최소 SDK 버전은 7입니다.16세 미만은 안 되는 것 같은데 맞나요?하지만 setBackgroundDrawable을 사용하면 더 이상 사용되지 않는다고 표시됩니다.
제가 뭘 사용해야 하죠?
사용은 권장되지 않지만 여전히 작동하기 때문에 그냥 사용하시면 됩니다.하지만 만약 당신이 완전히 정확하기를 원한다면, 단지 그것의 완전성을 위해...다음과 같은 작업을 수행할 수 있습니다.
int sdk = android.os.Build.VERSION.SDK_INT;
if(sdk < android.os.Build.VERSION_CODES.JELLY_BEAN) {
setBackgroundDrawable();
} else {
setBackground();
}
이것이 작동하려면 buildTarget api 16과 min build를 7 또는 유사한 것으로 설정해야 합니다.
사용할 수 있습니다.setBackgroundResource()
대신 API 레벨 1에 있습니다.
소스 코드(이 게시물에 대한 크레딧)에 표시된 것처럼 현재 두 기능 사이에 차이가 없는 것 같습니다.
public void setBackground(Drawable background) {
//noinspection deprecation
setBackgroundDrawable(background);
}
@Deprecated
public void setBackgroundDrawable(Drawable background) { ... }
그래서 그것은 채우기-부모 대 매치-부모가 있는 것과 유사한 이름 지정 결정일 뿐입니다.
나는 이것이 오래된 질문이라는 것을 알지만, 나는 비슷한 상황을 가지고 있고, 나의 해결책은.
button.setBackgroundResource( R.drawable.ic_button );
Drawable d = button.getBackground();
그리고 나서 당신은 "드로잉 가능"을 가지고 놀 수 있고, 컬러 필터를 적용할 수도 있습니다.
사용하다ViewCompat.setBackground(view, background);
당신은 사용할 수 있습니다.setBackgroundResource()
대신에, 즉.relativeLayout.setBackgroundResource(R.drawable.back);
이것은 나에게 효과가 있습니다.
Android studio 1.5.1을 사용하면 다음과 같은 경고가 표시됩니다.
Call requires API level 16 (current min is 9): android.view.View#setBackground
그리고 절체절명에 대한 불만.
'setBackgroundDrawable(android.graphics.drawable.Drawable)' is deprecated
이 형식을 사용하여 다음 두 가지를 모두 제거했습니다.
if (android.os.Build.VERSION.SDK_INT < android.os.Build.VERSION_CODES.JELLY_BEAN) {
//noinspection deprecation
layout.setBackgroundDrawable(drawable);
} else {
layout.setBackground(drawable);
}
이제 이러한 옵션 중 하나를 사용할 수 있습니다.그리고 그것은 어떤 경우에도 효과가 있을 것입니다.색상은 다음과 같이 HEX 코드가 될 수 있습니다.
myView.setBackgroundResource(ContextCompat.getColor(context, Color.parseColor("#FFFFFF")));
다음과 같은 색상 리소스:
myView.setBackgroundResource(ContextCompat.getColor(context,R.color.blue_background));
또는 다음과 같은 사용자 지정 xml 리소스:
myView.setBackgroundResource(R.drawable.my_custom_background);
도움이 되길 바랍니다!
이것은 나에게 효과가 있습니다: 뷰 뷰는 당신의 편집 텍스트, 스피너 등입니다.그리고 도출 가능한 것은 도출 가능한 경로의 예입니다(R. 도출 가능).사용자 드로잉)
public void verifyDrawable (View view, int drawable){
int sdk = Build.VERSION.SDK_INT;
if(sdk < Build.VERSION_CODES.JELLY_BEAN) {
view.setBackgroundDrawable(
ContextCompat.getDrawable(getContext(),drawable));
} else if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN) {
view.setBackground(getResources().getDrawable(drawable));
}
}
setBackgroundResource(R.drawable.xml/png) 사용
저도 이 문제가 있었지만 ImageView를 사용하여 해결했습니다.
RelativeLayout을 사용하여 내부에 ImageView(가로 및 높이: fill_parent, 축척)를 추가합니다.유형: 가운데).
또한 이미지 뷰가 배경으로 작동하도록 상대 레이아웃 내부의 첫 번째 요소인지 확인합니다.
다음과 같은 작업도 수행할 수 있습니다.
try {
myView.getClass().getMethod(android.os.Build.VERSION.SDK_INT >= 16 ? "setBackground" : "setBackgroundDrawable", Drawable.class).invoke(myView, myBackgroundDrawable);
} catch (Exception ex) {
// do nothing
}
편집: @BlazejCzapp이 지적한 것처럼, 만약 당신이 반사 없이 문제를 해결할 수 있다면 반사를 사용하는 것을 피하는 것이 좋습니다.저는 반성 없이는 해결할 수 없는 사용 사례가 있었지만 위의 경우는 아닙니다.자세한 내용은 http://docs.oracle.com/javase/tutorial/reflect/index.html 을 참조하십시오.
언급URL : https://stackoverflow.com/questions/11947603/setbackground-vs-setbackgrounddrawable-android
'programing' 카테고리의 다른 글
Android 5 롤리팝에서 알림 표시줄 아이콘이 흰색으로 바뀝니다. (0) | 2023.09.05 |
---|---|
홈 디렉토리를 가져오시겠습니까? (0) | 2023.09.05 |
내용이 그리드 항목을 확장하지 못하도록 방지 (0) | 2023.09.05 |
Android에서 활동 제목을 변경하는 방법은 무엇입니까? (0) | 2023.09.05 |
powershell을 사용하여 인증서 개인 키의 사용자에게 권한을 부여하는 방법은 무엇입니까? (0) | 2023.09.05 |