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"
Скрытое состояние может быть записано в соответствии с требованием, если вам нужно скрыть клавиатуру при открытии экрана