自定义视图:我是否应该将"android:Widget"设置为视图样式的父视图?



我创建了一个自定义视图,它用一些文本字段包装xml布局。当我为这个视图定义默认样式并深入研究android的内部样式时,我注意到有一个元素android:Widget。我有一个问题——我应该把它用作我的自定义小部件的父级吗?

以防万一,下面是我视图的XML布局及其默认样式:

<?xml version="1.0" encoding="utf-8"?>
<merge xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
tools:orientation="vertical"
tools:parentTag="androidx.appcompat.widget.LinearLayoutCompat">
<FrameLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal">
<ImageView
android:layout_width="88dp"
android:layout_height="88dp"
android:layout_gravity="center"
android:src="@drawable/dashed_circle" />
<TextView
android:id="@+id/value"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
tools:text="12" />
<TextView
android:id="@+id/default_value"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="right"
tools:text="6" />
</FrameLayout>
<TextView
android:id="@+id/label"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal"
android:layout_marginTop="-3dp"
tools:text="Защита" />
</merge>
<style name="Widget.ParamView" parent=""> <!-- parent="android:Widget" ??? -->
<item name="valueTextAppearance">@style/TextAppearance.AppCompat</item>
<item name="defaultValueTextAppearance">@style/TextAppearance.AppCompat</item>
<item name="labelTextAppearance">@style/TextAppearance.AppCompat</item>
</style>

首先,不需要显式声明父关系:一个名为foo.bar的样式会自动继承自foo,因此如果不做任何其他操作,Widget.ParamView会自动继承于Widget

至于这是否是一件好事:它在实际实现中所做的只是将textAppearance属性设置为当前样式的textAppearance(老实说,我不太确定这有什么意义(。

基本上,它没有多大伤害,也没有多大帮助。那里没有太多。这主要取决于你。

最新更新