当前位置: 首页 > wzjs >正文

手机微网站注册登录源码备案 手机网站

手机微网站注册登录源码,备案 手机网站,免费app软件下载网站,网站设计的用途实现弹窗随键盘上移的核心思路 在Android中&#xff0c;可以通过监听键盘的显示和隐藏事件&#xff0c;动态调整弹窗的位置。关键点在于获取键盘高度&#xff0c;并计算剩余屏幕空间以重新定位弹窗。 // 在Activity或Fragment中设置键盘监听 val rootView findViewById<V…

实现弹窗随键盘上移的核心思路

在Android中,可以通过监听键盘的显示和隐藏事件,动态调整弹窗的位置。关键点在于获取键盘高度,并计算剩余屏幕空间以重新定位弹窗。

// 在Activity或Fragment中设置键盘监听
val rootView = findViewById<View>(android.R.id.content)
rootView.viewTreeObserver.addOnGlobalLayoutListener {val rect = Rect()rootView.getWindowVisibleDisplayFrame(rect)val screenHeight = rootView.rootView.heightval keyboardHeight = screenHeight - rect.bottomif (keyboardHeight > screenHeight * 0.15) {// 键盘显示,调整弹窗位置adjustDialogPosition(keyboardHeight)} else {// 键盘隐藏,恢复默认位置resetDialogPosition()}
}

创建自定义弹窗布局

使用Dialog或DialogFragment时,需要确保布局可以动态调整位置。示例布局文件:

<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"android:id="@+id/dialog_container"android:layout_width="match_parent"android:layout_height="match_parent"><LinearLayoutandroid:id="@+id/dialog_content"android:layout_width="300dp"android:layout_height="wrap_content"android:layout_gravity="center"android:orientation="vertical"android:padding="16dp"><!-- 弹窗内容 --></LinearLayout>
</FrameLayout>

动态调整弹窗位置代码

通过修改布局参数实现位置调整:

private fun adjustDialogPosition(keyboardHeight: Int) {val dialogContent = dialog.findViewById<View>(R.id.dialog_content)val params = dialogContent.layoutParams as FrameLayout.LayoutParamsval screenHeight = resources.displayMetrics.heightPixelsval targetY = (screenHeight - keyboardHeight) / 2 - dialogContent.height / 2params.topMargin = targetYdialogContent.layoutParams = params
}private fun resetDialogPosition() {val dialogContent = dialog.findViewById<View>(R.id.dialog_content)val params = dialogContent.layoutParams as FrameLayout.LayoutParamsparams.topMargin = 0params.gravity = Gravity.CENTERdialogContent.layoutParams = params
}

处理WindowSoftInputMode

在AndroidManifest.xml中为Activity设置正确的软键盘模式:

<activityandroid:name=".YourActivity"android:windowSoftInputMode="adjustResize|stateHidden" />

注意事项

  1. 键盘高度计算需要排除系统状态栏和导航栏的影响
  2. 在横屏模式下需要特殊处理布局逻辑
  3. 不同Android版本可能存在行为差异,需要充分测试
  4. 对于DialogFragment,需要在onCreateView中获取根视图进行监听

是的,这是我直接使用AI生成的文章,看了下,大致都实现了,感觉现在博客这条下坡路确实要走到底了啊。

下面是我的代码:

 @Overridepublic void onStart() {super.onStart();// 在对话框显示后设置键盘监听setupKeyboardListener();}/*** 设置键盘监听*/private void setupKeyboardListener() { // 设置全局布局监听,检测键盘状态变化if (mContext instanceof android.app.Activity) {android.app.Activity activity = (android.app.Activity) mContext;View rootView = activity.findViewById(android.R.id.content);if (rootView != null) {mGlobalLayoutListener = new ViewTreeObserver.OnGlobalLayoutListener() {@Overridepublic void onGlobalLayout() {checkKeyboardStatus();}};rootView.getViewTreeObserver().addOnGlobalLayoutListener(mGlobalLayoutListener);}}}/*** 检查键盘状态*/private void checkKeyboardStatus() {if (mContext instanceof android.app.Activity) {android.app.Activity activity = (android.app.Activity) mContext;View rootView = activity.findViewById(android.R.id.content);if (rootView != null) {android.graphics.Rect rect = new android.graphics.Rect();rootView.getWindowVisibleDisplayFrame(rect);int screenHeight = rootView.getHeight();int visibleHeight = rect.bottom - rect.top;// 判断键盘是否弹起(可视区域高度小于屏幕高度的75%)boolean keyboardVisible = visibleHeight < screenHeight * 0.75;if (keyboardVisible && !isKeyboardShown) {// 键盘弹起,计算对话框在剩余可见区域的居中位置isKeyboardShown = true;adjustDialogPosition(true, visibleHeight);} else if (!keyboardVisible && isKeyboardShown) {// 键盘收起isKeyboardShown = false;adjustDialogPosition(false, screenHeight);}}}}/*** 调整对话框位置* @param keyboardShown 键盘是否显示* @param visibleHeight 可见区域高度*/private void adjustDialogPosition(boolean keyboardShown, int visibleHeight) {if (getDialogHelper() == null) {return;}try {View contentView = getDialogHelper().getContentView();if (keyboardShown) {// 键盘弹起时,让对话框在剩余可见区域中居中显示getDialogHelper().setGravity(Gravity.CENTER_HORIZONTAL | Gravity.TOP);// 对话框高度(根据布局文件dialog_quick_greet.xml约246dp)int dialogHeight = (int) (246 * mContext.getResources().getDisplayMetrics().density);// 计算让对话框在可见区域居中的上边距// 公式:(可见区域高度 - 对话框高度) / 2int centeredTopMargin = (visibleHeight - dialogHeight) / 2;// 设置最小边距,避免对话框贴着屏幕顶部int minTopMargin = (int) (50 * mContext.getResources().getDisplayMetrics().density);int topMargin = Math.max(centeredTopMargin, minTopMargin);setContentViewMargin(contentView, topMargin);} else {// 键盘收起时,恢复默认的居中位置 自己的方法getDialogHelper().setGravity(Gravity.CENTER);setContentViewMargin(contentView, 0);}} catch (Exception e) {e.printStackTrace();}}/*** 设置内容视图的上边距*/private void setContentViewMargin(View contentView, int topMargin) {if (contentView != null && contentView.getLayoutParams() instanceof android.view.ViewGroup.MarginLayoutParams) {android.view.ViewGroup.MarginLayoutParams params = (android.view.ViewGroup.MarginLayoutParams) contentView.getLayoutParams();params.topMargin = topMargin;contentView.setLayoutParams(params);}}


文章转载自:

http://IDtYcqkI.pwLxy.cn
http://HWSnzwFw.pwLxy.cn
http://acNY0FZ6.pwLxy.cn
http://lRZwyWDV.pwLxy.cn
http://KqctxhQB.pwLxy.cn
http://Fs98DICE.pwLxy.cn
http://wUPqEuuD.pwLxy.cn
http://g2ysA33B.pwLxy.cn
http://0zZKZtaU.pwLxy.cn
http://AHX0sw33.pwLxy.cn
http://Falxdp3x.pwLxy.cn
http://6y5A9drE.pwLxy.cn
http://ATk28nCV.pwLxy.cn
http://f6uk35pl.pwLxy.cn
http://hlDmnzGS.pwLxy.cn
http://igpv9VQF.pwLxy.cn
http://eqrZwVjp.pwLxy.cn
http://dwZZDUsM.pwLxy.cn
http://KS4YvnSM.pwLxy.cn
http://b488q9bK.pwLxy.cn
http://4IIzWHfz.pwLxy.cn
http://AlOvqhAK.pwLxy.cn
http://9tnYyHAT.pwLxy.cn
http://xoyvoPfW.pwLxy.cn
http://WYDqgSk3.pwLxy.cn
http://9mc5pEYu.pwLxy.cn
http://3eGIUDRf.pwLxy.cn
http://UenEvTVS.pwLxy.cn
http://TKoiaeJ5.pwLxy.cn
http://6pgnuiZj.pwLxy.cn
http://www.dtcms.com/wzjs/739299.html

相关文章:

  • 网站建设手机端pc端分开最新企业网站系统
  • 平面设计专业学校排名沂seo网站推广
  • 东莞长安网站设计seo域名如何优化
  • 改wordpress地址还是站点地址网站虚拟主机虚拟空间
  • 可以做宣传的网站在国税网站更换购票员怎么做
  • 深圳专业网站建设价格十大品牌网官网
  • 网站建设找汉狮wordpress 悬浮框
  • 网站首页制作案例网站分析内容
  • 招工做哪个网站广东广州网站建设
  • vs2013网站开发网页设计与制作教程txt
  • 网站建设 猴王网络wordpress博客反应慢
  • 免费网站空间域名如何创建网站系统教程
  • word做网站连接网站优化哪家公司好
  • 微信分销网站开发网站创建多少年了
  • 网站做百度推广怎么推广网站有网站源码去哪里做
  • 昆明 五华 网站建设充值中心网站怎么做
  • 搜维斯网站建设wordpress导航主题模板
  • 湛江网站优化安徽省建设工程质量安全监督总站网站
  • 手机网站程序源码保护环境做网站素材
  • 收费网站素材公司内部网站模板
  • 专业视频网站开发公司济南国画网站建设
  • 求南浦做电商网站机关网站制度建设
  • 深圳网站建设公司流程网站推广需要域名迁移
  • 梧州网站设计公司背景网页设计
  • 昆明建个网站哪家便宜重庆市招投标网官网
  • 公司做网站公司html网页制作期末作业
  • 网站结构分析怎么做网站程序包括数据库和网页程序
  • 怎么免费建个免费的站点专业网站建设哪里有
  • 成都网站建设-中国互联做情人在那个网站
  • 网站前置审批表百度云盘网官网