gpt4 book ai didi

android - 为 EditText 创建自定义背景可绘制对象

转载 作者:可可西里 更新时间:2023-11-01 18:43:46 26 4
gpt4 key购买 nike

我正在尝试将自定义可绘制对象设置为 EditText,如下所示:

except

所以我写了这个自定义可绘制对象:

<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android"

android:paddingBottom="12dp"
android:paddingLeft="36dp"
android:paddingRight="12dp"
android:paddingTop="12dp">
<item>
<shape>
<corners android:radius="6dp"/>
<solid android:color="@android:color/white"/>
<stroke
android:width="1dp"
android:color="#BBBBBB"/>
</shape>
</item>
<item
android:width="32dp"
android:gravity="left">
<shape android:shape="rectangle">
<size android:width="32dp"/>
<corners
android:bottomLeftRadius="6dp"
android:topLeftRadius="6dp"/>
<solid android:color="#AAAAAA"/>
</shape>
</item>
<item android:left="8dp">
<bitmap
android:gravity="left"
android:src="@drawable/ic_email"
android:tileMode="disabled"/>
</item>
</layer-list>

预览效果还不错(除了角大小不同,Android Studio 没有处理)

result in preview

但在设备中,它完全不起作用......第二项被拉伸(stretch)并且不符合宽度属性。

result in device

我知道,我可以用 9-patch 来做,但我想知道是否可以用 drawables 做?

最佳答案

设法使用单个背景可绘制对象和 EditText 上的复合可绘制对象来实现。

bg_edittext_icon.xml

<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">

<item>
<shape>
<corners android:radius="6dp" />
<solid android:color="@android:color/white" />
</shape>
</item>
<item>
<shape>
<solid android:color="#AAAAAA" />
<corners android:radius="6dp" />
</shape>
</item>
<item
android:left="34dp">
<!-- left is icon size + 2x side padding around icon-->
<!-- 18 + 8 + 8 -->
<shape>
<solid android:color="@android:color/white" />
<corners android:radius="6dp"
android:topRightRadius="6dp"
android:topLeftRadius="0dp"
android:bottomRightRadius="6dp"
android:bottomLeftRadius="0dp"/>
</shape>
</item>
<item>
<shape>
<corners android:radius="6dp" />
<solid android:color="@android:color/transparent" />
<stroke
android:width="1dp"
android:color="#BBBBBB" />
</shape>
</item>
</layer-list>

在你的布局中,像这样使用它:

<EditText
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@drawable/bg_edittext_icon"
android:inputType="textEmailAddress"
android:drawableLeft="@drawable/ic_email_white_18dp"
android:drawablePadding="20dp"
android:paddingLeft="8dp"
android:paddingRight="12dp"
android:paddingTop="12dp"
android:paddingBottom="12dp"
android:hint="Email"
/>

使用 paddingLeft 灰色框内的图标填充和 drawablePadding 灰色框内的填充 + 编辑区的填充。

这是 Genymotion(又名真实设备)的结果:

Result from real device

希望你喜欢!

关于android - 为 EditText 创建自定义背景可绘制对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32589596/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com