Android:clipChildren导致自定义视图的背景绘制完整的屏幕高度

时间:2013-08-05 15:11:47

标签: android background drag-and-drop android-edittext clipping

我有自定义EditText,我注意到他们离开父母时背景错误。所以我在他们的父母身上使用了android:clipChildren="false"。这很好。他们现在部分地从他们的父母那里得出正确的。

这给了我一个新问题。在较旧的设备上(< Android 2.3?未确认此版本的最大版本是什么),背景不会被剪裁到它的填充。 EditText背景现在正在绘制到屏幕的整个高度/宽度。这只发生在初始布局上。

以前有没有人经历过这个?这真的很奇怪。我不明白为什么背景只会在使用android:clipChildren="false"并且仅在某些设备上使用时出错。我需要这个,因为我的EditText可以被拖动,需要继续在父容器外绘图。

2 个答案:

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