当我在特定的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>
这就是屏幕上的样子:
相机图标是默认设置。单击它将为用户提供选择其他图像的选项。
答案 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
方法或使用ImageView
将setCompoundDrawable*()
和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
以下是一个例子:
答案 4 :(得分:2)
包含LinearLayout
和ImageView
的{{1}}可以
更有效地处理作为复合drawable(单一的
TextView
,使用TextView
,drawableTop
,drawableLeft
和/或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>