ImageView изменяет размеры при открытой клавиатуре

Это мой код

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="match_parent" >

<ImageView
    android:id="@+id/bgImage"
    android:layout_width="fill_parent"
    android:layout_height="match_parent"
    android:layout_alignParentTop="true"
    android:contentDescription="@string/todo"
    android:scaleType="fitXY"
    android:src="@drawable/default_wallpaper" />

<LinearLayout
    android:id="@+id/mainLayout"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:layout_below="@+id/title"
    android:orientation="vertical" >

    <ListView
        android:id="@+id/in"
        android:layout_width="fill_parent"
        android:layout_height="0dp"
        android:layout_weight="1"
        android:background="@android:color/transparent"
        android:cacheColorHint="@android:color/transparent"
        android:divider="@android:color/transparent"
        android:stackFromBottom="true"
        android:transcriptMode="alwaysScroll" />

    <LinearLayout
        android:layout_width="fill_parent"
        android:layout_height="50dp"
        android:orientation="horizontal" >

        <EditText
            android:id="@+id/edit_text_out"
            android:layout_width="0dp"
            android:layout_height="fill_parent"
            android:layout_gravity="bottom"
            android:layout_weight="1"
            android:inputType="none" />

        <Button
            android:id="@+id/button_send"
            android:layout_width="70dp"
            android:layout_height="fill_parent"
            android:text="@string/send"
            android:textSize="15sp"
            android:textStyle="bold" />
    </LinearLayout>
</LinearLayout>

</RelativeLayout>

В этом, когда я нажимаю на EditText мягкая клавиатура открывается но мой ImageView сокращается.

я использовал android:windowSoftInputMode="adjustPan" в файле манифеста, но с помощью этого он увеличит верхнюю часть всей активности, но я хочу, чтобы ImageView был как есть, и когда клавиатура открыта, ImageView вырезан снизу, а не сверху, как в WhatsApp приложение.

Любая помощь оценит. Спасибо..

3 ответа

У меня была похожая проблема, в которой пользовательский вид - ParallaxBackground - то, что я адаптировал, должно было действовать как фоновое изображение с эффектом параллакса, управляемым прокруткой ViewPager в той же деятельности.

Другими словами, у меня есть вид, который отображает изображение с шириной, немного превышающей ширину экрана, и когда пользователь прокручивает вдоль ViewPagerизображение в ParallaxBackground немного прокручивает.

Теперь в моем случае у меня были некоторые EditTexts внутри фрагментов моего ViewPager, и когда пользователь нажимал на них, вызывая отображение программной клавиатуры, ParallaxBackground (и, следовательно, фоновое изображение) было бы изменено в размерах и сжато "против моей воли". ".

Поэтому я добавил boolean isBackground, два intс для fixedWidth а также fixedHeight и перевесил мой взгляд onMeasure() вот так:

 @Override
 protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {


    if(isBackground) 
    // If this is being used as a background and is supposed to occupy the whole screen...
    {
                    // force the View to have the specified dimensions
        setMeasuredDimension(fixedWidth, fixedHeight);
    }
    // ...aply default measures...
    else
    {
        super.onMeasure(widthMeasureSpec, heightMeasureSpec);
    }

 }

Я знаю, что это не "красивое" решение, но, хотя мой ответ не на 100% связан с вашей проблемой, вы можете попробовать расширить ImageView класс и переопределение onMeasure,

Тогда в вашем onCreate метод, который вы можете установить isBackground чтобы правда и дать fixedWidth а также fixedHeight значения для вашей измеренной ширины экрана и высоты.

Удалить родительский макет (RelativeLayout) и сделать LinearLayout содержащий только диалоговое окно, родитель! плюс, добавить android:windowSoftInputMode="stateVisible|adjustResize" к AndroidManifest.xml

Добавить фоновое изображение из Java, а не из XML:

getActivity().getWindow().setBackgroundDrawable(getResources().getDrawable(R.drawable.splash_image));

В манифест добавить

android:windowSoftInputMode="adjustResize|stateHidden"

Скрытое состояние может быть записано в соответствии с требованием, если вам нужно скрыть клавиатуру при открытии экрана

Другие вопросы по тегам