以编程方式更改系统显示大小 Android N

2023-11-27

背景:Android N 具有更改系统的功能Display Size从设置中,除了以前存在的更改功能之外Font Size.

更改显示尺寸:

enter image description here

图片来源:pcmag.com

Question:

如果一个应用程序有android.permission.WRITE_SETTINGS允许更改设置,有多种方法可以以编程方式更改系统字体大小,如中所述如何以编程方式更改设备的字体设置:字体样式和字体大小?。但是我找不到以编程方式更改显示大小的方法。是否可以?

我试过什么?

我已经检查了列表中可能的选项设置.系统提供了以编程方式更改设置的便利功能。

Update:

我在这里提出了相同的功能请求:https://code.google.com/p/android/issues/detail?id=214124。如果您觉得有用,请加星标。


只是分享我解决这个要求的方法。我通过使用肮脏的Java反射方法来实现这个功能——尽管它不是那么优雅。

主要参考源码文件有:

  • ScreenZoomSettings.java(https://github.com/aosp-mirror/platform_packages_apps_settings/blob/master/src/com/android/settings/display/ScreenZoomSettings.java)
  • DisplayDensityUtils.java(http://androidxref.com/9.0.0_r3/xref/frameworks/base/packages/SettingsLib/src/com/android/settingslib/display/DisplayDensityUtils.java)
  • WindowManagerGlobal.java(http://androidxref.com/9.0.0_r3/xref/frameworks/base/core/java/android/view/WindowManagerGlobal.java)

并且,按照以下步骤操作,即可获得所需的控件:

  1. Read ZoomScreenSettings.java 的 onCreate() 和 commit()。他们演示了如何正确获取密度值并将其设置到框架中。
  2. Read DisplayDensityUtils.java。它展示了如何使用WindowManagerService来控制系统密度。因为我们无法获取到实例DisplayDensityUtils通过反思,我们需要了解哪些WindowManagerService方法被利用。
  3. 使用反射来获取WindowManagerService的实例,并写一个DisplayDensityUtils-就像你的项目中的类一样。
// Where wm is short for window manager
val wmGlobalClz = Class.forName("android.view.WindowManagerGlobal")
val getWmServiceMethod = wmGlobalClz.getDeclaredMethod("getWindowManagerService")
val wmService = getWmServiceMethod.invoke(wmGlobalClz)

val wmInterfaceClz = Class.forName("android.view.IWindowManager")

// Now, we already have the ability to do many things we want.
// For instance, to get the default density value.
val getInitialDisplayDensityMethod = wmInterfaceClz.getDeclaredMethod(
        "getInitialDisplayDensity", 
        Integer.TYPE
)
val defaultDensity = getInitialDisplayDensityMethod.invoke(
        wmService,
        Display.DEFAULT_DISPLAY
) as Int

  1. 使用您的设置或获取密度值DisplayDensityUtils-类。需要提及的一件事是,如果您想传递一个索引值(例如,2表示大显示尺寸),请将其提供给您的DisplayDensityUtils- 像类的mValues数组来获取实际密度值,该值是传递给框架的正确密度值。获取电流密度指数也应用相同的概念。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

以编程方式更改系统显示大小 Android N 的相关文章

  • Android 卷页动画

    我对 Android 动画有点陌生 目前我正在开发一个故事活动 需要像 iPhone 中那样使用卷页动画 我发现 iPhone 中有一种方法可以做到这一点 但我仍然找不到在android中做的方法 所以请帮我解决这个问题 谢谢大家 谷歌代码
  • 有没有一种方法可以在不使用意图的情况下在活动之间发送数据?

    我有一个对于每个用户来说都是唯一的用户名 我想将其发送到某个活动 但我不想使用意图 create an intent and sends username Intent intent new Intent RegisterOwner thi
  • 在Java中测试服务器是否启动的正确方法?

    简单地查看是否可以建立与网站 服务器的连接的正确方法是什么 我想要这个用于我正在编码的应用程序 如果我的网站离线 它只会提醒我 Thanks 您可以使用 HttpURLConnection 发送请求并检查响应正文中是否有该页面特有的文本 而
  • 如何在android中批量插入sqlite

    我正在使用 SQLiteOpenHelper 进行数据插入 我需要插入2500个id和2500个名字 所以花费了太多时间 请任何人帮助我如何减少插入时间 我们可以一次插入多条记录吗 任何人都可以帮助我 先感谢您 代码 public clas
  • 对话框片段嵌入取决于设备

    在我的应用程序中 用户从联系人或通话记录中选择电话号码 选择联系人非常简单 并且在手机和平 板电脑上都可以很好地工作 i e 在手机上会弹出新的全屏活动 在桌子上我会看到带有联系人列表的漂亮弹出对话框 似乎无法从通话记录中选择电话号码 因此
  • 手机重置后AlarmManager闹钟不触发

    在我的应用程序中 用户加入一个计划 然后第二天中午会出现警报通知 这是我的代码 首先 我在 AlarmManager 中设置一个闹钟 如下所示 set alarm to the next day 12 00 noon of the join
  • Android SQLite 从代码中转储数据库以进行错误报告

    我正在为我的一个 Android 程序开发一种诊断工具 本质上 如果用户遇到问题 我想做一些类似 SQLite 的事情dump 参考 http www sqlite org sqlite html http www sqlite org s
  • Firebase Messaging FCM 在可配置的时间间隔内分发

    当您使用 FCM 向给定应用程序的所有设备发送推送时 这可能会导致许多用户同时打开他们的应用程序 从而导致大量服务器轮询 从而导致负载峰值 有没有一种方便的方法可以在给定的时间间隔内分发消息以进行计划推送 最后 我们找到了一种可能的方法 通
  • 无法在 Android 上编译 avahi

    我是交叉编译的新手 我被分配了使用android补丁的任务http avahi org ticket 354 http avahi org ticket 354将 avahi 核心编译为 android ndk build avahi co
  • 如何在其他呼叫运行时以编程方式合并呼叫(电话会议)

    我的要求是这样的 假设我当时正在拨打一个号码 并且我想以编程方式拨打另一个号码 到目前为止 我所做的是 当某些呼叫已经进行时 我能够呼叫特定号码 例如 假设我正在拨打号码 123 1 分钟后 通过使用Alarm Manger我触发一个事件来
  • org.apache.http.conn.HttpHostConnectException:在 android 中连接到 http://localhost 被拒绝

    我正在制作一个应用程序 在执行它时将图像上传到服务器并将其数据库更新到android中的服务器 它显示错误 Connection to http localhost refused 还有更多错误 我研究了这个问题 发现不是提供 URL 连接
  • java.net.ProtocolException:流意外结束

    我面临一个奇怪的问题 并且无法调试它 我已经实现了上传数据流的逻辑 并使用 Volley 来实现相同的功能 我在HurlStack addBodyIfExistsapi 以便可以处理 application octet stream 类型的
  • 垂直从上到下线手势检测器

    我用的是 手势工具 注意到对于垂直从上到下的线无法检测 因为我在代码中使用生成的手势文件 如下所示 但无法检测垂直从上到下的线手势检测 import java util ArrayList import android app Activi
  • Flutter - 删除 ListView 中项目之间的空间

    我正在使用 ListView builder 函数来创建项目列表 然而 iOS 中每个项目之间的空间很大 截图 你知道如何删除项目吗 看来是默认的 因为我没有添加它 code 列表显示 return Scaffold body ListVi
  • 从 Android 访问云存储

    我一直无法找到任何有关如何从 Android 应用程序使用云存储的具体文档 我确实遇到过这个客户端库 https cloud google com storage docs reference libraries然而 Google Clou
  • Android OptionsMenu问题,背景始终透明

    我的选项菜单总是不显示背景 背景是透明的 有谁知道如何摆脱这个 我的失败起源活动是从另一个自定义活动扩展的 我在 eclipse 上有这个项目 选项菜单工作正常 但自从我迁移到 AndroidStudio 后 选项菜单始终是透明的 我尝试更
  • 可用屏幕的尺寸

    我使用的是 Nexus 7 1280x800 android 4 2 2 API 17 我想获取屏幕的大小 将其划分为相同高度和宽度的正方形部分 我正在使用 FrameLayout 我的方块是 ImageView 的子类 我这样做 cont
  • 如何检测日期选择器对话框的取消单击?

    我正在使用以下 日期选择器的示例 http developer android com guide tutorials views hello datepicker html http developer android com guide
  • Android Studio 中自动打开“运行设备”选项卡

    在 Android Studio Flamingo 中有一个名为跑步设备并且它会在每次之后自动打开运行应用程序 有办法禁止这个自动打开吗 我尝试禁用启用物理 Android 设备的镜像选项 但选项卡仍然自动打开 基于此issue https
  • Android - 如何简单地拖放按钮?

    我在这里找到了一个适合初学者的教程 http androidrox wordpress com 2011 05 13 android sample app drag and drop image using touch http andro

随机推荐

  • CSS - 页眉 - 始终位于底部页脚和 100% 内容

    div div HEADER div div div CONTENT div div div FOTTER div div AND CSS html height 100 max height 100 body margin 0
  • 随着 Silverlight 从 Chrome 45 中消失,我有哪些替代方案?

    由于 Chrome 45 将于 9 月份放弃 NPAPI 支持并随之放弃 Silverlight 除了使用其他浏览器之外 我还有什么选择 我确实需要在我的应用程序中仍然支持 Chrome 并且不能强迫用户不更新他们的主浏览器 我可以使用 c
  • 从 VMWare 计算机访问主机 SQL Server

    我有 Windows 7 上面装有 SQL Server 2008 和 SQL Express 2012 我还在两台vmware机器上安装了win xp 我正在尽力使用 Management Studio 从虚拟机连接到主机上的 SQL S
  • 系统管理.管理异常

    我正在运行以下代码 System Management ManagementClass wmiNetAdapterConfiguration new System Management ManagementClass Win32 Netwo
  • 编译器是否允许像带有 -O2 的英特尔 C++ 编译器那样删除无限循环?

    以下测试代码在 VS 中无论是调试还是发布都能正确运行 在 GCC 中也能正确运行 对于带有调试功能的 ICC 它也能正确执行 但在启用优化时则无法正确执行 O2 include
  • 为什么静态字段不使用 google.gson.GsonBuilder JSON 解析器进行序列化?

    I tried 序列化一个对象使用google gson GsonBuilder如下 public class JsonHelper public static String ToJson Object o Type oType Gson
  • Android应用程序的唯一ID

    Android应用程序的唯一ID是什么 是包名吗 一台设备上可以有两个具有相同包名的应用程序吗 有 2 个不同的东西 Java 包和 Android 应用程序包 第二个必须是唯一的 有一篇关于它的好文章here
  • 作为 Java 运行一个简单的文本文件

    我有一个简单的 txt 文件 里面有纯 Java 代码 就像 public class C public static void main String args System out println This is executed 该文
  • 如何扩展 Quartz 调度程序?

    我计划使用石英调度器因为我读到了很多关于它的好意见 我的问题如下 在任何给定时间 系统中都会有数千个触发器 大多数触发器只会触发一个事件并消失 此外 我很可能在分配后不得不取消许多工作 基于新的输入 Quartz 可以扩展到这个程度吗 推荐
  • 使用 Feed Exporter 将项目从 Scrapyd 保存到 Amazon S3

    将 Scrapy 与 amazon S3 结合使用相当简单 您可以设置 FEED URI s3 MYBUCKET feeds 名称 s 时间 s jl FEED FORMAT jsonlines AWS ACCESS KEY ID 访问密钥
  • 运行时是否需要请求互联网权限(Android)?

    对于 Android 我们需要在运行时请求权限 以确保用户更好地理解为什么需要权限 我知道对于像这样的权限来说这是正确的WRITE CALENDAR and ACCESS FINE LOCATION但似乎互联网不需要它 这并不奇怪 因为几乎
  • Xcode6 无法将服务器的响应解析为 plist

    我正在尝试将我的苹果开发者帐户添加到 Xcode Beta 3 以便我可以在 iPhone 中运行应用程序 但没有成功 我转到 Xcode gt 首选项 gt 帐户 gt 添加 Apple ID 然后我输入我的用户凭据并按 确定 我不认为这
  • 将视频插入图库 [Android Q]

    记录一个SurfeceView我正在使用第 3 方library 这个库需要一个路径 在我的例子中保存的输出 录制的视频 是保存的视频路径 mRenderPipeline EZFilter input this effectBmp addF
  • Codeblocks 的 Boost 库设置 [关闭]

    很难说出这里问的是什么 这个问题模棱两可 含糊不清 不完整 过于宽泛或言辞激烈 无法以目前的形式合理回答 如需帮助澄清此问题以便重新打开 访问帮助中心 如何在 Codeblocks Windows 中使用 boost 库 从 boost 网
  • 内置 WPF 控件如何管理附加事件的事件处理程序?

    我知道当您将对象注册到鼠标的附加事件时 就会出现内存泄漏 这就是为什么你需要使用弱事件模式 我对这种模式有一个问题 如果您想使用它 则无法在 XAML 代码中定义处理程序 对我来说 这意味着像这样的每个代码都会泄漏
  • 我的流媒体音频播放器在通话期间继续播放 - 无法让它停止! (安卓)

    我有一个由多项活动和一项服务组成的应用程序 主要活动是用于流音频的 UI 当用户按下播放按钮时 服务就会启动 传输音频并读取元数据 然后 元数据会被推送到 UI 如果可见 和通知栏 在接到电话之前 一切都按预期运行 我曾假设通过使用标准媒体
  • 当主机代码中声明常量内存时,CUDA如何访问设备内核中的常量内存?

    根据记录 这是家庭作业 因此请记住这一点 或多或少地提供帮助 我们使用常量内存来存储 掩码矩阵 该矩阵将用于在更大的矩阵上执行卷积 当我在主机代码中时 我使用 cudaMemcpyToSymbol 将掩码复制到常量内存 我的问题是 一旦将其
  • 访问 DI 容器

    我正在开始一个新项目并建立工作基础 出现了一些问题 我可能会在这里问很多问题 希望我能找到一些答案 第一步是处理对象的依赖关系 我决定采用依赖注入设计模式 我对此有些陌生 来处理应用程序的所有这些问题 在实际编码时我遇到了一个问题 如果一个
  • Rails:发出 POST 请求时无法验证 CSRF 令牌的真实性

    我要实现POST request给我本地的开发人员 如下所示 HTTParty post http localhost 3000 fetch heroku body gt type gt product 但是 从服务器控制台报告 Start
  • 以编程方式更改系统显示大小 Android N

    背景 Android N 具有更改系统的功能Display Size从设置中 除了以前存在的更改功能之外Font Size 更改显示尺寸 图片来源 pcmag com Question 如果一个应用程序有android permission