programing

배경 설정 vs 배경 설정 그리기 가능(안드로이드)

powerit 2023. 9. 5. 20:52
반응형

배경 설정 vs 배경 설정 그리기 가능(안드로이드)

뷰의 배경을 그릴 수 있도록 설정하고 싶습니다.이를 위한 두 가지 방법이 있습니다(제가 보기에는).setBackground그리고.setBackgroundDrawable.

사용할 때setBackgroundAPI 레벨 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

반응형