Android 应用程序:根据代码中的主题切换图像
Android app: Switch images based on theme from code
我正在尝试显示一个最喜欢的按钮,它有两种状态(pressed/not 已按下)。根据所选主题,我有 2 组图像要使用 (Light/Dark)。
虽然我可以根据主题切换图像,但我不确定如何从代码中获取图像的 Url,以便我可以根据按钮状态显示图像。我也尝试过使用选择器,但我似乎无法将 ?attr 值放入选择器中以按主题切换图像。
样式定义:
<attr name="star_on_image" format="reference"/>
<attr name="star_off_image" format="reference"/>
<style name="LightTheme" parent="Theme.AppCompat.Light.DarkActionBar">
<item name="star_on_image">@drawable/ic_action_important</item>
<item name="star_off_image">@drawable/ic_action_not_important</item>
</style>
<style name="DarkTheme" parent="Theme.AppCompat">
<item name="star_on_image">@drawable/ic_action_dark_important</item>
<item name="star_off_image">@drawable/ic_action_dark_not_important</item>
</style>
按钮定义:
<ImageButton
android:layout_width="@dimen/button_size"
android:layout_height="@dimen/button_size"
android:id="@+id/favorite_button_on"
android:src="?attr/star_off_image"
android:scaleType="center"
android:visibility="gone"
/>
我想通过代码将此图片的 src 属性切换为“?attr/star_on_image”。
关于如何做到这一点有什么想法吗?
使用这个:
TypedValue typedValue = new TypedValue();
getTheme().resolveAttribute(R.attr.star_on_image, typedValue, true);
ImageButton star = ((ImageButton)findViewById(R.id.favorite_button_on));
star.setImageResource(typedValue.resourceId);
我正在尝试显示一个最喜欢的按钮,它有两种状态(pressed/not 已按下)。根据所选主题,我有 2 组图像要使用 (Light/Dark)。
虽然我可以根据主题切换图像,但我不确定如何从代码中获取图像的 Url,以便我可以根据按钮状态显示图像。我也尝试过使用选择器,但我似乎无法将 ?attr 值放入选择器中以按主题切换图像。
样式定义:
<attr name="star_on_image" format="reference"/>
<attr name="star_off_image" format="reference"/>
<style name="LightTheme" parent="Theme.AppCompat.Light.DarkActionBar">
<item name="star_on_image">@drawable/ic_action_important</item>
<item name="star_off_image">@drawable/ic_action_not_important</item>
</style>
<style name="DarkTheme" parent="Theme.AppCompat">
<item name="star_on_image">@drawable/ic_action_dark_important</item>
<item name="star_off_image">@drawable/ic_action_dark_not_important</item>
</style>
按钮定义:
<ImageButton
android:layout_width="@dimen/button_size"
android:layout_height="@dimen/button_size"
android:id="@+id/favorite_button_on"
android:src="?attr/star_off_image"
android:scaleType="center"
android:visibility="gone"
/>
我想通过代码将此图片的 src 属性切换为“?attr/star_on_image”。 关于如何做到这一点有什么想法吗?
使用这个:
TypedValue typedValue = new TypedValue();
getTheme().resolveAttribute(R.attr.star_on_image, typedValue, true);
ImageButton star = ((ImageButton)findViewById(R.id.favorite_button_on));
star.setImageResource(typedValue.resourceId);