setBackground vs setBackgroundDrawable (Android)
뷰의 배경 드로어 블을 설정하고 싶습니다. 이이 두 가지 방법은 (내가 볼까지로)입니다 : setBackground
와 setBackgroundDrawable
.
을 사용할 때 API 레벨 16setBackground
에 추가 되었지만 프로젝트의 최소 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) { ... }
fill-parent vs match-parent와 비슷한 명명 결정입니다.
나는 이것이 오래된 질문이라는 것을 알고 있지만 비슷한 상황이 있으며 내 솔루션은
button.setBackgroundResource( R.drawable.ic_button );
Drawable d = button.getBackground();
그런 다음 "Drawable"을 사용하여 컬러 필터를 적용 할 수 있습니다.
사용하다 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);
}
이제 이러한 옵션 중 하나를 사용할 수 있습니다. 그리고 어떤 경우에도 작동합니다. 색상은 다음 과 같이 16 진수 코드 가 될 수 있습니다 .
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);
그것이 도움이되기를 바랍니다!
setBackgroundResource (R.drawable.xml / png) 사용
이것은 나를 위해 작동합니다 : 보기보기 는 editText, 스피너 ... 등입니다. 그리고 int drawable 은 drawable route 예제입니다 (R.drawable.yourDrawable)
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));
}
}
또한이 문제가 있었지만 ImageView 사용하여 해결 방법을 만들었습니다 .
RelativeLayout을 사용하고 그 안에 ImageView를 추가하십시오 (너비 및 높이 : fill_parent, scaleType : center).
또한 imageview가 RelativeLayout 내부의 첫 번째 요소 인지 확인하여 배경으로 작동합니다.
당신은 또한 이것을 할 수 있습니다 :
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' 카테고리의 다른 글
문자열이 패턴과 일치하는지 확인 (0) | 2020.04.03 |
---|---|
Visual Studio Code의 여러 인스턴스를 열려면 어떻게합니까? (0) | 2020.04.03 |
"확장 구성으로 인해 요청한 페이지를 제공 할 수 없습니다." (0) | 2020.04.03 |
조건식이있는 AngularJS ng 스타일 (0) | 2020.04.03 |
다른 조각 문제에 대한 조각 (0) | 2020.04.03 |