168

Chạy công cụ Lint mới đối với mã của tôi. Nó đã đưa ra rất nhiều gợi ý tốt, nhưng điều này tôi không thể hiểu được.Làm cách nào để sử dụng một đối tượng có thể vẽ được thay vì LinearLayout chứa một ImageView và một TextView

này thẻ và con của nó có thể được thay thế bằng một và một drawable hợp chất

Vấn đề: Kiểm tra xem nút hiện tại có thể được thay thế bằng một TextView sử dụng drawables hợp chất.

Một LinearLayout chứa một ImageView và một TextView có thể được xử lý một cách hiệu quả hơn là một hợp chất drawable

Và đây là cách bố trí của tôi

<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> 

Ai đó có thể cung cấp một ví dụ cụ thể như thế nào để làm cho một hợp chất drawable trong trường hợp này?

+4

fwiw đó là một trong những kiểm tra mà tôi thường vô hiệu hóa, vì dương tính giả. Không phải tất cả các combo 'TextView' /' ImageView' đều có thể được thay thế theo cách này. –

+0

@RichardLeMesurier Bạn có thể sử dụng chế độ xem tùy chỉnh nếu bạn muốn xác định kích thước hình ảnh. Điều này sẽ làm cho chế độ xem của bạn nhẹ hơn. Xem câu trả lời của tôi: http://stackoverflow.com/a/31916731/2308720 – Oleksandr

+0

@Alex Tôi đồng ý trong nhiều trường hợp, tuy nhiên theo kinh nghiệm của tôi, tôi thường không đáng để gặp khó khăn khi tạo chế độ xem tùy chỉnh để xem những gì tôi xem xét là một kiểm tra Lint lỗi. –

Trả lời

224

TextView đi kèm với 4 ngăn kéo hợp chất, một cho mỗi bên trái, trên cùng, bên phải và dưới cùng.

Trong trường hợp của bạn, bạn hoàn toàn không cần LinearLayoutImageView. Chỉ cần thêm android:drawableLeft="@drawable/up_count_big" vào số TextView của bạn.

Xem TextView#setCompoundDrawablesWithIntrinsicBounds để biết thêm thông tin.

+26

không nhất thiết, vì liên kết của bạn hiển thị ví dụ có hình ảnh động. Trong trường hợp đó, vẫn có thể dễ dàng hơn hoặc thích hợp hơn để sử dụng 'ImageView'.Cảnh báo nói 'có thể được thay thế bằng', không phải 'nên được thay thế bằng' –

+8

nhưng làm cách nào tôi có thể tạo khoảng cách giữa Hình ảnh và Văn bản –

+6

@Hitesh Dhamshaniya, sử dụng thuộc tính DrawablePadding trong XML hoặc mã. – Snicolas

14

nếu cho một số lý do bạn cần phải thêm qua mã, bạn có thể sử dụng mã này:

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

nơi left, top, dưới bên phải là Drawables

+0

Yêu cầu API 17 ở trên – Puni

+0

Tôi không nghĩ vậy, [tài liệu] (https://developer.android.com/reference/android/widget/TextView.html) nêu rõ từ API 1 –

+0

Xem liên kết này [tài liệu] (https : //developer.android.com/reference/android/widget/TextView.html#setCompoundDrawablesRelativeWithIntrinsicBounds (android.graphics.drawable.Drawable, android.graphics.drawable.Drawable, android.graphics.drawable.Drawable, android.graphics.drawable .Drawable)) – Puni

2

Bạn có thể sử dụng thực hiện drawable hợp chất nói chung, nhưng nếu bạn cần xác định kích thước sử dụng drawable thư viện này:

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

Đây là một nhỏ ví dụ về cách sử dụng:

<com.tolstykh.textviewrichdrawable.TextViewRichDrawable 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:text="Some text" 
     app:compoundDrawableHeight="24dp" 
     app:compoundDrawableWidth="24dp" />