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>