Pha*_*dra 5 android themes android-imageview
我正试图为我的问题找到解决方案,但我找不到任何地方,甚至谷歌搜索它.
我正在编写一个使用主题的Android应用程序,用户可以通过dinamically切换它们,然后app重新启动以应用所选择的应用程序.这很好用.
但是,我无法找到基于所选主题更改imageview元素的方法.我无法理解Android应用程序使用主题的方式,我无法改变文件,但只能更改应用程序对象中的主题名称,而在主题样式标记中我无法指定单个imageview的src.
我也可以仅使用windowbackground属性来满足我的应用程序要求.但是,我无法使用scaletype属性按比例拉伸,也使用bitmapdrawable中的重力,我无法理解如何使其在窗口内减少维持图像比例.
感谢大家回复我的问题,对不起我的英语!:)
最近有个需求ImageView,需要根据主题换个要换的图片。我使用ExpandableListView和ImageView用作组指示符,而不是开箱即用的组指示符。由于我的应用程序同时支持浅色和深色主题,因此我想将组指示器、操作栏图标也切换为浅色和深色版本。
方法如下:
在res/values/attrs.xml文件中为每个要根据主题更改的 ImageView 或 ActionBar 图标声明自定义属性:
<declare-styleable name="customAttrs">
<attr name="actionSearchIcon" format="reference" />
<attr name="actionAcceptIcon" format="reference" />
<attr name="actionRefreshIcon" format="reference" />
<attr name="groupIndicatorIcon" format="reference" />
</declare-styleable>
Run Code Online (Sandbox Code Playgroud)
在res/values/styles.xml取决于您所针对的版本的主题文件中,定义指向适当可绘制对象的相同属性。例如下面,Black主题指向与深色主题相关的可绘制对象,Light主题指向与浅色主题相关的可绘制对象。
<style name="Black" parent="@style/Theme.AppCompat">
<item name="actionSearchIcon">@drawable/ic_action_search</item>
<item name="actionAcceptIcon">@drawable/ic_action_accept</item>
<item name="actionRefreshIcon">@drawable/navigation_refresh</item>
<item name="groupIndicatorIcon">@drawable/group_indicator</item>
</style>
<style name="Light" parent="@style/Theme.AppCompat.Light">
<item name="actionSearchIcon">@drawable/ic_action_search_light</item>
<item name="actionAcceptIcon">@drawable/ic_action_accept_light</item>
<item name="actionRefreshIcon">@drawable/navigation_refresh_light</item>
<item name="groupIndicatorIcon">@drawable/group_indicator_light</item>
</style>
Run Code Online (Sandbox Code Playgroud)
最后,进入实际布局,将相关属性指向您定义的属性,而不是直接指向可绘制对象。例如在 ActionBar 图标的情况下:
<item
android:id="@+id/action_refresh"
android:icon="?attr/actionRefreshIcon"
android:orderInCategory="107"
android:title="@string/action_refresh"
app:showAsAction="always"/>
<item
android:id="@+id/action_accept"
android:icon="?attr/actionAcceptIcon"
android:orderInCategory="108"
android:title="@string/action_accept"
app:showAsAction="always"/>
<item
android:id="@+id/action_search"
android:icon="?attr/actionSearchIcon"
android:orderInCategory="50"
android:title="@string/action_search"
app:actionViewClass="android.support.v7.widget.SearchView"
app:showAsAction="collapseActionView|always"/>
Run Code Online (Sandbox Code Playgroud)
或者在 ImageView 的情况下:
<ImageView
android:id="@+id/group_indicator"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:contentDescription="@string/app_name"
android:src="?attr/groupIndicatorIcon"/>
Run Code Online (Sandbox Code Playgroud)
令人兴奋的是,这个概念可以应用于任何控件或任何属性:)
| 归档时间: |
|
| 查看次数: |
1774 次 |
| 最近记录: |