我有自定义EditText
,我注意到他们离开父母时背景错误。所以我在他们的父母身上使用了android:clipChildren="false"
。这很好。他们现在部分地从他们的父母那里得出正确的。
这给了我一个新问题。在较旧的设备上(< Android 2.3?未确认此版本的最大版本是什么),背景不会被剪裁到它的填充。 EditText
背景现在正在绘制到屏幕的整个高度/宽度。这只发生在初始布局上。
以前有没有人经历过这个?这真的很奇怪。我不明白为什么背景只会在使用android:clipChildren="false"
并且仅在某些设备上使用时出错。我需要这个,因为我的EditText
可以被拖动,需要继续在父容器外绘图。
答案 0 :(得分:1)
我遇到了同样的问题。这是因为将ColorDrawables作为背景(StateListDrawable(<selector>
)包含多个@color/...
项,确切地说)。
看起来这已在Android 3.2.4-r1(提交95930e1)中得到修复。
在此之前,课堂评论曾经说过:
请注意,ColorDrawable [...]会忽略Bounds,这意味着即使使用较小的区域调用setBounds(...),它也会在当前剪辑中的任何位置绘制。
这已被删除,draw(Canvas)
方法更改为尊重边界。
作为一种解决方法,如果您需要支持较旧的Android版本,则可以使用纯色的ShapeDrawable来获得相同的行为:
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle">
<solid android:color="@color/your_background_color"/>
</shape>
答案 1 :(得分:0)
我们有一个2.3.4设备,这个问题导致ImageView覆盖它所包含的LinearLayout中的所有内容。 解决方法是创建上面提到的ShapeDrawable并将其用作图像的背景。
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle">
<solid android:color="@color/your_background_color"/>
</shape>
<ImageView
android:id="@+id/this_is"
android:layout_width="100dp"
android:layout_height="100dp"
android:layout_gravity="bottom"
android:background="@drawable/a_rectangle_shape_drawable"
android:contentDescription="@string/an_image_view"
android:scaleType="centerInside"
android:src="@drawable/an_icon" />