系统设置 WIFI输入框被挡住解决方案
文章目录
- 问题点
- 复现的场景
- 机器横屏可复现,竖屏不存在
- 跟density 相关的。
- 解决问题方案
- 设置输入模式
- 路径
- 部分源码跟踪
- 方法
- 延伸思考
- 设置输入模式
- 设置主题
问题点
进入系统设置-网络和互联网-WLAN-点击WIFI item ,密码输入框被遮挡,输入的密码不可见.如下图
复现的场景
机器横屏可复现,竖屏不存在
跟density 相关的。
不同分辨率、不同density 的情形很多。所以并不是所有的机型产品必现的,当遇到的识货我们就去解决。
-
同一台机器,分辨率不会变,不同density 下,部分density 下会出现遮挡问题。 wm density value
命令可以用来调试复现问题。 -
同一台机器,density 设置一样,不同固件接不同分辨率的机器,部分分辨率下会出现。 wm size value
命令可以来调试复现问题。实际自己遇到情况,如上,无论自己接触到的RK、全志、MTK 产品,都偶尔会遇到遮挡问题。 原因如上举例所说。
解决问题方案
设置输入模式
在 WifiConfigController2.java 中设置输入模式:SOFT_INPUT_ADJUST_PAN
具体代码如下:
public WifiConfigController2(WifiConfigUiBase2 parent, View view, WifiEntry wifiEntry,int mode) {mConfigUi = parent;mView = view;mWifiEntry = wifiEntry;mContext = mConfigUi.getContext();// Init Wi-Fi managermWifiManager = (WifiManager) mContext.getSystemService(Context.WIFI_SERVICE);initWifiConfigController2(wifiEntry, mode);(scanForActivitySetSoftInputMode(mContext)).getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_PAN);}private static Activity scanForActivitySetSoftInputMode(Context cont) {if (cont == null)return null;else if (cont instanceof Activity)return (Activity)cont;else if (cont instanceof ContextWrapper)return scanForActivitySetSoftInputMode(((ContextWrapper)cont).getBaseContext());return null;}在构造方法中添加: scanForActivitySetSoftInputMode 方法,重新设置键盘模式
路径
MTK 平台下路径:
vendor/mediatek/proprietary/packages/apps/MtkSettings/src/com/android/settings/wifi/WifiConfigController2.java
RK 全志平台路径:
/packages/apps/Settings/src/com/android/settings/wifi/WifiConfigController2.java
在线平台源码位置查看,方便check 源码
:/packages/apps/Settings/src/com/android/settings/wifi/WifiConfigController2.java
在线源码查看
部分源码跟踪
首先我们要找到源码位置,如何查找输入密码具体的类和布局
方法
- 系统设置->网络和互联网-WLAN连接-WLAN-点击对应的WIFI列表,自己想连接的那个WIFI ITEM
- 查看logcat 日志打印,有很多包名con.android.settings 下的日志,我们找到关机日志,比如下:
SettingsActivity com.android.settings D Switching to fragment com.android.settings.wifi.ConfigureWifiEntryFragment
SubSettings com.android.settings D Launching fragment com.android.settings.wifi.ConfigureWifiEntryFragment
- 过滤关键字:Switching Launching
C:\Users\Administrator>adb shell
k69v1_64_k419:/ $ logcat | grep Switching
09-29 11:33:18.496 1542 1542 D SettingsActivity: Switching to fragment com.android.settings.network.NetworkDashboardFragment
09-29 11:33:48.098 1542 1542 D SettingsActivity: Switching to fragment com.android.settings.wifi.WifiSettings
09-29 11:34:19.136 1542 1542 D SettingsActivity: Switching to fragment com.android.settings.wifi.ConfigureWifiEntryFragment130|k69v1_64_k419:/ $ logcat | grep Launching
09-29 11:33:18.496 1542 1542 D SubSettings: Launching fragment com.android.settings.network.NetworkDashboardFragment
09-29 11:33:48.098 1542 1542 D SubSettings: Launching fragment com.android.settings.wifi.WifiSettings
09-29 11:34:19.136 1542 1542 D SubSettings: Launching fragment com.android.settings.wifi.ConfigureWifiEntryFragment
可以看到对应的跳转和启动相关Fragment日志,这样就追踪到 输入wifi 密码的源码 Fragment 是ConfigureWifiEntryFragment
- ConfigureWifiEntryFragment 中核心代码
ConfigureWifiEntryFragment 中核心代码
View rootView = inflater.inflate(R.layout.wifi_add_network_viewprivate WifiConfigController2 mUiController;
mUiController = new WifiConfigController2(this, rootView, mWifiEntry, getMode());
所以UI控制中心是在WifiConfigController2 中的
- 布局文件wifi_add_network_view
<includeandroid:id="@+id/wifi_dialog_frame"android:layout_width="match_parent"android:layout_height="wrap_content"android:layout_above="@id/add_network_button_bar"app:layout_constraintTop_toTopOf="parent"layout="@layout/wifi_dialog"/>
所以对应的布局文件是在@layout/wifi_dialog 中加载的
对应的密码输入框 源码如下:
<LinearLayout android:id="@+id/password_layout"android:layout_width="match_parent"android:layout_height="wrap_content"style="@style/wifi_item" ><TextViewandroid:layout_width="wrap_content"android:layout_height="wrap_content"style="@style/wifi_item_label"android:text="@string/wifi_password" /><EditText android:id="@+id/password"android:layout_width="match_parent"android:layout_height="wrap_content"style="@style/wifi_item_edit_content"android:singleLine="true"android:password="true"/></LinearLayout>
- UI控制中心WifiConfigController2
在4 中 已经看到,WifiConfigController2 构造方法里面传递了根布局的view,那么在控制中心就可以通过rootView 获取布局文件下面的所有View 进行控制。如下部分获取view 组件的方法,findViewByIdSsidScanButton = (ImageButton) mView.findViewById(R.id.ssid_scanner_button);mIpSettingsSpinner = (Spinner) mView.findViewById(R.id.ip_settings);mIpSettingsSpinner.setOnItemSelectedListener(this);mProxySettingsSpinner = (Spinner) mView.findViewById(R.id.proxy_settings);mProxySettingsSpinner.setOnItemSelectedListener(this);mSharedCheckBox = (CheckBox) mView.findViewById(R.id.shared);mMeteredSettingsSpinner = mView.findViewById(R.id.metered_settings);mHiddenSettingsSpinner = mView.findViewById(R.id.hidden_settings);mPrivacySettingsSpinner = mView.findViewById(R.id.privacy_settings);
- 寻找解决方案
源码分析后,我们解决方案就是在view 中设置输入模式:SOFT_INPUT_ADJUST_PAN添加一个方法,在构造方法中去添加 方法,设置一次。private static Activity scanForActivitySetSoftInputMode(Context cont) {if (cont == null)return null;else if (cont instanceof Activity)return (Activity)cont;else if (cont instanceof ContextWrapper)return scanForActivitySetSoftInputMode(((ContextWrapper)cont).getBaseContext());return null;}
延伸思考
设置输入模式
既然是 设置输入模式,我们在Activity里面设置一次不就可以了吗? 比如Activity里面硬编码设置一次
设置主题
输入模式里面,通过配置文件,AndroidMenifest中设置一次
我自己调试过,没有用。 这可能跟布局有关系。
相关文章:

系统设置 WIFI输入框被挡住解决方案
文章目录 问题点复现的场景机器横屏可复现,竖屏不存在跟density 相关的。 解决问题方案设置输入模式路径 部分源码跟踪方法 延伸思考设置输入模式设置主题 问题点 进入系统设置-网络和互联网-WLAN-点击WIFI item ,密码输入框被遮挡,输入的密码不可见.如…...

SpringCloud无法注册Nacos和配置中心
今天升级SpringCloud版本,导致服务无法注册到nacos,使用nacos作为配置中心也无法刷新配置信息,后来发现是因为只更新了SpringCloud版本,SpringCloud-Alibaba没有更新导致的问题。 升级出现问题的版本是: <dependen…...

word2vector训练数据集整理(代码实现)
import math import os import random import torch import dltools from matplotlib import pyplot as plt #读取数据集 def read_ptb():"""将PTB数据集加载到文本行的列表中"""with open(./ptb/ptb.train.txt) as f:raw_text f.read()return…...

无心上班,只想为祖国庆生?让ChatGPT帮你搞定工作!
国庆假期临近,大家的心早已飞向诗和远方了吧。 然而,现实总是无情地将我们拉回到堆积如山的工作任务上:紧急报告的截止日期就在眼前,复杂的项目策划还未动笔,客户的定制需求迫在眉睫。每年的这个时候,如何…...

【Python】YOLO牛刀小试:快速实现视频物体检测
YOLO牛刀小试:快速实现视频物体检测 在深度学习的众多应用中,物体检测是一个热门且重要的领域。YOLO(You Only Look Once)系列模型以其快速和高效的特点,成为了物体检测的首选之一。本文将介绍如何使用YOLOv8模型进行…...

Vscode超好看的渐变主题插件
样式效果: 插件使用方法: 然后重启,之后会显示vccode损坏,不用理会,因为这个插件是更改了应用内部代码,直接不再显示即可。...

OceanBase技术解析:自适应分布式下压技术
在《OceanBase 数据库源码解析》这本书中,关于SQL执行器的深入剖析相对较少,因此,希望增添一些实用且详尽的补充内容。 上一篇博客《 OceanBase技术解析: 执行器中的自适应技术》中,已初步介绍了执行器中几项典型的自适…...
Firebase和JavaScript创建Postback Link逻辑
Firebase是一个提供后端即服务(BaaS)的平台,它允许开发者快速构建应用程序而无需管理服务器。Firebase不直接提供生成Postback Link的功能,但您可以使用Firebase的功能来构建和管理URL,然后在客户端使用这些URL来实现Postback。 以下是如何使用Firebase和JavaScript来创建…...
docker配置daemon.json文件
报错 :Get "https://registry-1.docker.io/v2/": net/http: request canceled while waiting for connection (Client.Timeout exceeded while awaiting headers) 解决方法 配置加速地址 vim /etc/docker/daemon.json添加以下内容 {"registry-mirro…...

【08】纯血鸿蒙HarmonyOS NEXT星河版开发0基础学习笔记-Scroll容器与Tabs组件
序言: 本文详细讲解了关于我们在页面上经常看到的可滚动页面和导航栏在鸿蒙开发中如何用Scroll和Tabs组件实现,介绍了Scroll和Tabs的基本用法与属性。 笔者也是跟着B站黑马的课程一步步学习,学习的过程中添加部分自己的想法整理为笔记分享出…...

苏州 数字化科技展厅展馆-「世岩科技」一站式服务商
数字化科技展厅展馆设计施工是一个综合性强、技术要求高的项目,涉及到众多方面的要点。以下是对数字化科技展厅展馆设计施工要点的详细分析: 一、明确目标与定位 在设计之初,必须明确展厅的目标和定位。这包括确定展厅的主题、目标受众、展…...
音频搜索公司 DeepGram,定位语音搜索AI大脑,DeepGram想做“音频版”
1. 亦仁分享 DeepGram 成立于 2015 年,位于美国山景城,是一家基于 AI 技术的音频搜索引擎公司。运用机器学习进行语音识别、搜寻重要时刻并对音频和视频进行分类,帮助用户快速索引和浏览音频和视频文件,包括电话语音、会议语音、…...

基于php的在线租房管理系统
作者:计算机学姐 开发技术:SpringBoot、SSM、Vue、MySQL、JSP、ElementUI、Python、小程序等,“文末源码”。 专栏推荐:前后端分离项目源码、SpringBoot项目源码、Vue项目源码、SSM项目源码 精品专栏:Java精选实战项目…...

如何评价 Python 语言的运行速度
Python 作为一门编程语言,其运行速度一直是业界讨论的焦点。它的简洁语法和广泛的应用使得它在开发过程中非常高效,然而,运行速度与一些更底层的编程语言相比存在一定的劣势。这是否是由于 Python 语法的简洁性所带来的代价?我们可…...

Tomcat系列漏洞复现
CVE-2017-12615——Tomcat put⽅法任意⽂件写⼊漏洞 漏洞描述 当 Tomcat运⾏在Windows操作系统时,且启⽤了HTTP PUT请求⽅法(例如,将 readonly初始化参数由默认值设置为false),攻击者将有可能可通过精⼼构造的攻击请求…...
K8S拉取本地docker中registry的镜像报错:http: server gave HTTP response to HTTPS client
本地部署了一个K8S集群,但是worker1和worker2的docker无法拉取外面的镜像,docker的daemon.json也配置了,无法下载,于是在master部署了一个docker registry。 但是pod还是无法拉取registry的镜像并报错。 我这里使用的是container…...

Leetcode 1235. 规划兼职工作
1.题目基本信息 1.1.题目描述 你打算利用空闲时间来做兼职工作赚些零花钱。 这里有 n 份兼职工作,每份工作预计从 startTime[i] 开始到 endTime[i] 结束,报酬为 profit[i]。 给你一份兼职工作表,包含开始时间 startTime,结束时…...
LeetCode 2535.数组元素和与数字和的绝对差:模拟
【LetMeFly】2535.数组元素和与数字和的绝对差:模拟 力扣题目链接:https://leetcode.cn/problems/difference-between-element-sum-and-digit-sum-of-an-array/ 给你一个正整数数组 nums 。 元素和 是 nums 中的所有元素相加求和。数字和 是 nums 中每…...

SpringCloud-pom创建Eureka
<?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0" xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation"http://maven.apache.org/POM/4.0.0 https://…...

动态规划算法专题(一):斐波那契数列模型
目录 1、动态规划简介 2、算法实战应用【leetcode】 2.1 题一:第N个泰波那契数 2.1.1 算法原理 2.1.2 算法代码 2.1.3 空间优化原理——滚动数组 2.1.4 算法代码——空间优化版本 2.2 题二:三步问题 2.2.1 算法原理 2.2.2 算法代码 2.3 题二&a…...
Vim 调用外部命令学习笔记
Vim 外部命令集成完全指南 文章目录 Vim 外部命令集成完全指南核心概念理解命令语法解析语法对比 常用外部命令详解文本排序与去重文本筛选与搜索高级 grep 搜索技巧文本替换与编辑字符处理高级文本处理编程语言处理其他实用命令 范围操作示例指定行范围处理复合命令示例 实用技…...
内存分配函数malloc kmalloc vmalloc
内存分配函数malloc kmalloc vmalloc malloc实现步骤: 1)请求大小调整:首先,malloc 需要调整用户请求的大小,以适应内部数据结构(例如,可能需要存储额外的元数据)。通常,这包括对齐调整,确保分配的内存地址满足特定硬件要求(如对齐到8字节或16字节边界)。 2)空闲…...

springboot 百货中心供应链管理系统小程序
一、前言 随着我国经济迅速发展,人们对手机的需求越来越大,各种手机软件也都在被广泛应用,但是对于手机进行数据信息管理,对于手机的各种软件也是备受用户的喜爱,百货中心供应链管理系统被用户普遍使用,为方…...
《Playwright:微软的自动化测试工具详解》
Playwright 简介:声明内容来自网络,将内容拼接整理出来的文档 Playwright 是微软开发的自动化测试工具,支持 Chrome、Firefox、Safari 等主流浏览器,提供多语言 API(Python、JavaScript、Java、.NET)。它的特点包括&a…...

Linux相关概念和易错知识点(42)(TCP的连接管理、可靠性、面临复杂网络的处理)
目录 1.TCP的连接管理机制(1)三次握手①握手过程②对握手过程的理解 (2)四次挥手(3)握手和挥手的触发(4)状态切换①挥手过程中状态的切换②握手过程中状态的切换 2.TCP的可靠性&…...
如何为服务器生成TLS证书
TLS(Transport Layer Security)证书是确保网络通信安全的重要手段,它通过加密技术保护传输的数据不被窃听和篡改。在服务器上配置TLS证书,可以使用户通过HTTPS协议安全地访问您的网站。本文将详细介绍如何在服务器上生成一个TLS证…...
GitHub 趋势日报 (2025年06月08日)
📊 由 TrendForge 系统生成 | 🌐 https://trendforge.devlive.org/ 🌐 本日报中的项目描述已自动翻译为中文 📈 今日获星趋势图 今日获星趋势图 884 cognee 566 dify 414 HumanSystemOptimization 414 omni-tools 321 note-gen …...
#Uniapp篇:chrome调试unapp适配
chrome调试设备----使用Android模拟机开发调试移动端页面 Chrome://inspect/#devices MuMu模拟器Edge浏览器:Android原生APP嵌入的H5页面元素定位 chrome://inspect/#devices uniapp单位适配 根路径下 postcss.config.js 需要装这些插件 “postcss”: “^8.5.…...
Caliper 配置文件解析:fisco-bcos.json
config.yaml 文件 config.yaml 是 Caliper 的主配置文件,通常包含以下内容: test:name: fisco-bcos-test # 测试名称description: Performance test of FISCO-BCOS # 测试描述workers:type: local # 工作进程类型number: 5 # 工作进程数量monitor:type: - docker- pro…...

android RelativeLayout布局
<?xml version"1.0" encoding"utf-8"?> <RelativeLayout xmlns:android"http://schemas.android.com/apk/res/android"android:layout_width"match_parent"android:layout_height"match_parent"android:gravity&…...