美文网首页
Android问题小结之软键盘弹出,布局整体上移

Android问题小结之软键盘弹出,布局整体上移

作者: 木子闲集 | 来源:发表于2021-02-18 16:17 被阅读0次

问题描述

在Recyclerview中添加EditText控件,activity的布局底部加上Button,用户在点击EditText的时候弹出软键盘,布局整体向上滑动,软键盘不覆盖布局。效果图如下:


SVID_20210218_161500_16_gif.gif

解决方案:
项目若没有引入ImmersionBar 第三方,则只需要按照下面的源码书写即可,若引入了ImmersionBar这个第三方,则需要在该页面初始化状态栏的时候添加上.keyboardEnable(true)这个属性,即可实现该效果。

源码 activity_main.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"
    android:orientation="vertical">

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_above="@+id/btn_submit"
        android:gravity="center_vertical"
        android:orientation="vertical">

        <androidx.core.widget.NestedScrollView
            android:layout_width="match_parent"
            android:layout_height="match_parent">

            <androidx.recyclerview.widget.RecyclerView
                android:id="@+id/rv"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:layout_gravity="center_horizontal"
                android:layout_marginTop="100dp"
                android:gravity="center" />

        </androidx.core.widget.NestedScrollView>
    </LinearLayout>

    <Button
        android:id="@+id/btn_submit"
        android:layout_width="match_parent"
        android:layout_height="50dp"
        android:layout_alignParentBottom="true"
        android:background="@color/black"
        android:text="提交答案" />

    <TextView
        android:layout_width="match_parent"
        android:layout_height="50dp"
        android:layout_alignParentTop="true"
        android:background="@color/white"
        android:gravity="center"
        android:text="标题" />
</RelativeLayout>

源码 activity_main.xml布局文件

<?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="wrap_content"
    android:orientation="vertical">

    <ImageView
        android:layout_width="match_parent"
        android:layout_height="600dp"
        android:scaleType="fitXY"
        android:src="@mipmap/ic_launcher" />

    <EditText
        android:id="@+id/et"
        android:layout_width="match_parent"
        android:layout_height="50dp"
        android:background="#769"
        android:hint="内容" />
</LinearLayout>

源码 EditAdapter.java

package com.elaine.testkeysoftware;

import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;

import androidx.annotation.NonNull;
import androidx.recyclerview.widget.RecyclerView;

import java.util.List;

/**
 * author: elaine
 * date: 2021/2/18
 */
public class EditAdapter extends RecyclerView.Adapter<EditAdapter.EditViewHolder> {
    private List<String> etString;

    public EditAdapter(List<String> etString) {
        this.etString = etString;
    }

    @NonNull
    @Override
    public EditViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
        View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.item_edit, parent, false);
        return new EditViewHolder(view);
    }

    @Override
    public void onBindViewHolder(@NonNull EditViewHolder holder, int position) {

    }

    @Override
    public int getItemCount() {
        return etString.size();
    }

    public static class EditViewHolder extends RecyclerView.ViewHolder {

        public EditViewHolder(@NonNull View itemView) {
            super(itemView);
           
        }
    }
}

源码 MainActivity.java

package com.elaine.testkeysoftware;

import androidx.appcompat.app.AppCompatActivity;
import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.RecyclerView;

import android.os.Bundle;

import com.gyf.immersionbar.ImmersionBar;

import java.util.ArrayList;
import java.util.List;

public class MainActivity extends AppCompatActivity {
    private RecyclerView rv;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        //ImmersionBar初始化会影响软键盘的弹出,所以需要设置keyboardEnable(true)
        //ImmersionBar.with(this).reset().statusBarDarkFont(false, 0.5f).keyboardEnable(true).init();

        rv = findViewById(R.id.rv);
        List<String> data = new ArrayList<>();
        data.add("kala");
        EditAdapter adapter = new EditAdapter(data);
        rv.setLayoutManager(new LinearLayoutManager(this));
        rv.setAdapter(adapter);
    }
}

相关文章

网友评论

      本文标题:Android问题小结之软键盘弹出,布局整体上移

      本文链接:https://www.haomeiwen.com/subject/zufnxltx.html