ListView 的样式应该影响它的元素吗?

Should styling a ListView affect its elements?

我今天阅读了 Android 样式和主题,并尝试将其应用于我的应用程序中的列表作为测试。该应用程序有一个列表元素,该元素以编程方式添加了 TextView。

根据文档,将样式应用为主题也会影响子视图。

所以我尝试了这个:

<ListView
    android:id="@+id/list"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:theme="@style/TextAppearance.AppCompat.Small"/>

我预计列表中的 TextView 文本会变小,但什么也没发生。

我也试了@style/TextAppearance.MaterialComponents.Headline1,也没效果

这是为什么?

我自己没有更改任何样式或主题设置。我使用 Android Studio 为项目生成的默认设置。

像上面那样将样式作为主题应用到视图上不应该改变什么吗?

您使用的样式 "TextAppearance.AppCompat.Small" 适用于 TextView 而不是像 ListView 这样的通用样式。

您需要将样式应用于列表 item,即 TextView。您可以为文本外观、字体、大小等创建自定义样式,并在您的整个应用中重复使用它。

如果您以编程方式创建视图,则可以使用自定义适配器(扩展您的默认适配器),覆盖 getView 方法以应用您的样式。参考 this

参考 this @Nick Butcher 的精彩文章