setBackground 대 setBackgroundDrawable (Android)



5 Answers

API 레벨 1 대신 setBackgroundResource() 를 사용할 수 있습니다.

Question

보기의 배경 drawable을 설정하고 싶습니다. 이 방법에는 두 가지 방법이 있습니다 (제가보기 엔) : setBackgroundsetBackgroundDrawable .

setBackground 사용할 때 API 레벨 16 에 추가되었지만 프로젝트의 최소 SDK 버전은 7입니다. 16 세 미만에서는 작동하지 않는다고 가정합니다. 맞습니까? 하지만 setBackgroundDrawable을 사용하면 더 이상 사용되지 않습니다.

나는 무엇을 사용하기로되어 있나?




다음과 같이 할 수도 있습니다.

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.htmlhttp://docs.oracle.com/javase/tutorial/reflect/index.html




나는 이것이 낡은 질문이라는 것을 알고 있지만 나는 비슷한 상황을 가지고 있으며 나의 해결책은

button.setBackgroundResource( R.drawable.ic_button );
Drawable d = button.getBackground();

그런 다음 "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);

희망이 도움이됩니다!




이것은 나를 위해 작동 : 보기보기 는 귀하의 editText, 스피너 ... 등. int drawable 은 drawable 라우트 예제 (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));
        }    
    }



ViewCompat.setBackground(view, background); 사용하십시오 ViewCompat.setBackground(view, background);



Related