2013-08-05 29 views
3

我有自定義EditText s,我注意到他們的背景在他們離開父母時畫錯了。所以我在他們的父母身上使用了android:clipChildren="false"。這工作正常。當他們現在部分離開父母時,他們正確地畫畫Android:clipChildren導致自定義視圖的背景繪製屏幕的全高

雖然這給了我一個新的問題。在較舊的設備上(< Android 2.3?未確認此問題的最大版本是什麼),背景不會被剪裁到其填充。現在,EditText背景正在繪製到屏幕的全高/寬度。這隻發生在初始佈局上。

有沒有人遇到過這個?這真的很奇怪。我不明白爲什麼只有在某些設備上使用android:clipChildren="false"時背景纔會出錯。我需要,但因爲我的EditText可以拖動,並需要繼續繪製父容器外。

回答

1

我剛跑過同樣的問題。這是由ColorDrawables作爲背景引起的(準確地說,一個StateListDrawable(<selector>)包含幾個@color/...項目)。

看起來這是在Android 3.2.4-r1(提交95930e1)中修復的。

在此之前,類註釋常說:

注意一個ColorDrawable [...]無視邊界,這意味着它將即使畫隨處可見,當前剪輯的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> 
+0

其實,你的問題是幫助我弄清楚到底發生了什麼,所以非常感謝你的提問! – oxc

+0

我很確定這就是我最終做的。我花了一段時間來解決這個問題,所以我忘了我問了這個問題!我可能會將你的答案標記爲正確的,因爲我幾乎是正面的,形狀可繪製的方法就是我所做的。 –

+0

謝謝。最重要的是,我只是想讓這些讓其他人找到,它確實讓我足夠長了! – oxc

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