【android】软键盘 - 仿 qq/微信 聊天界面布局

android 专栏收录该内容
8 篇文章 0 订阅

目录

  • 操作环境
  • 导读
  • 目标
  • 实现原理
  • 实现内容
  • demo 效果

操作环境

  • 操作系统:win7-64bit 旗舰版
  • android 版本:android-23
  • 模拟器信息:
    • api:19
    • 分辨率:480x800
    • dpi:160

导读

软键盘的弹出通常会将部分布局顶出屏幕外,或者直接覆盖在屏幕上的效果,或让人觉得很突兀,或无法时时刻刻看到底部输入框的内容;无法直接做出像 qq/微信 这样人性化的效果;

目标

实现目标:底部的输入框获取焦点后会将聊天内容顶上去一部分,但是聊天界面最上面的名称栏保持不动;

(图片均摘自百度)
软键盘隐藏
这里写图片描述

软键盘弹出
这里写图片描述

实现原理

  • 利用 FrameLayout 布局
  • 对标题栏,底部输入栏,消息内容栏划分层次结构
  • 设置适当的 android: windowSoftInputMode 值

实现内容

布局文件:

<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    >
    <!--第一层次:底部输入框 和 消息显示框-->
    <RelativeLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent">
        <!--输入框紧贴底部-->
        <EditText android:id="@+id/et_input"
            android:layout_width="match_parent"
            android:layout_height="50dp"
            android:background="#ccc"
            android:text="gray"
            android:layout_alignParentBottom="true"
            />
        <!--消息显示框紧贴输入框顶部-->
        <TextView
            android:layout_width="match_parent"
            android:layout_height="700dp"
            android:background="#f00"
            android:text="可用于设置 ListView"
            android:gravity="bottom"
            android:layout_above="@id/et_input"
            />
    </RelativeLayout>
    <!--第二层次:顶部栏,因为采用了 FrameLayout,所以这一层次 相较于 上面描述的第一层次 来说更靠近用户-->
    <TextView
        android:layout_width="match_parent"
        android:layout_height="50dp"
        android:background="#00f"
        android:text="blue"
        />

</FrameLayout> 

设置 android: windowSoftInputMode:

  1. 打开项目的 AndroidManifest.xml 文件;
  2. 在对应的 activity 标签中添加属性:android: windowSoftInputMode:adjustResize;

demo 效果

软键盘隐藏:
这里写图片描述
软键盘弹出:
这里写图片描述

  • 0
    点赞
  • 4
    评论
  • 1
    收藏
  • 打赏
    打赏
  • 扫一扫,分享海报

©️2022 CSDN 皮肤主题:大白 设计师:CSDN官方博客 返回首页

打赏作者

natloc

你的鼓励将是我创作的最大动力

¥2 ¥4 ¥6 ¥10 ¥20
输入1-500的整数
余额支付 (余额:-- )
扫码支付
扫码支付:¥2
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值