Làm cách nào để tôi sử dụng một hợp chất có thể vẽ thay vì một tuyến tính có chứa ImageView và TextView


198

Chạy công cụ Lint mới chống lại mã của tôi. Nó đã đưa ra rất nhiều gợi ý hay, nhưng cái này tôi không thể hiểu được.

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

Vấn đề: Kiểm tra xem nút hiện tại có thể được thay thế bằng TextView hay không bằng cách sử dụng các biểu đồ ghép.

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

Và đây là bố cục 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ể về cách làm cho một hợp chất có thể vẽ được trong trường hợp này không?


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

@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 của hình ảnh. Điều này sẽ làm cho quan điểm của bạn nhẹ hơn. Xem câu trả lời của tôi: stackoverflow.com/a/31916731/2308720
Oleksandr

@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 gặp rắc rối khi tạo chế độ xem tùy chỉnh để khắc phục những gì tôi cho là kiểm tra lỗi Lint.
Richard Le Mesurier

Câu trả lời:


258

TextView đi kèm với 4 ngăn kéo ghép, 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 không cần LinearLayoutImageViewtất cả. Chỉ cần thêm android:drawableLeft="@drawable/up_count_big"vào của bạn TextView.

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


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

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

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

2
Trong trường hợp của tôi, tôi đã chuyển sang tuyến tính tuyến tính với ImageView / TextView bên trong vì android: drawableLeft không cung cấp đủ quyền kiểm soát - vì vậy, về cơ bản, bạn đang nói với tôi rằng cảnh báo / đề xuất này là dối trá.
BrainSlugs83

5
Đó không phải là một lời nói dối, đối với một số trường hợp, một TextView thực sự có thể hiệu quả. Nhưng nói chung - có, ImageView với TextView cung cấp khả năng kiểm soát phong phú hơn nhiều.
ılǝ

20

nếu vì lý do nào đó bạn cần thêm thông qua mã, bạn có thể sử dụng điều này:

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

trong đó bên trái, trên cùng, dưới cùng bên phải là Drawables


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

Tôi không nghĩ vậy, tài liệu nêu rõ kể từ API 1
Javier P

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

yeah lưu ý Relative trong tên phương thức;) Tôi không đề cập đến câu hỏi này trong câu trả lời
Javier P


1

Bạn có thể sử dụng triển khai tổng hợp có thể vẽ được, nhưng nếu bạn cần xác định kích thước có thể vẽ được thì hãy sử dụng thư viện này:

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

Đây là một ví dụ nhỏ 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" />
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.