Як я можу використовувати складений графічний рисунок замість LinearLayout, що містить ImageView та TextView


198

Скористав новий інструмент Lint проти мого коду Було багато гарних пропозицій, але цього я не можу зрозуміти.

Цей тег та його діти можуть бути замінені на один та складний малюнок

Проблема: Перевіряє, чи можна замінити поточний вузол TextView за допомогою складених рисунків.

LinearLayout, що містить ImageView і TextView, може бути більш ефективно оброблятись як складене малювання

І ось моя компонування

<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
fwiw, це одна з перевірок, яку я зазвичай відключаю через помилкові позитиви. Не всі TextView/ ImageViewкомбо можна замінити таким чином.
Річард Ле Месюр'є

@RichardLeMesurier Якщо ви хочете визначити розмір зображення, ви можете використовувати спеціальний вид. Це зробить ваш погляд легшим. Дивіться мою відповідь: stackoverflow.com/a/31916731/2308720
Олександр

@ Алекс Я погоджуюсь у багатьох випадках, проте, на моєму досвіді, мені часто не варто проблем із створенням власного виду, щоб обійти те, що я вважаю помилковою перевіркою Лінт.
Річард Ле Месюр'є

Відповіді:


258

TextView поставляється з 4 складовими малюнками, по одному для кожного зліва, зверху, праворуч і знизу.

У вашому випадку, вам не потрібно LinearLayoutі ImageViewвзагалі. Просто додайте android:drawableLeft="@drawable/up_count_big"до свого TextView.

Додаткову інформацію див. У статті TextView # setCompoundDrawablesWithIntrinsicBounds .


34
не обов’язково, оскільки ваше посилання показує приклад із динамічним зображенням. У такому випадку використання інструменту все ж може бути простішим або кращим ImageView. У попередженні сказано, що "можна замінити на", а не "слід замінювати"
Девід О'Мера

9
але як я можу зробити пробіл між зображенням і текстом
Hitesh Dhamshaniya

7
@Hitesh Dhamshaniya, використовуючи властивість DravablePadding у XML або коді.
Snicolas

2
У моєму випадку я перейшов до LinearLayout із внутрішнім ImageView / TextView, оскільки андроїд: dravableLeft не запропонував достатнього контролю - тож, що ти в основному мені кажеш, це те, що це попередження / пропозиція - брехня.
BrainSlugs83

5
Це не брехня, оскільки в деяких випадках один TextView дійсно може бути ефективним. Але загалом - так, ImageView з TextView забезпечує набагато багатший контроль.
ılǝ

20

якщо вам чомусь потрібно додати за допомогою коду, ви можете скористатися цим:

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

де ліворуч, зверху, праворуч знизу - Малюнки


Вимагати API 17 вище
Пуні

Я не думаю, що це документація, оскільки API 1
Javier P

Дивіться це посилання [документація] ( developer.android.com/reference/android/widget/… , android.graphics.dravable.Drawable, android.graphics.dravable.Drawable, android.graphics.drawable.Drawable))
Пуні

так, зверніть увагу на відносного у назві методу;) Я не маю на увазі цього у відповіді
Хав'єр


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" />
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.