我知道在Android中我们可以使用函数setCompoundDrawables(..)来添加drawable。
我的问题是我的EditText是多行的,我想把drawable放在EditText的左上角。但是在setCompoundDrawables()函数中使用,只能选择将drawable放在特定的一面。
Android API是否有可能做到这一点?
答案 0 :(得分:5)
似乎不可能仅使用EditText
/ TextView
而没有其他效果和其他视图(我已经提供了最终的方式,但它需要更多的工作与图像,可能不是适用于每部手机,因为不同的编辑文本背景,取决于制造商)。已经多次询问过相同的问题:例如here和here。
根据我的理解,最简单和最紧密的方式可能与上述问题(使用RelativeLayout
)中的建议不同,但只是使用FrameLayout
以下方式(您将有2个视图与3个使用RelativeLayout
+ ImageView
查看:
制作你的图标9patch(使用9patch tool)。例如。您最初有以下图标:
然后您可以将其转换为以下内容:
(你可以看到黑色像素,显示要用视图拉伸的区域和内容区域)
使用以下xml:
<!-- Main activity layout -->
<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent">
<!-- Edit text with drawable at top left -->
<FrameLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:background="@drawable/icon_9patch">
<EditText
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/edit"
android:hint="Enter text"
android:maxLines="10"
android:inputType="textMultiLine" />
</FrameLayout>
</RelativeLayout>
给出以下结果(我添加了多行文字):
此外,甚至可以仅使用EditText
来执行任务(但您可能会松开默认的EditText背景,这可能不太好,但是您可以将其包含在您的ning-patch图像中;但它仍然是在所有手机上都是一样的,而不是原生一个。)
以下xml也可以正常工作:
<!-- Main activity layout -->
<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent">
<!-- Edit text with drawable at top left -->
<EditText
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/edit"
android:hint="Enter text"
android:maxLines="10"
android:inputType="textMultiLine"
android:layout_alignParentBottom="true"
android:background="@drawable/icon_9patch" />
</RelativeLayout>
给出以下结果(请注意,编辑的默认框架已消失):
答案 1 :(得分:0)
试试这个:
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="@dimen/scale_10"
android:orientation="horizontal">
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/map_mark"/>
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginLeft="@dimen/scale_10"
android:gravity="top"
android:text="TEXT HERE"/>
</LinearLayout>