Android:使用屏幕上的软键盘仅调整部分视图的大小

时间:2023-02-16
本文介绍了Android:使用屏幕上的软键盘仅调整部分视图的大小的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着跟版网的小编来一起学习吧!

问题描述

我在 ImageView 顶部有一个带有 Edittext 字段的视图.当键盘出现时,我希望窗口调整大小,以便 EditText 不再被键盘隐藏.在 AndroidManifest 文件中,我声明了 android:windowSoftInputMode="adjustResize" 并调整了屏幕大小,但问题是我希望不调整 ImageView 的大小.如何使 ImageView 不受影响?

I have a view with a Edittext field on top of an ImageView. When the keyboard comes up I want the window to resize so that EditText is no longer hidden by the keyboard. In the AndroidManifest file I declared android:windowSoftInputMode="adjustResize" and the screen is resized but the issue is that I want the ImageView to not be re-sized. How can I make the ImageView unaffected?

我可以只用 ImageView 来扩展一个额外的布局,还是调整大小仍然会影响它?

Could I inflate an additional layout with just the ImageView or will the resize still affect it?

推荐答案

完整的解决方案涉及几个关键点

The full solution involves a few key points

  • 使用RelativeLayout,这样Views可以设置成相互重叠
  • 使用 android:layout_alignParentBottom="true"
  • EditTextWindows 的底部对齐
  • 在您的清单中使用 android:windowSoftInputMode="adjustResize",以便在键盘弹出时 Window 的底部会发生变化(如您所述)
  • ImageView放在一个ScrollView里面,这样ImageView就可以比Window大,然后禁用使用 ScrollView#setEnabled(false)
  • ScrollView 上滚动
  • Use RelativeLayout, so that Views can be setup to overlap one another
  • Align the EditText with the bottom of the Windows using android:layout_alignParentBottom="true"
  • Use android:windowSoftInputMode="adjustResize" in your manifest, so that the bottom of the Window changes when the keyboard pops up (as you mentioned)
  • Put the ImageView inside a ScrollView so that the ImageView can be larger than the Window, and disable scrolling on the ScrollView by using ScrollView#setEnabled(false)

这是布局文件

<RelativeLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context="com.so3.MainActivity">
    <ScrollView
        android:id="@+id/scroll"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content">
        <ImageView
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:adjustViewBounds="true"
            android:src="@drawable/stickfigures"/>
    </ScrollView>
    <EditText
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:layout_alignParentBottom="true"
        android:background="@android:color/holo_blue_bright"
        android:text="Please enter text"
        android:textSize="40sp"
        android:gravity="center_horizontal"/>
</RelativeLayout>

这是我的活动

package com.so3;

import android.app.Activity;
import android.os.Bundle;
import android.widget.ScrollView;

public class MainActivity extends Activity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        ScrollView sv = (ScrollView)findViewById(R.id.scroll);
        sv.setEnabled(false);
    }
}

我的安卓清单

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"    package="com.so3" >
    <application
        android:allowBackup="true"
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name"
        android:theme="@style/AppTheme" >
        <activity
            android:name="com.so3.MainActivity"
            android:windowSoftInputMode="adjustResize"
            android:label="@string/app_name" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>
</manifest>

我的解决方案的屏幕截图

Screen shots of my solution

这篇关于Android:使用屏幕上的软键盘仅调整部分视图的大小的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持跟版网!

上一篇:获得焦点时选择 EditText 内的所有文本 下一篇:如何更改 EditText 选择句柄/锚点的颜色/外观?

相关文章

最新文章