使 FAB 响应软键盘显示/隐藏更改

2023-12-24

我看过各种关于 FAB 响应屏幕底部 Snackbar 弹出窗口以及滚动敏感 FAB 的帖子。但是否有一些实施FloatingActionButton.Behavior(或类似)将 FAB 移至键盘上方当它出现时?

现在,当我单击某个按钮时,键盘会覆盖 FABEditText盒子。我的目标是为 FAB 制作动画,使其始终可见,而与键盘状态无关。

EDIT: Both android:windowSoftInputMode="adjustResize" and ...="adjustPan"不会改变任何东西。出色地,adjustResize调整底层布局(在我的例子中是地图)的大小,但 FAB 不会移动。


您好,我知道它已经过时了,但对于未来或当前的读者/搜索者以及线程制造者来说,他还没有找到答案。这就是我在我的应用程序中出现这种行为的方式。

Fab 隐藏在 RecyclerView 滚动条上,当小吃栏弹出时会向上移动,如果 fab 未显示且小吃栏弹出,并且如果您滚动,那么 Fab 仍将显示在小吃栏顶部,并且当 SB 消失时将向下移动,最后使用键盘(如果是)打开Fab就会被推高。 (抱歉,我不得不写,因为我不知道如何用 Eclipse 模拟器给出 gif)

Image

Layout

<android.support.v4.widget.DrawerLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/layout_drawer"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@color/GrayGood"
android:clipToPadding="false"
android:fitsSystemWindows="true" >

<android.support.design.widget.CoordinatorLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/layout_coordinator"
    android:layout_width="match_parent"
    android:layout_height="match_parent" >

    <android.support.design.widget.AppBarLayout
        android:id="@+id/layout_appLayout"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:theme="@style/ThemeOverlay.AppCompat.Dark" >

        <android.support.v7.widget.Toolbar
            android:id="@+id/toolbar"
            android:layout_width="match_parent"
            android:layout_height="?attr/actionBarSize"
            app:layout_scrollFlags="scroll|enterAlways|snap"
            android:background="?attr/colorPrimary" />
    </android.support.design.widget.AppBarLayout>

    <android.support.v7.widget.RecyclerView
        android:id="@+id/recyclerViewMain"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        app:layout_behavior="@string/appbar_scrolling_view_behavior"
        android:clipToPadding="false" />

    <android.support.design.widget.FloatingActionButton
        android:id="@+id/fab"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentBottom="true"
        android:layout_gravity="bottom|end"
        android:layout_margin="@dimen/floating_action_button_margin"
        app:layout_behavior="com.faisal.cvcd.anim.ScrollingFABAnimation"
        android:src="@drawable/ic_fab"
        android:tint="@color/White"
        app:backgroundTint="@color/colorPrimary"
        app:borderWidth="0dp"
        app:elevation="6dp"
        app:fabSize="normal" />
 </android.support.design.widget.CoordinatorLayout>
</android.support.v4.widget.DrawerLayout>

正如您所看到的,我正在使用 FabAnimation 类来覆盖它的一些默认方法。

滚动FAB动画

import android.content.Context;
import android.support.design.widget.CoordinatorLayout;
import android.support.design.widget.FloatingActionButton;
import android.support.design.widget.Snackbar;
import android.support.v4.view.ViewCompat;
import android.util.AttributeSet;
import android.view.View;

