我知道在 Android 中我们可以使用函数 setCompoundDrawables(..) 来添加可绘制对象。
我的问题是我的 EditText 是多行的,我想把 drawable 放在 EditText 的左上角。但是使用 setCompoundDrawables() 函数,只能选择将可绘制对象放在特定的一侧。
Android API 是否有可能做到这一点?
我知道在 Android 中我们可以使用函数 setCompoundDrawables(..) 来添加可绘制对象。
我的问题是我的 EditText 是多行的,我想把 drawable 放在 EditText 的左上角。但是使用 setCompoundDrawables() 函数,只能选择将可绘制对象放在特定的一侧。
Android API 是否有可能做到这一点?
似乎只有EditText
/TextView
没有任何副作用和额外的视图是不可能的(我在最后提供了方法,但它需要更多的图像处理,并且可能不适用于每部手机,因为不同的编辑文本背景取决于制造)。同样的问题已经被问过很多次了:例如这里和这里。
根据我的理解,最简单和最快的方法可能不是上述问题中建议的(通过使用RelativeLayout
),而是使用以下方式(使用+FrameLayout
时您将有 2 个视图与 3 个视图):使您的图标 9patch(使用9patch 工具)。例如,您最初有以下图标:RelativeLayout
ImageView
然后您可以将其转换为以下内容:
(您可以看到黑色像素,它显示要使用视图拉伸的区域和内容区域)
使用以下 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>
给出以下结果(注意编辑的默认框架已经消失):
试试这个:
<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>