gpt4 book ai didi

android - 为相同的小部件类型定义不同的主题样式

转载 作者:太空宇宙 更新时间:2023-11-03 12:57:03 24 4
gpt4 key购买 nike

我想为 Android 小部件定义不同的主题样式。在下面的示例中,有两个 ImageView 小部件,其中一个使用我的“主题”样式,另一个使用手动样式。我希望以一种我可以忽略“base_theme”前缀的方式实现配置文件,这样它就可以根据 Activity 主题配置自动确定。

关于编写主题的文档提到了如何更改所有 ImageView 或按钮的样式,而不是针对具有样式属性的特定样式。我发现可以通过使用样式化的自定义组件来解决我的问题,但我认为有一些更好的方法可以解决我的问题。

base_style.xml

<style name="base_theme" parent="android:Theme.NoTitleBar">
</style>

<style name="base_theme.event_list_filter">
<item name="android:orientation">horizontal</item>
<item name="android:layout_width">fill_parent</item>
<item name="android:layout_height">wrap_content</item>
<item name="android:layout_margin">10dp</item>
<item name="android:background">@drawable/base_white_rounded</item>
</style>

<style name="base_theme.base_event_list_filter_image">
<item name="android:layout_width">wrap_content</item>
<item name="android:layout_height">wrap_content</item>
<item name="android:padding">10dp</item>
<item name="android:background">@drawable/vr_black_border</item>
</style>

<style name="base_theme.base_event_list_scrollable">
<item name="android:layout_width">fill_parent</item>
<item name="android:layout_height">0dp</item>
<item name="android:layout_weight">1</item>
<item name="android:background">@drawable/base_white_rounded</item>
</style>

<style name="base_theme.base_event_list_table">
<item name="android:layout_width">fill_parent</item>
<item name="android:layout_height">fill_parent</item>
</style>

activity_layout.xml

<LinearLayout style="@style/base_theme.base_event_list_filter" >
<ImageView
style="@style/base_theme.base_event_list_filter_image"
android:src="@drawable/pic0" />

<ImageView
...
android:src="@drawable/pic1" />
</LinearLayout>

谢谢你的帮助,
马切克

最佳答案

我找到了解决办法。我希望它能帮助有类似主题问题的人。

首先,我向我的 base_theme 添加了新属性,然后按以下方式配置它们:

base_style.xml

<?xml version="1.0" encoding="utf-8"?>
<resources>

<!-- add attributes to your theme -->s
<declare-styleable name="base_theme">
<attr name="event_list_filter" format="reference" />
<attr name="pic0" format="reference" />
</declare-styleable>

<!-- fill attributes with your own styles/drawables/etc -->
<style name="base_theme" parent="android:Theme.NoTitleBar">
<item name="event_list_filter">@style/base_theme.event_list_filter_image</item>
<item name="pic0">@drawable/base_theme.pic0</item>
</style>

<!-- define corresponding resource -->
<style name="base_theme.base_event_list_filter_image">
<item name="android:layout_width">wrap_content</item>
<item name="android:layout_height">wrap_content</item>
<item name="android:padding">10dp</item>
<item name="android:background">@drawable/vr_black_border</item>
</style>

<drawable name="base_theme.pic0">@drawable/base_pic0</drawable>

</resources>

另一种布局steel_styles.xml

<?xml version="1.0" encoding="utf-8"?>
<resources>

<!-- fill attributes with your own styles/drawables/etc -->
<style name="steel_theme" parent="@style/base_theme">
<item name="pic0">@drawable/steel_theme.pic0</item>
</style>

<drawable name="steel_theme.pic0">@drawable/steel_pic0</drawable>

</resources>

Activity 布局文件activity_layout.xml

...
<ImageView
style="?attr/event_list_filter_image"
android:src="?attr/pic0" />
...

有了这样的配置,pic0 将根据 AndroidManifest.xml 中为 Activity 设置的主题在屏幕上有所不同。

关于android - 为相同的小部件类型定义不同的主题样式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18229960/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com