public class ScrollingFABAnimation extends
        CoordinatorLayout.Behavior<FloatingActionButton> {

public ScrollingFABAnimation(Context context, AttributeSet attrs) {
    super(context, attrs);
}

//For SnackBar to push up the Floating Button when it pops up
@Override
public boolean layoutDependsOn(CoordinatorLayout parent,    FloatingActionButton child, View dependency) {
    return dependency instanceof Snackbar.SnackbarLayout;
}

@Override
public boolean onDependentViewChanged(CoordinatorLayout parent, FloatingActionButton child, View dependency) {
    float translationY = Math.min(0, dependency.getTranslationY() - dependency.getHeight());
    child.setTranslationY(translationY);
    return true;
}

//For FAB to hide or show on scroll
@Override
public boolean onStartNestedScroll(CoordinatorLayout coordinatorLayout, FloatingActionButton child, View directTargetChild, View target,
        int nestedScrollAxes) {
    return nestedScrollAxes == ViewCompat.SCROLL_AXIS_VERTICAL  || super.onStartNestedScroll(coordinatorLayout, child,
                    directTargetChild, target, nestedScrollAxes);
}

@Override
public void onNestedScroll(CoordinatorLayout coordinatorLayout, FloatingActionButton child, View target, int dxConsumed,
        int dyConsumed, int dxUnconsumed, int dyUnconsumed) {
    super.onNestedScroll(coordinatorLayout, child, target, dxConsumed,  dyConsumed, dxUnconsumed, dyUnconsumed);

    if (dyConsumed > 0 && child.getVisibility() == View.VISIBLE) {
        child.hide();
    } else if (dyConsumed < 0 && child.getVisibility() != View.VISIBLE) {
        child.show();
    }
 }
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使 FAB 响应软键盘显示/隐藏更改 的相关文章

  • 如何清除所有WebView存储的信息?

    我有一个 Android 浏览器 我可以选择清除缓存 存储 cookie 等 代码如下所示 webView clearCache true webView clearFormData webView clearHistory webView
  • 使用workmanager时Firestore脱机持久性错误

    我正在使用一个WorkManger定期从我的中检索信息Firestore当应用程序处于后台和前台时的数据库 此信息用于根据状态更新 UI 因此不同的状态会添加或删除 UI 的不同部分 第一次运行时效果很好 但是 一旦应用程序处于后台并且Wo
  • 如何重试已消耗的 Observable?

    我正在尝试重新执行失败的已定义可观察对象 一起使用 Retrofit2 和 RxJava2 我想在单击按钮时重试特定请求及其订阅和行为 那可能吗 service excecuteLoginService url tokenModel Ret
  • Sqlite数据库生命周期?关闭应用程序后它会被删除吗?

    我正在遵循一个简单的教程 该教程创建一个从 SQLiteOpenHelper 扩展的类 并创建一个包含一个表和 5 行的数据库 好的 但我需要更多地了解 android Sqlite 数据库 例如 如果应用程序关闭或手机关机会发生什么 数据
  • Android 30+ 中的视频捕获意图 - 只有所有者才能与待处理项目交互

    我正在尝试在我的应用程序上捕获视频 它可以在 android API 30 以下运行 但不能在 30 以上运行 似乎在 sdk 30 之后 android 不允许完全读取外部存储 作用域存储 我目前遇到这个错误 java lang Ille
  • Android 后退按钮无法与 Flutter 选项卡内的导航器配合使用

    我需要在每个选项卡内有一个导航器 因此当我推送新的小部件时 选项卡栏会保留在屏幕上 代码运行得很好 但是 android 后退按钮正在关闭应用程序而不是运行 Navigator pop import package flutter mate
  • 如何在android中获取Camera2 API的当前曝光

    In android hardware Camera旧的 我使用下面的代码获取当前曝光并获取它Camera Camera Parameters param mCamera getParameters currentExposure para
  • java.lang.NoClassDefFoundError:org.apache.batik.dom.svg.SVGDOMImplementation

    我在链接到我的 Android LibGDX 项目的 Apache Batik 库时遇到了奇怪的问题 但让我们从头开始 在 IntelliJ Idea 中我有一个项目 其中包含三个模块 Main Android 和 Desktop 我强调的
  • 计数物体和更好的填充孔的方法

    我是 OpenCV 新手 正在尝试计算物体的数量在图像中 我在使用 MATLAB 图像处理工具箱之前已经完成了此操作 并在 OpenCV Android 中也采用了相同的方法 第一步是将图像转换为灰度 然后对其进行阈值计算 然后计算斑点的数
  • 在 java 类和 android 活动之间传输时音频不清晰

    我有一个android活动 它连接到一个java类并以套接字的形式向它发送数据包 该类接收声音数据包并将它们扔到 PC 扬声器 该代码运行良好 但在 PC 扬声器中播放声音时会出现持续的抖动 中断 安卓活动 public class Sen
  • 带有 EditText 和 Spinner 的对话框

    我有一个按钮 单击后会弹出一个对话框 我希望对话框有一个EditText and a Spinner对话框内 我不知道如何设置它的视图 我有一个代码AlertDialog它有效 只是EditText and Spinner我需要将其放入其中
  • 无法访问 com.google.android.gms.internal.zzbfm 的 zzbfm 类文件未找到

    我正在将我的 Android 应用程序项目从GCM to FCM 为此 我使用 Android Studio 中的 Firebase 助手工具 并遵循 Google 开发人员指南中的说明 一切都很顺利 并将我的应用程序代码更改为FCM根据助
  • 发布android后更改应用内购买项目的价格

    在 Google Play 上发布后 是否可以更改应用内购买商品的价格 我假设该应用程序也已发布 完整的在线文档位于http developer android com http developer android com也http sup
  • Ubuntu 16.04 - Genymotion:找不到 /dev/hw_random

    I install Genymotion on the Ubuntu 16 04 64Bit I created a virtual emulator for Android 6 0 then I run this emulator but
  • 尝试在 ubuntu 中编译 android 内核时出错

    我正在尝试从源代码编译 Android 内核 并且我已经下载了所有正确的软件包来执行此操作 但由于某种原因我收到此错误 arm linux androideabi gcc error unrecognized command line op
  • 增加活动的屏幕亮度

    显然 Android 操作系统中至少有三种不同的技术可以改变屏幕亮度 其中两个在纸杯蛋糕之后不再起作用 而第三个被接受的技术显然有一个错误 我想在单视图活动开始时增加屏幕亮度 然后在活动结束时将亮度恢复为用户设置 没有按钮 没有第二个视图或
  • Android:膨胀布局时出现 StackOverFlowError 和 InvokingTargetException

    首先 对不起我的英语 我在膨胀布局时有一个问题 我有一个自定义视图 从 LinearLayout 扩展而来 称为按钮帮助 我在名为的布局上使用该视图加载活动 我的以下代码在所有设备和模拟器上都能完美运行 但具有 QVGA 屏幕 例如 Sam
  • 捕获的图像分辨率太大

    我在做什么 我允许用户捕获图像 将其存储到 SD 卡中并上传到服务器 但捕获图像的分辨率为宽度 4608 像素和高度 2592 像素 现在我想要什么 如何在不影响质量的情况下获得小分辨率图像 例如我可以获取或设置捕获的图像分辨率为原始图像分
  • android sdk 的位置尚未在 Windows 操作系统的首选项中设置

    在 Eclipse 上 我转到 windows gt Android SDK 和 AVD Manager 然后弹出此消息 Android sdk 的位置尚未在首选项中设置 进入首选项 在侧边栏找到 Android 然后会出现一个 SDK 位
  • Crashlytics 出现 Android Studio 构建错误

    我正在尝试将 CrashLytics 与 Android Studio 和 gradle 一起使用 但出现一个令人困惑的错误 java lang NoSuchMethodError 我的 build gradle 是 buildscript

随机推荐

  • Ace 编辑器:自定义语法错误间距

    只是想知道 是否可以自定义语法错误槽 另外 是否可以突出显示有语法错误的文本 例如下面我试图检查的值myString反对字符串 chetan 但不带引号 现在这是一个语法错误 目前 我们在行号之前的装订线中显示错误 但是是否可以自定义 ac
  • 为什么对于某些文字,instanceof 返回 false?

    foo instanceof String gt false foo instanceof Object gt false true instanceof Boolean gt false true instanceof Object gt
  • 加载词和移动之间的区别?

    有什么区别 ldw r8 0 r4 and mov r8 r4 Load word 说 从内存复制 但是当 load word 从 r4 复制时 它是从寄存器复制而不是从内存复制 对吧 The lw instruction I assume
  • java中基于空格和匹配引号的正则表达式分割字符串

    我有一个字符串 需要根据空间和精确匹配的引号进行拆分 If the string It is fun to write regular expression 分割后我希望结果是 It is fun 来写 regular 表达 我从中得到一些
  • 如何创建一个随机链接到多个网站的按钮?

    我只是想知道如何创建一个按钮 每次单击该按钮时可以将一个人以随机顺序带到多个网站 我不希望这些网站一次全部打开 一次只打开一个 我正在寻找类似于 StumbleUpon 上使用的 stumble 按钮的东西 我计划将此按钮用于我计划创建的工
  • SQL 查询Where 子句为空或匹配(仅返回1)?

    我有一个表 其中的记录结构与此类似 ID角色ID1 空2 153 16 我编写了一个 where 子句来获取如下所示的记录 SELECT from TableX WHERE RoleID 2 OR RoleID IS NULL 这让我得到
  • 生成最终存档时出错:java.io.FileNotFoundException:xxx\bin\resources.ap_不存在

    昨天我安装了一些旧版本google api的 之后一切都出了问题 我创建的每个项目都显示 项目包含错误修复它们 它显示以下错误 生成最终存档时出错 java io FileNotFoundException C xxx maps bin r
  • UILabel 动画不正确

    由于某种原因 UILabel 的文本想要在没有动画的情况下设置其对齐方式 并且我不知道如何使文本与标签的其余部分一起动画 我现在有以下代码 UILabel label UILabel alloc initWithFrame CGRectMa
  • 如何在不重新加载和 # hack 的情况下更改 Windows 位置?

    起初我认为哈希破解是一个要求 但是从 Facebook 最近的更新来看 我不这么认为 最初的 hash hack 我不确定这是否是正确的术语 是通过更改 location hash 可以在 URL 中保存状态而不刷新页面 这被谷歌的应用程序
  • 在 Swift 中转义反斜杠

    我将正则表达式作为字符串值发送到 CloudKit 但它似乎不喜欢它 将 by 然而 一旦我从我的应用程序中获得这个值 我想以其原始形式重新转换它 代替 我不知道如何在 Swift 中管理这种转义字符 因为我什至无法用 a 设置字符串 在我
  • 如何加速“独特”数据框搜索

    我有一个数据框 其尺寸为 2377426 行 x 2 列 如下所示 Name Seq 428293 ENSE00001892940 ENSE00001929862 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
  • 如何每隔x秒重复执行一个函数?

    我想永远每 60 秒重复执行一次 Python 中的函数 就像NSTimer http web archive org web 20090823012700 http developer apple com 80 DOCUMENTATION
  • java持久化内存泄漏

    我的表中有 100 万行 我想获取所有行 但是当我尝试通过分页获取带有 jpa 的所有行时 我收到 java 堆错误 你认为我错过了什么吗 任何建议 int counter 0 while counter gt 0 javax persis
  • 在 Docker Alpine 上安装seaborn

    我正在尝试安装seaborn使用这个 Dockerfile FROM alpine latest RUN apk add update python py pip python dev RUN pip install seaborn CMD
  • 获取客户端隐藏字段的值

    单击服务器端的按钮 我将表中的列中的值分配给隐藏字段 Dim dsGetEnquiryDetails dbl usp GetEnquiryRegisterDetails Val lblEnquiryRegisterID Text AsQue
  • Docker:Opensearch 拒绝与 docker 中的 opensearch 文档中的示例连接

    我正在 docker 容器上运行 opensearch v 1 0 0 并在localhost 请考虑这个问题IS NOT和这篇文章一样 Opensearch Docker Image 无法建立新连接 Errno 111 连接被拒绝 htt
  • 对贝塞尔曲线的点进行动画处理[重复]

    这个问题在这里已经有答案了 是否可以对贝塞尔曲线的点进行动画处理 我正在尝试从直线到箭头的平滑过渡 这是该行在代码中的样子 Color Declarations UIColor white UIColor colorWithRed 1 gr
  • 计算沿轴的直方图

    有没有办法沿着 nD 数组的轴计算许多直方图 我目前使用的方法是for循环迭代所有其他轴并计算numpy histogram 对于每个生成的一维数组 import numpy import itertools data numpy rand
  • C++11/14 中的 Boost.Pointer 容器被 std::unique_ptr 废弃了?

    Does std unique ptr make Boost Pointer容器C 11 14 中的库已过时吗 在 C 98 03 中没有移动语义 并且有一个智能指针 例如shared ptr与引用计数相关overhead 对于参考计数块
  • 使 FAB 响应软键盘显示/隐藏更改

    我看过各种关于 FAB 响应屏幕底部 Snackbar 弹出窗口以及滚动敏感 FAB 的帖子 但是否有一些实施FloatingActionButton Behavior 或类似 将 FAB 移至键盘上方当它出现时 现在 当我单击某个按钮时