android layout:这个标签及其子代可以用一个<textview>和一个复合drawable </textview>代替

时间:2010-07-09 16:03:36

标签: android layout

当我在特定的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

相机图标是默认设置。单击它将为用户提供选择其他图像的选项。

11 个答案:

答案 0 :(得分:143)

为了扩展Romain Guy的答案,这是一个例子。

在:

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

答案 1 :(得分:101)

使用TextView的TextView方法或使用ImageViewsetCompoundDrawable*()android:drawableLeft合并为一个。

答案 2 :(得分:18)

以为我会尝试为此添加一些额外的puntos:您可以使用android:drawablePadding在图像和文本之间添加填充。 https://stackoverflow.com/a/6671544/1224741

答案 3 :(得分:3)

有时可以将TextView(或多个)和TextView替换为一个<com.tolstykh.textviewrichdrawable.TextViewRichDrawable android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Some text" app:compoundDrawableHeight="24dp" app:compoundDrawableWidth="24dp"/> 复合drawable(s)。没有很多参数可以应用于使用本机API和TextViewRichDrawable library复合drawable,但是如果你可以管理一个TextView而不是使用LinearLayout你绝对应该使用它

可应用于复合drawables的属性和参数列表:

尺寸:( 是,真的):

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

android:drawablePadding

Drawable的填充使用原生API {{1}} - &gt; link

以下是一个例子:

textView rich drawable

答案 4 :(得分:2)

包含LinearLayoutImageView的{​​{1}}可以  更有效地处理作为复合drawable(单一的  TextView,使用TextViewdrawableTopdrawableLeft      和/或drawableRight属性来绘制一个或多个图像  与文本相邻)。

如果两个小部件之间有边距相互偏移,那么这个  可以使用drawableBottom属性替换。

有一个lint quickfix可以在Eclipse中执行此转换  插件。

来自:Android官方API文档!

答案 5 :(得分:1)

当我按照上面的代码操作时,TextView内的文本没有正确设置。 您需要将其重力设置为中心|开始以实现问题中显示的内容。

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>

答案 6 :(得分:1)

在撰写本文时,添加复合可绘制对象的最新正确方法是使用app:drawableStartCompat而不是android:drawableLeft

<TextView 
    android:layout_marginTop="10dp"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:text="My Compound Button"
    android:drawablePadding="5dp"
    app:drawableStartCompat="@drawable/my_drawable" />

答案 7 :(得分:0)

如果您不想更改ImageView和TextView,可以将AndroidManifest.xml中的版本更改为:

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

如果您的版本是android:targetSdkVersion =“17”则将其更改为“18”。

希望这会纠正。我做到了并且做对了

答案 8 :(得分:0)

tools:ignore="UseCompoundDrawables"添加到<LinearLayout>

答案 9 :(得分:-2)

另一种方法是将ViewImage嵌入到另一个LinearLayout中(允许单独使用id处理它):

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

答案 10 :(得分:-4)

    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>