Когда открывается программная клавиатура, высота действия изменяется, и ImageView снова обрезает изображение. Это проблема. Вот идея для решения этой проблемы: если ImageView обрезает исходное изображение снизу, а не сверху и снизу, то верхняя часть изображения будет всегда фиксированной, и вы больше не увидите эту проблему. Итак, вам нужен собственный ImageView, который обрезает изображения только снизу. Благодаря @Dori и его великому ответу , чтобы предоставить ImageViewTopCrop
.
/**
* @author doriancussen
*/
public class ImageViewTopCrop extends ImageView
{
public ImageViewTopCrop(Context context)
{
super(context);
setScaleType(ScaleType.MATRIX);
}
public ImageViewTopCrop(Context context, AttributeSet attrs)
{
super(context, attrs);
setScaleType(ScaleType.MATRIX);
}
public ImageViewTopCrop(Context context, AttributeSet attrs, int defStyle)
{
super(context, attrs, defStyle);
setScaleType(ScaleType.MATRIX);
}
@Override
protected boolean setFrame(int l, int t, int r, int b)
{
Matrix matrix = getImageMatrix();
float scaleFactor = getWidth()/(float)getDrawable().getIntrinsicWidth();
matrix.setScale(scaleFactor, scaleFactor, 0, 0);
setImageMatrix(matrix);
return super.setFrame(l, t, r, b);
}
}
Измените ваш xml макет, как показано ниже:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent">
<com.doridori.lib.view.ImageViewTopCrop
android:layout_width="match_parent"
android:layout_height="match_parent"
android:src="@drawable/dog" />
<ScrollView
android:id="@+id/layout_scroll"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:fitsSystemWindows="true"
android:visibility="visible">
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical">
<EditText
android:id="@+id/postal_code"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="Postcode" />
</RelativeLayout>
</ScrollView>
</RelativeLayout>
Важно: Будьте осторожны с dog
форматом изображения. Его высота должна быть достаточно большой, чтобы заполнить экран после удаления изображения в зависимости от ширины экрана. PS: Если этот ответ полезен, не забудьте поднять голос @dori answer .