如何在键盘出现时正确调整布局大小?

时间:2015-05-25 23:36:13

标签: android android-layout scrollview android-softkeyboard

在Android中,我重现了以下布局:

enter image description here

这样:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="#94F734"
    android:orientation="vertical">

    <LinearLayout  
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_marginTop="48dp"
        android:layout_marginLeft="48dp"
        android:padding="0dp">

        <include layout="@layout/header"/>

    </LinearLayout>

    <RelativeLayout 
        android:id="@+id/body"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_marginLeft="48dp"
        android:layout_marginRight="48dp"
        android:layout_marginBottom="48dp"
        android:paddingTop="96dp"
        android:background="#463779B3"
        android:visibility="visible">

        <TextView
            android:id="@+id/name"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:textSize="28dp"
            android:text="title"
            android:layout_above="@+id/code"
            android:layout_centerHorizontal="true"
            android:layout_marginBottom="48dp"
            android:layout_marginLeft="8dp"
            android:layout_marginRight="8dp"
            android:textColor="#000000"/>

        <EditText
            android:id="@+id/code"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:ems="10"
            android:hint="Insert here "
            android:background="@drawable/back_item_edit"
            android:textColor="#FFFFFF"
            android:layout_centerVertical="true"
            android:layout_marginLeft="36dp"
            android:layout_marginRight="36dp">
            <requestFocus />

        </EditText>

        <Button
            android:id="@+id/prova"
            android:layout_below="@id/code"
            style="@style/initialButton"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_marginTop="26dp"
            android:text="Connect"
            android:textColor="#000000"
            android:layout_alignLeft="@id/code"
            android:layout_alignRight="@id/code"
            android:layout_marginLeft="8dp"
            android:layout_marginRight="8dp"
            android:visibility="visible"/>

    </RelativeLayout>

</LinearLayout>

但是当我点击&#34;在这里插入&#34;出现一个问题:布局未正确调整大小,并且不适合小屏幕。

我想使用滚动视图,但我不知道如何使用它。

当键盘出现时,我会显示:

  • 标题(如果有空间)
  • 标题(如果有空间)
  • 在此处插入
  • 连接
  • 布局的绿色部分(如果有空间)
  • 键盘

有没有办法解决我的问题?

2 个答案:

答案 0 :(得分:2)

首先,使用“dpi”指定许多参数,例如:

android:layout_marginTop="48dp"

这不适用于动态调整大部分内容。无论屏幕上其他元素的大小如何,您都要求高度为特定高度。

要解决此问题,首先需要远离绝对测量,并开始使用运行时测量。通常,您可以简单地使用“hdpi”,“xhdpi”等文件夹来管理它,但使用键盘的布局是一种动态测量(在运行时)。

您可以使用加权LinearLayout等XML提示根据可用尺寸调整到屏幕。您还可以使用Java代码来更改元素的大小。但是你不能指望屏幕会显示大于可用空间的元素(这是它现在遇到的问题)。此外,您还需要确定元素将如何“挤压”在一起。

编辑:

要根据屏幕大小/密度使不同的布局具有不同的边距等,您应该查看每个屏幕密度的文件夹(例如,“layout-xhdpi”的文件夹)。

以下是文档:http://developer.android.com/guide/practices/screens_support.html

包括使用“dimens”文件夹,例如:

Different values folders in android

因此,您有很多处理动态屏幕尺寸的选项。但也许对许多情况(比如你的情况)来说“最简单”就是使用displayMetrics并相应地调整你的元素:

getting the screen density programmatically in android?

您可以测量,调整大小等。每个元素都有不同的LayoutParams或其他属性,允许您以编程方式更改它们。您可能需要搜索要更改的特定内容。

答案 1 :(得分:1)

您可以在清单文件中将此属性用于您的活动windowSoftInputMode