Android Debug Bridge 强制 RTL 选项在没有 root 的情况下应用
Android Debug Bridge force RTL option to apply without root
我了解到使用 ADB 可以使用以下命令强制显示布局指南:
adb shell setprop debug.layout true
adb shell service call activity 1599295570 # SYSPROPS_TRANSACTION
由于 SYSPROPS_TRANSACTION
代码,这允许开发人员查看布局网格。
可以找到其中的例子here
但是,如果我想更改 RTL(从右到左)之类的东西 - SYSPROPS_TRANSACTION
调用不会强制重新渲染,我怀疑是因为它需要重新启动 activity,给定旋转设备将起作用:
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
虽然我不介意使 activity 无效,但我认为我不应该成为这个“手册”。有没有不做旋转刷新屏幕的机制?
我查看了 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
但我注意到,如果我执行此操作并进行旋转,它不会改变
我一直在努力寻找合适的广播 intent 以使其正常工作,但我找不到只告诉屏幕重新呈现的广播 intent
adb shell am broadcast <SOMETHING HERE WOULD BE NICE>
我从 DarkModePreference 中取出一个页面并试图告诉它电池充电状态已经改变,但是你不能从 ADB 这样做:
adb shell am broadcast android.os.action.POWER_SAVE_MODE_CHANGED
但也不走运 - 没有刷新发生
注意:
有趣的是 android 源代码中的 layout bounds and RTL elements are grouped,但更改后不要使用相同的行为
我注意到如果我使用
adb shell wm size
我可以读取 window 的大小,作为奖励,当设置它时,它会导致从右到左的重绘。所以现在我要做的是读取 window 大小,保存它,稍微更改一下,将其设置为更改后的值并重新设置。我的脚本看起来像:
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)
而且它会强制从右到左。这有点 hacky 但它有效。
我了解到使用 ADB 可以使用以下命令强制显示布局指南:
adb shell setprop debug.layout true
adb shell service call activity 1599295570 # SYSPROPS_TRANSACTION
由于 SYSPROPS_TRANSACTION
代码,这允许开发人员查看布局网格。
可以找到其中的例子here
但是,如果我想更改 RTL(从右到左)之类的东西 - SYSPROPS_TRANSACTION
调用不会强制重新渲染,我怀疑是因为它需要重新启动 activity,给定旋转设备将起作用:
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
虽然我不介意使 activity 无效,但我认为我不应该成为这个“手册”。有没有不做旋转刷新屏幕的机制?
我查看了 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
但我注意到,如果我执行此操作并进行旋转,它不会改变
我一直在努力寻找合适的广播 intent 以使其正常工作,但我找不到只告诉屏幕重新呈现的广播 intent
adb shell am broadcast <SOMETHING HERE WOULD BE NICE>
我从 DarkModePreference 中取出一个页面并试图告诉它电池充电状态已经改变,但是你不能从 ADB 这样做:
adb shell am broadcast android.os.action.POWER_SAVE_MODE_CHANGED
但也不走运 - 没有刷新发生
注意:
有趣的是 android 源代码中的 layout bounds and RTL elements are grouped,但更改后不要使用相同的行为
我注意到如果我使用
adb shell wm size
我可以读取 window 的大小,作为奖励,当设置它时,它会导致从右到左的重绘。所以现在我要做的是读取 window 大小,保存它,稍微更改一下,将其设置为更改后的值并重新设置。我的脚本看起来像:
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)
而且它会强制从右到左。这有点 hacky 但它有效。