我正在尝试修改我的SystemUI,以便蜂窝信号状态更像AOSP。我已经替换了必要的图像,但现在布局不对。
目标是让E
图标和数据箭头实际上与信号条三角形重叠。
我在SystemUI APK中找到了正确的XML(/res/layout/mobile_signal_group.xml
)。这是原作:
<?xml version="1.0" encoding="utf-8"?>
<FrameLayout android:id="@id/mobile_slot" android:layout_width="wrap_content" android:layout_height="wrap_content" android:paddingStart="@dimen/signal_cluster_padding"
xmlns:android="http://schemas.android.com/apk/res/android" xmlns:systemui="http://schemas.android.com/apk/res-auto">
<LinearLayout android:layout_width="wrap_content" android:layout_height="wrap_content">
<ImageView android:id="@id/slot_no_sims" android:visibility="gone" android:layout_width="wrap_content" android:layout_height="wrap_content" android:contentDescription="@string/accessibility_no_sims" />
<LinearLayout android:orientation="horizontal" android:id="@id/data_combo" android:layout_width="wrap_content" android:layout_height="wrap_content">
<FrameLayout android:layout_width="wrap_content" android:layout_height="wrap_content">
<ImageView android:id="@id/data_type" android:layout_width="wrap_content" android:layout_height="wrap_content" />
<ImageView android:id="@id/data_inout" android:layout_width="wrap_content" android:layout_height="wrap_content" />
</FrameLayout>
</LinearLayout>
<FrameLayout android:id="@id/mobile_combo" android:layout_width="wrap_content" android:layout_height="wrap_content">
<ImageView android:id="@id/mobile_sim_icon" android:visibility="gone" android:layout_width="wrap_content" android:layout_height="wrap_content" />
<com.android.systemui.statusbar.AnimatedImageView android:theme="@style/DualToneLightTheme" android:id="@id/mobile_signal" android:layout_width="wrap_content" android:layout_height="wrap_content" systemui:hasOverlappingRendering="false" />
<com.android.systemui.statusbar.AnimatedImageView android:theme="@style/DualToneDarkTheme" android:id="@id/mobile_signal_dark" android:layout_width="wrap_content" android:layout_height="wrap_content" android:alpha="0.0" systemui:hasOverlappingRendering="false" />
<ImageView android:id="@id/mobile_type" android:layout_width="wrap_content" android:layout_height="wrap_content" />
<ImageView android:layout_gravity="end|bottom|center" android:id="@id/mobile_inout" android:layout_width="wrap_content" android:layout_height="wrap_content" />
</FrameLayout>
<FrameLayout android:id="@id/mobile_combo_2stage" android:layout_width="wrap_content" android:layout_height="wrap_content">
<ImageView android:layout_gravity="bottom|center" android:id="@id/data_signal" android:layout_width="wrap_content" android:layout_height="wrap_content" />
<ImageView android:id="@id/data_rat_type" android:layout_width="wrap_content" android:layout_height="wrap_content" />
<ImageView android:id="@id/voice_signal" android:layout_width="wrap_content" android:layout_height="wrap_content" />
<ImageView android:id="@id/voice_rat_type" android:layout_width="wrap_content" android:layout_height="wrap_content" />
</FrameLayout>
</LinearLayout>
</FrameLayout>
我修改了它@id/data_type
和@id/data_inout
并将它们移到@id/mobile_sim_icon
正下方:
<FrameLayout android:id="@id/mobile_combo" android:layout_width="wrap_content" android:layout_height="wrap_content">
<ImageView android:id="@id/mobile_sim_icon" android:visibility="gone" android:layout_width="wrap_content" android:layout_height="wrap_content" />
<ImageView android:id="@id/data_type" android:layout_width="wrap_content" android:layout_height="wrap_content" />
<ImageView android:id="@id/data_inout" android:layout_width="wrap_content" android:layout_height="wrap_content" />
<com.android.systemui.statusbar.AnimatedImageView android:theme="@style/DualToneLightTheme" android:id="@id/mobile_signal" android:layout_width="wrap_content" android:layout_height="wrap_content" systemui:hasOverlappingRendering="false" />
<com.android.systemui.statusbar.AnimatedImageView android:theme="@style/DualToneDarkTheme" android:id="@id/mobile_signal_dark" android:layout_width="wrap_content" android:layout_height="wrap_content" android:alpha="0.0" systemui:hasOverlappingRendering="false" />
<ImageView android:id="@id/mobile_type" android:layout_width="wrap_content" android:layout_height="wrap_content" />
<ImageView android:layout_gravity="end|bottom|center" android:id="@id/mobile_inout" android:layout_width="wrap_content" android:layout_height="wrap_content" />
</FrameLayout>
(摘要代码段)
但是当我这样做并使用修改后的XML进行flash时,SystemUI进入崩溃启动循环。似乎我对XML所做的任何更改都会导致这种情况。我对此很陌生,所以也许我错过了一步。
到目前为止,我已经尝试过:
data-type
,data-inout
移至另一个FrameLayout data_combo
FrameLayout mobile_combo
LinearLayout
所有导致SystemUI卡在崩溃循环中。
还有什么我可以尝试的吗?
设备:
答案 0 :(得分:2)
正如所讨论的in the chat,当您在@id/data_type
之外移动@id/data_inout
和@id/data_combo
时,SystemUI会因NullPointerException而崩溃。这是因为findViewbyId()
是针对R.id.data_combo
调用的,因此正在寻找@id/data_combo
的直接后代。
由于您无法访问Java源代码,因此一种解决方法是将@id/data_combo
包裹在@id/mobile_combo
左右,以便@id/data_type
和@id/data_inout
保持为@id/data_combo
的直接后代。 <LinearLayout android:id="@id/data_combo" ... >
<FrameLayout android:id="@id/mobile_combo" ... >
...
</FrameLayout>
</LinearLayout>
。例如:
const arr = [{ id: 1, foo: 'bar' }, { id: 2 }]
arr.map(o => o.foo && true).includes(true)
// true