ImageView 및 TextView를 포함하는 LinearLayout 대신 복합 드로어 블을 사용하는 방법


198

내 코드에 대해 새로운 Lint 도구를 실행하십시오. 많은 좋은 제안이 있었지만 이해할 수는 없습니다.

이 태그와 그 하위 요소는 하나의 복합 드로어 블로 대체 될 수 있습니다

문제 : 복합 드로어 블을 사용하여 현재 노드를 TextView로 바꿀 수 있는지 확인합니다.

ImageView 및 TextView가 포함 된 LinearLayout은 복합 드로어 블로보다 효율적으로 처리 할 수 ​​있습니다.

그리고 여기 내 레이아웃이 있습니다

<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:layout_centerInParent="true">

<ImageView 
    android:id="@+id/upImage"
    android:layout_width="20dp"
    android:layout_height="20dp"
    android:layout_gravity="center_vertical"
    android:scaleType="centerInside"
    android:src="@drawable/up_count_big">
</ImageView>

<TextView
    android:id="@+id/LikeCount"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_marginLeft="2dp"
    android:layout_marginBottom="1dp"
    android:textColor="@color/gray"
    android:textSize="16sp"
    android:layout_gravity="center_vertical">
</TextView>
</LinearLayout>

이 경우 컴파운드를 그릴 수있는 방법에 대한 구체적인 예를 제공 할 수 있습니까?


4
그것은 잘못된 긍정으로 인해 일반적으로 비활성화하는 검사 중 하나입니다. 이 방법으로 모든 TextView/ ImageView콤보를 교체 할 수있는 것은 아닙니다.
Richard Le Mesurier

@RichardLeMesurier 이미지 크기를 정의하려는 경우 사용자 정의보기를 사용할 수 있습니다. 이렇게하면 시야가 밝아집니다. 내 답변보기 : stackoverflow.com/a/31916731/2308720
Oleksandr

@Alex 많은 경우에 동의하지만 내 경험에 따르면 버그가있는 Lint 검사로 간주되는 것을 돌아 다니기 위해 사용자 정의보기를 만드는 데 어려움이 종종 있습니다.
Richard Le Mesurier

답변:


258

TextView 왼쪽, 위, 오른쪽 및 아래쪽에 각각 하나씩 4 개의 복합 드로어 블이 제공됩니다.

귀하의 경우에는 LinearLayout및 필요하지 않습니다 ImageView. 에 추가 android:drawableLeft="@drawable/up_count_big"하십시오 TextView.

자세한 내용은 TextView # setCompoundDrawablesWithIntrinsicBounds 를 참조하십시오.


34
링크에 동적 이미지가 포함 된 예가 표시되어있는 것은 아닙니다. 이 경우 여전히을 사용하는 것이 더 쉽고 바람직 할 수 있습니다 ImageView. 경고는 '대체되어야한다'는 것이 아니라 '대체 될 수있다'고 말합니다
David O'Meara

9
그러나 어떻게 이미지와 텍스트 사이에 공간을 만들 수
있습니까?

7
XML 또는 코드에서 DrawablePadding 속성을 사용하는 @Hitesh Dhamshaniya
Snicolas

2
필자의 경우 android : drawableLeft가 충분한 제어를 제공하지 않기 때문에 내부 ImageView / TextView를 사용하여 LinearLayout으로 옮겼습니다. 따라서 기본적으로 말하는 것은이 경고 / 제안이 거짓말이라는 것입니다.
BrainSlugs8383

5
거짓말이 아닙니다. 어떤 경우에는 단일 TextView가 실제로 효율적일 수 있습니다. 그러나 일반적으로 TextView가 포함 된 ImageView는 훨씬 풍부한 제어 기능을 제공합니다.
ılǝ

20

어떤 이유로 코드를 통해 추가 해야하는 경우 다음을 사용할 수 있습니다.

mTextView.setCompoundDrawablesWithIntrinsicBounds(left, top, right, bottom);

왼쪽, 위, 오른쪽 아래는 Drawables입니다.


위의 API 17 필요
Puni

나는 그렇게 생각하지 않는다. 문서 1은 API 1 이후
Javier P

이 링크 참조 [documentation] ( developer.android.com/reference/android/widget/… , android.graphics.drawable.Drawable, android.graphics.drawable.Drawable, android.graphics.drawable.Drawable))
Puni

네 , 메소드 이름 의 상대 를 주목하십시오 .) 나는 대답에서 이것을 언급하지 않습니다.
Javier P


1

일반적인 복합 드로어 블 구현을 사용할 수 있지만 드로어 블 크기를 정의해야하는 경우이 라이브러리를 사용하십시오.

https://github.com/a-tolstykh/textview-rich-drawable

다음은 사용법의 작은 예입니다.

<com.tolstykh.textviewrichdrawable.TextViewRichDrawable
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Some text"
        app:compoundDrawableHeight="24dp"
        app:compoundDrawableWidth="24dp" />
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.