我了解到,使用ADB one可以使用以下命令强制显示布局向导:
adb shell setprop debug.layout true
adb shell service call activity 1599295570 # SYSPROPS_TRANSACTION多亏了SYSPROPS_TRANSACTION代码,开发人员才能看到布局网格。
其示例可以在here中找到
但是,如果我想要更改一些东西,比如RTL (从右到左)-我怀疑SYSPROPS_TRANSACTION调用不会强制重新渲染,因为它需要重新启动活动,因为设备的旋转将会起作用:
adb shell setprop debug.force_rtl true
adb shell settings put system user_rotation 3 # landscape
adb shell settings put system user_rotation 0 # portrait虽然我不介意使活动无效,但我不认为我应该成为关于它的“手册”。有没有一种机制可以在不旋转的情况下刷新屏幕?
我在AOSP中查找,发现了以下内容:
private void writeToForceRtlLayoutSetting(boolean isEnabled) {
Settings.Global.putInt(mContext.getContentResolver(),
Settings.Global.DEVELOPMENT_FORCE_RTL,
isEnabled ? SETTING_VALUE_ON : SETTING_VALUE_OFF);
DisplayProperties.debug_force_rtl(isEnabled);
}大致相当于:
adb shell settings put global debug.force_rtl 1.0 #or 0.0 for off但我已经注意到,如果我这样做,并且循环一次,它不会改变
我一直在尝试找到适当的广播意图,以便它可以工作,但我找不到一个只是告诉屏幕重新渲染的意图
adb shell am broadcast <SOMETHING HERE WOULD BE NICE>我从DarkModePreference中拿出一页,试图告诉它电池充电状态已经改变,但你不能从ADB中这样做:
adb shell am broadcast android.os.action.POWER_SAVE_MODE_CHANGED但也没有运气-没有刷新发生
注意:
有趣的是,安卓源代码中的layout bounds and RTL elements are grouped在更改时并没有使用相同的行为
发布于 2021-08-09 14:07:11
我注意到如果我使用
adb shell wm size我可以读取窗口的大小,并且作为额外的奖励,当设置它时,它会导致从右到左重新绘制。所以现在我要做的是读取窗口大小,保存它,稍微更改一下,将其设置为更改后的值,然后再重新设置。我的脚本类似于:
run("adb shell settings put global debug.force_rtl 1.0")
old_size = run("adb shell wm size")
run("adb shell wm size 100x100")
run("adb shell wm size " + old_size)它会迫使右向左。这有点老生常谈,但它是有效的。
https://stackoverflow.com/questions/68496343
复制相似问题