只要焦点在edittext上。
键盘已打开,所有视图均已调整并向上移动,如下面的示例图像所示。
Button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
FileUtils.hideKeyboard(MainActivity.this);
LayoutInflater layoutInflater = (LayoutInflater) MainActivity.this.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
View customView = layoutInflater.inflate(R.layout.layout,null);
DisplayMetrics displayMetrics = new DisplayMetrics();
getWindowManager().getDefaultDisplay().getMetrics(displayMetrics);
int height = displayMetrics.heightPixels;
int width = displayMetrics.widthPixels;
popupWindow = new PopupWindow(customView, width, 300);
//display the popup window
popupWindow.showAtLocation(rootlayout, Gravity.BOTTOM, 0, 0);
}
});
这段代码可以正常工作,但是弹出窗口显示在屏幕底部,并且停留在rootlayout上。
我希望此弹出窗口处于打开状态,并像带有动画的键盘一样保持打开状态。
解决方案如下:
使用所需的任何约束自定义布局并传递布局行为
app:layout_behavior="android.support.design.widget.BottomSheetBehavior"
在类文件中使用
使用全局变量
private BottomSheetBehavior mBottomSheetBehavior = null;
在创建
layout=(CoordinatorLayout)findViewById(R.id.bottomSheet);
views=(View)findViewById(R.id.view);
mBottomSheetBehavior = BottomSheetBehavior.from(views);
mBottomSheetBehavior.setPeekHeight(0);
setBottomSheetAndCallBackBottomSheetBehaviour();
bottomSheetCollapsed();
layout.setVisibility(View.VISIBLE);
当创建名为method的视图并传递布局ID时,窥视高度将首次用于隐藏视图。
private void setBottomSheetAndCallBackBottomSheetBehaviour() {
mBottomSheetBehavior.setState(BottomSheetBehavior.STATE_HIDDEN);
mBottomSheetBehavior.setBottomSheetCallback(new BottomSheetBehavior.BottomSheetCallback() {
@Override
public void onStateChanged(@NonNull View bottomSheet, int newState) {
if (newState == BottomSheetBehavior.STATE_COLLAPSED) {
bottomSheetCollapsed();
}
}
@Override
public void onSlide(@NonNull View bottomSheet, float slideOffset) {
}
});
}
并使用以下方法展开和折叠。
private void bottomSheetExpand() {
mBottomSheetBehavior.setState(BottomSheetBehavior.STATE_EXPANDED);
}
private void bottomSheetCollapsed() {
mBottomSheetBehavior.setState(BottomSheetBehavior.STATE_COLLAPSED);
}
并点击查看使用
void isExpendCollapse(){
if (mBottomSheetBehavior.getState() == BottomSheetBehavior.STATE_COLLAPSED){
bottomSheetExpand();
}
else {
bottomSheetCollapsed();
}
}
检查xml文件CoordinatorLayout是否必须用于底表行为
<android.support.design.widget.CoordinatorLayout
android:id="@+id/bottomSheet"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:clickable="true"
android:clipToPadding="true"
android:visibility="gone"
app:behavior_hideable="true"
app:behavior_peekHeight="0dp"
android:layout_alignParentBottom="true"
>
<View
android:id="@+id/view"
android:layout_width="match_parent"
android:layout_height="300dp"
android:background="@color/colorAccent"
app:layout_behavior="android.support.design.widget.BottomSheetBehavior"
/>
</android.support.design.widget.CoordinatorLayout>
您可以约束布局,线性视图或任何视图,而不是视图。并且我已经设置了相对布局(父布局)的坐标布局,您可以根据需要使用。