IT

호출 집합 CompoundDrawables()에 CompoundDrawables()가 표시되지 않습니다.

itgroup 2023. 10. 5. 21:30
반응형

호출 집합 CompoundDrawables()에 CompoundDrawables()가 표시되지 않습니다.

메소드를 호출하면 Drawable 화합물이 표시되지 않습니다.

Drawable myDrawable = getResources().getDrawable(R.drawable.btn);
btn.setCompoundDrawables(myDrawable, null, null, null);

무슨 생각 있어요?

나는 사용할 필요가 있었습니다.

이를 사용합니다(테스트했습니다.효과가 좋습니다.

Drawable image = context.getResources().getDrawable( R.drawable.ic_action );
int h = image.getIntrinsicHeight(); 
int w = image.getIntrinsicWidth();   
image.setBounds( 0, 0, w, h );
button.setCompoundDrawables( image, null, null, null );

이미지가 지정된 경계가 없으므로 비어 있습니다.사용하셔도 좋습니다setCompoundDrawables()이미지의 경계를 지정하기 전에Drawable.setBounds()방법

상단으로 설정된 예제:

view.setCompoundDrawablesWithIntrinsicBounds(
    null,
    getResources().getDrawable(R.drawable.some_img),
    null,
    null
);

인수 순서: (왼쪽, 위쪽, 오른쪽, 아래)

다시 한 번 더 간단해졌습니다.

Drawable image = context.getResources().getDrawable(R.drawable.ic_action );
image.setBounds( 0, 0, image.getIntrinsicWidth(), image.getIntrinsicHeight() );
button.setCompoundDrawables( image, null, null, null );

한계를 지정하지 않았기 때문에 이미지가 표시되지 않으므로 여기에는 두 가지 옵션이 있습니다.

1차 방법

사용하다setCompoundDrawablesWithIntrinsicBounds아래와 같이 방법

Drawable myDrawable = getResources().getDrawable(R.drawable.btn);
btn. setCompoundDrawablesWithIntrinsicBounds(myDrawable, null, null, null);

세컨드 메소드

아래와 같이 TextView에 적용하기 전에 그리기 가능한 범위를 적용할 수 있습니다.

Drawable myDrawable = getResources().getDrawable(R.drawable.btn);
myDrawable.setBounds( 0, 0, myDrawable.getIntrinsicWidth(), myDrawable.getIntrinsicHeight());
btn.setCompoundDrawables(myDrawable, null, null, null);

바로 그겁니다.

API 22에서 더 이상 사용하지 않습니다.

이 코드는 제게 유용합니다.

Drawable drawable = ResourcesCompat.getDrawable(getResources(),R.drawable.wen, null);
drawable.setBounds(0, 0, drawable.getMinimumWidth(),
drawable.getMinimumHeight());
tv.setCompoundDrawables(drawable, null, null, null);

코틀린에서:

1) 세트drawable:

val drawable = ContextCompat.getDrawable(context!!,R.drawable.ic_image)?.apply {
    setBounds(0, 0, intrinsicWidth, intrinsicHeight)
}

아니면

val drawable = ResourcesCompat.getDrawable(resources, R.drawable.ic_image, null)?.apply {
    setBounds(0, 0, minimumWidth, minimumHeight)
}

2) 세트TextView:

textView.setCompoundDrawablesWithIntrinsicBounds(drawable, null, null, null)

아니면

button.setCompoundDrawables(null, drawable, null, null)

세트용복합도면고유 경계(Drawable, Drawable, Drawable, Drawable)를 사용하면 작동하지 않습니다.

set CompoundDrawables를 사용해야 했습니다.IntrinsicBounds(0, 0, 0, 0)를 사용합니다.

Kotlin의 예:

    val myView = layoutInflater.inflate(R.layout.my_view, null) as TextView
    myView.setCompoundDrawablesWithIntrinsicBounds(0, myDrawable, 0, 0)

데이터 바인딩이 있는 Kotlin에서

binding.tvTime.setCompoundDrawablesWithIntrinsicBounds(
            ResourcesCompat.getDrawable(resources, android.R.drawable.ic_menu_recent_history, null),
            null,null,null)

어디에tvTimetextView및 위치(Rigth,Top,Left,Bottom), 바인딩에 대한 자세한 내용은 https://stackoverflow.com/a/72360048/12272687 을 참조하십시오.

언급URL : https://stackoverflow.com/questions/6590838/calling-setcompounddrawables-doesnt-display-the-compound-drawable

반응형