Android 6.0新控件 BottomSheetDialog的使用及遇到的问题 | 底部对话框中输入框被系统键盘遮挡住一部分

本文介绍了Android 6.0新控件BottomSheetDialog的常见应用场景和使用方法,特别是其在替代对话框和菜单中的作用。在实践中遇到的一个问题是,当BottomSheetDialog包含EditText时,系统键盘弹出会遮挡部分对话框内容,影响用户体验。为解决这一问题,文章提供了通过设置style的方法,确保BottomSheetDialog在键盘弹出时正确显示。具体的解决方案是在values-v21/styles.xml文件中定义并应用相应样式。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Android Support Library 23.2里的 Design Support Library新加了一个Bottom Sheets控件,Bottom Sheets顾名思义就是底部操作控件,用于在屏幕底部创建一个可滑动关闭的视图,可以替代对话框和菜单。其中包含BottomSheets、BottomSheetDialog和BottomSheetDialogFragment三种可以使用。其中应用较多的控件是BottomSheetDialog。

BottomSheetDialog应该是最实用的控件,也是使用率非常高的控件。它可以替代大多数网格显示和列表展示的dialog和popupwindow,默认宽度撑满,并且在BottomSheetDialog 区域中向下滑动也让对话框消失。

最近根据产品需要,开发一个新闻页面,页面底部有一个评论功能,于是用上Android 6.0新控件 BottomSheetDialog,但是在点击弹出带有EditTtext输入框的dialog发现,系统键盘遮挡了一部分dialog页面,看起来很不协调,体验很不好,如下图:

解决思路:在创建的bottomSheetDialog设置一个style即可,代码如下

<style name="BottomSheetEdit" parent="Theme.Design.Light.BottomSheetDialog">
    <item name="android:windowIsFloating">false</item>
    <item name="android:statusBarColor">@android:color/transparent</item>
    <item name="android:windowSoftInputMode">adjustResize</item>
</style>

修改后的效果如下:

ps:因为该控件是Android Support Library 23.2里的 Design Support Library新加了一个Bottom Sheets控件,所以在设置style时应该放在values-v21/style中,否则会报错。

具体代码如下:

if (dialog == null) {
    dialog = new BottomSheetDialog(mContext ,R.style.BottomSheetEdit);//要加上这个,否则,键盘会覆盖一部分弹窗。
    View view = LayoutInflater.from(mContext).inflate(R.layout.dialog_bottom_comment, null);
    dialog.setContentView(view);
    editContent = (EditText) view.findViewById(R.id.edit_content);
    tvSend = (TextView) view.findViewById(R.id.tv_send);
    tvSend.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            dialog.dismiss();
            addComment();
        }
    });
}
dialog.show();

dialog_bottom_comment.xml

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:orientation="horizontal"
    android:background="@color/mainColor"
    android:elevation="5dp"
    android:gravity="center_vertical"
    android:layout_height="wrap_content">
    
        <EditText
            android:id="@+id/edit_content"
            android:layout_width="wrap_content"
            android:layout_height="30dp"
            android:layout_marginLeft="15dp"
            android:layout_weight="1"
            android:textSize="12sp"
            android:textColor="@color/col_text2"
            android:paddingLeft="15dp"
            android:background="@drawable/yb_white"
            android:hint="评论..."/>
        <TextView
            android:id="@+id/tv_send"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="发布"
            android:textSize="15dp"
            android:textColor="@color/white"
            android:background="?attr/selectableItemBackgroundBorderless"
            android:layout_margin="8dp"
            android:padding="5dp"/>
</LinearLayout>

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值