Скажем, у меня есть представление, состоящее из двух слоев -> верхнего и нижнего слоя. Я размещаю их обоих в макете кадра.

<FrameLayout
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <!-- bottom layer -->
    <ImageView 
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:src="@drawable/some_image_you_shouldnt_shrink"/>

    <!-- top layer -->
    <EditText 
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:background="@color/somewhat_transparent"/>

</FrameLayout>

Теперь, предположительно, когда я нажимаю на editText, клавиатура выскакивает и сокращает размер редактируемого текста. Однако кажется, что размер нижнего слоя ТАКЖЕ изменяется. Как предотвратить изменение размера этого нижнего слоя?

Примечание: раскладка кадра находится во фрагменте, и действие, содержащее этот фрагмент, должно объявлять android:windowSoftInputMode="adjustResize".

ИЗМЕНИТЬ * * ** * ** * *

Чтобы прояснить, я хочу, чтобы слой editText настраивался настолько высоко, насколько это необходимо для клавиатуры. однако я не хочу, чтобы изображение за ним вообще корректировалось

У меня есть только 1 действие, которое обрабатывает подобные типы фрагментов.

2
David T. 21 Мар 2014 в 08:13

2 ответа

Лучший ответ

Вы не можете предотвратить изменение размера отдельного представления, если вы установите android:windowSoftInputMode="adjustResize". Но если вы просто хотите установить фон без изменения размера, есть обходной путь. Вместо того, чтобы устанавливать фоновое изображение в ImageView через XML, добавьте это в свой метод onCreate()

getWindow().setBackgroundDrawableResource(R.drawable.some_image_you_shouldnt_shrink);
1
desidigitalnomad 21 Мар 2014 в 09:24
Предполагается, что поведение по умолчанию — панорамирование и сканирование. Пожалуйста, попробуйте без указания какого-либо режима, и если он по-прежнему не работает, попробуйте android:windowSoftInputMode="adjustPan"
 – 
desidigitalnomad
21 Мар 2014 в 08:36
Интересно. что, если я хочу, чтобы это было только у определенных макетов/фрагментов, но не у всех остальных фрагментов? у меня есть только 1 действие, поэтому я должен объявить либо adjustPan, либо нет
 – 
David T.
21 Мар 2014 в 08:46
Это не сработает, потому что не позволяет изменять размер моего текста редактирования
 – 
David T.
21 Мар 2014 в 08:57
Я попробовал ваш сценарий здесь и отредактировал ответ в соответствии с тем, что я мог сделать.
 – 
desidigitalnomad
21 Мар 2014 в 09:25

Попробуйте это в манифесте

android:windowSoftInputMode="stateVisible|adjustPan"
1
David T. 21 Мар 2014 в 08:47