键盘打开时,ImageView会调整大小

时间:2013-02-28 12:59:52

标签: android android-layout relativelayout android-softkeyboard

这是我的代码

<?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是从底部切割而不是从顶部切割,如{{1应用程序。

任何帮助都会表示赞赏。谢谢..

3 个答案:

答案 0 :(得分:2)

我遇到了一个类似的问题,其中我自己调整的自定义视图 - ParallaxBackground应该充当背景图像,具有由ViewPager的滚动驱动的视差效果同样的活动。

换句话说,我有一个显示宽度略大于屏幕的图像的视图,当用户沿着ViewPager滚动时,ParallaxBackground中的图像也会滚动一点

现在在我的情况下,我在ViewPager的片段中有一些EditTexts,当用户点击它们,导致软键盘显示时,ParallaxBackground(以及背景图像)将被重新调整大小和挤压“违背我的意愿”。

所以我为boolean isBackgroundint添加了fixedWidth,两个fixedHeight并覆盖了我的View 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。< / p>

然后,在onCreate方法中,您可以将isBackground设置为true,并为您的测量屏幕宽度和高度提供fixedWidthfixedHeight

答案 1 :(得分:1)

删除父布局(RelativeLayout)并使LinearLayout仅包含对话框,父级!另外,将android:windowSoftInputMode="stateVisible|adjustResize"添加到AndroidManifest.xml

答案 2 :(得分:0)

从Java而不是从XML添加背景图片:

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

在清单中添加

android:windowSoftInputMode="adjustResize|stateHidden"

如果必须在屏幕打开时隐藏键盘,则可以根据要求编写隐藏状态