android布局:这个标签及其子元素可以被一个<TextView />和一个复合的drawable所取代

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

这是它在屏幕上的样子:

在这里输入图像说明

相机图标是默认设置。 点击它会让用户select另一个图像。

为了扩大罗曼盖伊的答案,这里是一个例子。

之前:

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

通过使用TextView的setCompoundDrawable*()方法或者使用android:drawableLeftTextViewImageView合并成一个。

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

有时候可以用一个TextViewreplaceImageView (或多个)和TextView ,并使用复合drawable(s)。 使用本地API和TextViewRichDrawable库可以应用于复合绘制的参数不多 ,但是如果您可以pipe理一个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"/> 

即使将vector资源设置为可绘制:

 <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 – > 链接

这里是一个例子:

textView丰富的绘制

包含ImageViewTextView LinearLayout可以更有效地处理为复合可绘制(单个TextView ,使用drawableTopdrawableLeftdrawableRight和/或drawableBottom属性在文本旁边绘制一个或多个图像)。

如果这两个小部件彼此之间有空白,则可以用drawablePadding属性replace。

有一个lint quickfix在Eclipse插件中执行这个转换。

来自:Android官方API文档!

当我遵循上面的代码时,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> 

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

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

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

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

另一种方法是将ViewImageembedded另一个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" /> 
  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>