макет Android: этот тег и его дочерние элементы могут быть заменены одними составной рисовать - PullRequest
107 голосов
/ 09 июля 2010

Когда я запускаю макет для определенного файла XML, я получаю это:

 This tag and its children can be replaced by one <TextView/> 
and a compound drawable

Какие изменения должны быть сделаны для следующего XML-кода:

<LinearLayout android:id="@+id/name_layout"
                android:layout_width="fill_parent"
                android:layout_height="wrap_content"
                android:gravity="center_vertical"
                android:background="@drawable/grouplist_single_left_grey_area" >
                <ImageView android:id="@+id/photo_image"
                    android:layout_width="@dimen/thumbnail_width"
                    android:layout_height="@dimen/thumbnail_height"
                    android:paddingBottom="5dip"
                    android:paddingTop="5dip"
                    android:paddingRight="5dip"
                    android:paddingLeft="5dip"
                    android:layout_marginRight="5dip"
                    android:clickable="true"
                    android:focusable="true"
                    android:scaleType="fitCenter"
                    android:src="@*android:drawable/nopicture_thumbnail"
                    android:background="@drawable/photo_highlight" />
                <TextView android:id="@+id/name"
                    android:paddingLeft="5dip"
                    android:layout_weight="1"
                    android:layout_width="0dip"
                    android:layout_height="wrap_content"
                    android:gravity="center_vertical"
                    android:textAppearance="?android:attr/textAppearanceLarge" />
            </LinearLayout>

Вот как это выглядит на экране:

enter image description here

Значок камеры установлен по умолчанию. Нажав на это, вы сможете выбрать другое изображение.

Ответы [ 10 ]

143 голосов
/ 14 января 2012

Чтобы расширить ответ Ромена Гая, вот пример.

До:

<LinearLayout 
android:layout_width="fill_parent"
android:layout_height="wrap_content" 
android:layout_marginTop="10dp"  
android:padding="5dp" >

<TextView 
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_weight="1"
    android:text="My Compound Button" />

<ImageView 
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:src="@drawable/my_drawable" />
</LinearLayout>

После:

<TextView  
    android:layout_marginTop="10dp"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content" 
    android:text="My Compound Button" 
    android:drawableRight="@drawable/my_drawable" android:padding="5dp" />
101 голосов
/ 09 июля 2010

Объедините TextView и ImageView в один, используя методы TextView setCompoundDrawable*() или android:drawableLeft.

18 голосов
/ 08 августа 2012

Думаю, я бы тоже попытался получить некоторые дополнительные знаки: вы можете добавить отступ между изображением и текстом, используя android:drawablePadding.https://stackoverflow.com/a/6671544/1224741

3 голосов
/ 27 декабря 2016

Иногда можно заменить ImageView (или несколько) и TextView на один TextView на составные списки. Существует не так много параметров, которые могут быть применены к составной прорисовке с использованием собственного API и этой библиотеки TextViewRichDrawable , но , если вы можете управлять одним TextView вместо использования LinearLayout, вам обязательно следует использовать его .

Список атрибутов и параметров, которые можно применить к составным чертежам:

Размер: ( ДА, действительно ):

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

Четный установить векторный ресурс как нарисованный:

<com.tolstykh.textviewrichdrawable.TextViewRichDrawable
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="Some text"
    app:drawableTopVector="@drawable/some_vector_drawble"
    app:drawableEndVector="@drawable/another_vector_drawable" />

Заполнение Drawable с использованием собственного API android:drawablePadding -> link

Вот пример:

textView rich drawable

2 голосов
/ 20 мая 2013

A LinearLayout, который содержит ImageView и TextView, может более эффективно обрабатываться как составной чертеж (один TextView с использованием drawableTop, drawableLeft, drawableRight и / илиdrawableBottom атрибутов для рисования одного или нескольких изображений, смежных с текстом).

Если два виджета смещены относительно друг друга с полями, это можно заменить атрибутом drawablePadding.

В плагине Eclipse есть быстрое исправление, чтобы выполнить это преобразование.

От: Официальные документы API для Android!

1 голос
/ 28 июля 2015

Когда я следовал приведенному выше коду, текст внутри TextView не был правильно установлен. Вам нужно установить его гравитацию в центр | начать, чтобы достичь того, что показано в заданном вопросе.

Текстовое представление выглядит так:

   <TextView
        android:id="@+id/export_text"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:drawableLeft="@drawable/up_arrow"
        android:drawableStart="@drawable/up_arrow"
        android:gravity="center|start"
        android:text="....."
        android:textSize="@dimen/font_size15" >
    </TextView>
0 голосов
/ 17 октября 2018

Добавить tools:ignore="UseCompoundDrawables" к <LinearLayout>.

0 голосов
/ 17 февраля 2014
    This tag and its children can be replaced by one <TextView/> and a compound drawable



    <?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:gravity="center"
    android:orientation="vertical" >

    <ImageView
        android:id="@+id/imageview"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:focusable="false"
        android:contentDescription="."
        android:padding="3dp" 
        android:src="@drawable/tab_home_btn">
    </ImageView>

    <TextView
        android:id="@+id/textview"       
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" 
        android:text="首页"
        android:textSize="10sp"
        android:textColor="#ffffff">
    </TextView>

</LinearLayout>
0 голосов
/ 07 сентября 2013

Если вы не хотите изменять ImageView и TextView, вы можете изменить версию в AndroidManifest.xml следующим образом:

    <uses-sdk`
    android:minSdkVersion="8"
    android:targetSdkVersion="18" 
    />

Если ваша версия android: targetSdkVersion = "17", измените ееs "18".

Надеюсь, это исправит.Я сделал это и понял правильно

0 голосов
/ 25 ноября 2012

Другой подход - встроить ViewImage в другой LinearLayout (разрешить обрабатывать его с одним идентификатором):

<LinearLayout 
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical" >
    <LinearLayout 
        xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="vertical" >    
        <ImageView
            android:id="@+id/imageView1"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:src="@drawable/blue_3"
            android:layout_gravity="center_horizontal"
            android:paddingTop="16dp" />
    </LinearLayout>
    <TextView 
        android:id="@+id/tvPrompt"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center_horizontal"
        android:paddingTop="16dp"
        android:text="@string/xy" />

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...