解决 数据不足一屏 BottomSheetDialog 无法全屏展示

本文介绍了一种解决BottomSheetDialog在内容不满屏时无法完全显示的问题的方法。通过复写BottomSheetDialog并调整布局参数,使得对话框能够始终全屏展示。

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

最近项目有遇到 BottomSheetDialog  展示内容未满屏无法显示的情况

首先查看到BottomSheetDialog   设置了全屏

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    getWindow().setLayout(
            ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT);
}

 通过

@Override
public void setContentView(View view, ViewGroup.LayoutParams params) {
    super.setContentView(wrapInBottomSheet(0, view, params));
}

进入 

wrapInBottomSheet

private View wrapInBottomSheet(int layoutResId, View view, ViewGroup.LayoutParams params) {
    final CoordinatorLayout coordinator = (CoordinatorLayout) View.inflate(getContext(),
            R.layout.design_bottom_sheet_dialog, null);
    if (layoutResId != 0 && view == null) {
        view = getLayoutInflater().inflate(layoutResId, coordinator, false);
    }
    FrameLayout bottomSheet = (FrameLayout) coordinator.findViewById(R.id.design_bottom_sheet);
    mBehavior = BottomSheetBehavior.from(bottomSheet);
    mBehavior.setBottomSheetCallback(mBottomSheetCallback);
    mBehavior.setHideable(mCancelable);
    if (params == null) {
        bottomSheet.addView(view);
    } else {
        bottomSheet.addView(view, params);
    }
发现自己所写的view是添加到

FrameLayout bottomSheet = (FrameLayout) coordinator.findViewById(R.id.design_bottom_sheet);

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

    <View
            android:id="@+id/touch_outside"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:soundEffectsEnabled="false"/>

    <FrameLayout
            android:id="@+id/design_bottom_sheet"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_gravity="center_horizontal|top"
            android:clickable="true"
            app:layout_behavior="@string/bottom_sheet_behavior"
            style="?attr/bottomSheetStyle"/>

</android.support.design.widget.CoordinatorLayout>
<FrameLayout
        android:id="@+id/design_bottom_sheet"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"

设置的高度是自适应

这边通过复写

BottomSheetDialog

override fun show() {
    super.show()
    window.apply {
        var mContent = decorView.findViewById(R.id.design_bottom_sheet)
        var orginLayoutParams = mContent.layoutParams
        orginLayoutParams.height=ViewGroup.LayoutParams.MATCH_PARENT
        mContent.layoutParams=orginLayoutParams
        val mDialogBehavior = BottomSheetBehavior.from(mContent)
        mDialogBehavior.setState(BottomSheetBehavior.STATE_EXPANDED)
    }
}
实现了全屏




### 账户被禁用导致无法登录的解决方案 #### 使用本地用户管理工具解锁账户 对于Windows系统中的普通用户或管理员账户被禁用的情况,可以利用内置的用户管理工具来解决问题。具体方法如下:通过按下`Win + R`组合键调出运行对话框,输入`lusrmgr.msc`命令并回车,这将打开“计算机管理 - 本地用户和组”界面[^2]。在此界面中找到目标账户,右击属性查看其状态。如果发现账户处于禁用状态,则需取消勾选“账户已禁用”选项,并点击应用及确认按钮保存更改。 #### 修改注册表恢复Administrator权限 另种情况是当所有可用的高级用户都被锁定或者删除时,可以通过调整系统注册表重新激活隐藏的超级管理员(Built-in Administrator)。为此需要进入安全模式,在此状态下按前述方式启动运行窗口,接着依次执行以下指令:“regedit”,定位至路径HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon\[SpecialAccounts]\UserList[^1]。在这里确保Administrator条目的数值设为1表示可见可启用;随后退出编辑器重启设备完成设置生效过程。 #### 利用PE环境修复严重损坏场景 针对更加棘手的情形比如完全失去控制权甚至无法加载图形化界面的时候,则考虑借助第三方引导盘如U盘制作LiveCD形式的操作系统(例如Windows PE),从中获取底层文件访问能力从而实施更深入的技术干预措施。例如替换某些关键程序实现临时提权功能以便进步诊断与修正问题所在[^3]。实际案例显示这种方法虽然复杂但非常有效尤其适用于服务器级别环境中发生的灾难性故障恢复工作当中去。 ```python # 示例代码仅作为概念说明用途并不直接关联上述描述的具体步骤操作 import os def enable_admin_account(): try: reg_path = r"HKLM:\Software\Microsoft\Windows NT\CurrentVersion\Winlogon" value_name = "SpecialAccounts\UserList\Administrator" # Check if the registry key exists and modify it accordingly. current_value = int(os.popen(f'reg query "{reg_path}" /v {value_name}').read().split()[-1]) if not current_value: os.system(f'reg add "{reg_path}" /v {value_name} /t REG_DWORD /d 1 /f') print("Administrator account has been enabled successfully.") else: print("The administrator account is already active.") except Exception as e: print(f"An error occurred while enabling admin account: {e}") enable_admin_account() ```
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值