显示键盘时布局调整错误

时间:2013-04-23 15:16:09

标签: android

当我点击我的编辑文字并且我的键盘出现时,一切似乎都没问题,如下图所示:

enter image description here

但是当它必须缩小一点时,我的图像会调整大小,扩展一个不可见的区域,而我的TextView仍然像开始时一样大,那么我的布局不再适用了:

enter image description here

我尝试为xhdpi分辨率创建新的图像和尺寸,但它没有任何效果

我该如何解决?我怎样才能按比例调整所有内容。 (我已尝试放置一个scrollview,但我的布局中有一个ListView,如下面的代码所示)

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:background="@drawable/login_background"
    android:descendantFocusability="beforeDescendants"
    android:clickable="true"
    android:focusableInTouchMode="true"
    tools:context=".LoginActivity"
    android:id="@+id/fundoLogin" >

  <RelativeLayout
      android:id="@+id/relativeLayout2"
      android:layout_width="wrap_content"
      android:layout_height="wrap_content"
      android:layout_centerHorizontal="true"
      android:layout_centerVertical="true" >

      <ImageView
          android:id="@+id/image_login_fields"
          android:layout_width="wrap_content"
          android:layout_height="wrap_content"
          android:layout_below="@+id/image_logo"
          android:layout_centerHorizontal="true"
          android:contentDescription="@string/img_login_fields_desc"
          android:src="@drawable/login_fields">

      </ImageView>

      <ImageView
          android:id="@+id/image_logo"
          android:layout_width="wrap_content"
          android:layout_height="wrap_content"
          android:layout_alignParentTop="true"
          android:layout_centerHorizontal="true"
          android:layout_marginBottom="@dimen/margin_logo_to_fields"
          android:contentDescription="@string/img_logo_desc"
          android:src="@drawable/logo" />

          <TextView
              android:id="@+id/labelLogin"
              android:layout_width="wrap_content"
              android:layout_height="wrap_content"
              android:layout_alignTop="@id/image_login_fields"
              android:layout_alignLeft="@id/image_login_fields"
              android:layout_marginTop="@dimen/margin_top_label_login"
              android:layout_marginLeft="@dimen/margin_left_label_login"
              android:text="@string/login"
              android:textSize="@dimen/login_txt_size"
              />

          <EditText
              android:id="@+id/txtFieldLogin"
              android:layout_width="wrap_content"
              android:layout_height="wrap_content"
              android:layout_marginLeft="@dimen/margin_left_txt_field_login"
              android:layout_alignTop="@id/image_login_fields"
              android:layout_toRightOf="@id/labelLogin"
              android:layout_alignRight="@id/image_login_fields"
              android:layout_marginRight="@dimen/margin_right_txt_field_login"
              android:layout_marginTop="@dimen/margin_top_txt_field_login"
              android:ems="10"
              android:textSize="@dimen/login_txt_size"
              android:hint="@string/txtFieldLoginHint"
              android:singleLine="true" >
          </EditText>

          <TextView
              android:id="@+id/labelSenha"
              android:layout_below="@id/labelLogin"
              android:layout_alignLeft="@id/image_login_fields"
              android:layout_width="wrap_content"
              android:layout_height="wrap_content"
              android:layout_marginTop="@dimen/margin_top_label_senha"
              android:layout_marginLeft="@dimen/margin_left_label_senha"
              android:text="@string/senha"
              android:textSize="@dimen/senha_txt_size" />

          <EditText
              android:id="@+id/txtFieldSenha"
              android:layout_width="wrap_content"
              android:layout_height="wrap_content"
              android:layout_below="@id/txtFieldLogin"
              android:layout_alignLeft="@id/txtFieldLogin"
              android:layout_alignRight="@id/txtFieldLogin"
              android:layout_marginTop="@dimen/margin_top_txt_field_senha"
              android:ems="10"
              android:hint="@string/txtFieldSenhaHint"
              android:singleLine="true"
              android:textSize="@dimen/senha_txt_size"></EditText>

          <ImageButton
              android:id="@+id/btnEntrar"
              android:layout_width="wrap_content"
              android:layout_height="wrap_content"
              android:layout_alignRight="@id/image_login_fields"
              android:layout_alignBottom="@id/image_login_fields"
              android:layout_marginRight="@dimen/margin_right_btn_entrar"
              android:layout_marginBottom="@dimen/margin_bottom_btn_entrar"
              android:background="@drawable/btn_entrar_clicked"
              android:contentDescription="@string/btn_entrar_desc"
              />

      <ListView
          android:id="@+id/listEmails"
          android:layout_width="wrap_content"
          android:layout_height="wrap_content"
          android:layout_above="@id/image_login_fields"
          android:layout_alignRight="@id/image_login_fields"
          android:layout_alignLeft="@id/txtFieldLogin"
          android:background="@drawable/rounded_corner"
          android:visibility="invisible" >
      </ListView>

  </RelativeLayout>

   <Button
       android:id="@+id/btnTeste"
       android:layout_width="wrap_content"
       android:layout_height="wrap_content"
       android:layout_alignParentBottom="true"
       android:layout_alignParentRight="true"
       android:textSize="@dimen/btn_teste_txt_size"
       android:layout_marginRight="@dimen/margin_right_btn_teste"
       android:layout_marginBottom="@dimen/margin_bottom_btn_teste"
       android:text="@string/btnCredenciaisDeTesteTxt"
       android:textColor="@color/white" />

</RelativeLayout>

1 个答案:

答案 0 :(得分:3)

您要找的是android:windowSoftInputMode中的AndroidManifest属性。这可以控制屏幕对所显示键盘的响应方式。现在它似乎正在使用adjustResize,并且您希望adjustPan所以在清单中的Activity声明中添加:

<activity android:windowSoftInputMode="adjustPan"

您可以在此处详细了解您的选项:

http://developer.android.com/guide/topics/manifest/activity-element.html#wsoft

如果您想要调整屏幕大小,则需要重新考虑布局。

首先,将登录背景作为单独的ImageView的不良形式。由于您希望调整大小,因此应以最小的必要大小为图像创建9补丁。这使容器定义图像的大小,而不是图像本身。

其次,仅将TextViewsEditText包裹在RelativeLayout中,然后将您创建的9补丁作为RelativeLayout的背景应用。现在,您将始终拥有一个登录框,即使在调整大小时也会按照您设计的方式包装您的视图。