3

У меня есть обычай EditText s, и я заметил, что их фоны рисуются неправильно, когда они покидают своих родителей. Поэтому я использовал android:clipChildren="false" для своих родителей. Это прекрасно работает. Они правильно рисуют, когда частично из своего родителя.Android: clipChildren Заставляет фон пользовательского представления рисовать полную высоту экрана

Это дало мне новую проблему. На более старых устройствах (< Android 2.3? Не подтверждено, что такое максимальная версия для этой проблемы), фон не привязан к его дополнению. Фон EditText теперь рисует на полную высоту/ширину экрана. Это происходит только при первоначальной компоновке.

Неужели кто-нибудь испытал это раньше? Это действительно странно. Я не понимаю, почему фон только рисует неправильно при использовании android:clipChildren="false" и только на некоторых устройствах. Мне нужно это, хотя с моего EditText s можно перетащить и нужно продолжать рисовать вне своего родительского контейнера.

ответ

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