Android 自定义视图构造函数中的重写样式
我试图通过自定义视图的构造函数设置其样式。它没有预期的效果 QueueButton.java (布局图中)Android 自定义视图构造函数中的重写样式,android,android-view,android-styles,Android,Android View,Android Styles,我试图通过自定义视图的构造函数设置其样式。它没有预期的效果 QueueButton.java (布局图中) 在下面的屏幕截图中,有三种不同的结果 左:类的结果,如所述,但没有XML中声明的样式 中间:相同的XML,但在双参数构造函数中使用super(context,attrs) 右:在XML中声明样式的结果。这是理想的外观 显然,这是错误的做法。我未能找到相关信息,说明原因以及如何取得适当的结果 我认为您需要传入属性,而不是直接传入样式 将属性添加到attrs.xml文件中(如果您还没有
在下面的屏幕截图中,有三种不同的结果
- 左:类的结果,如所述,但没有XML中声明的样式
- 中间:相同的XML,但在双参数构造函数中使用
super(context,attrs)
- 右:在XML中声明样式的结果。这是理想的外观
我认为您需要传入属性,而不是直接传入样式 将属性添加到attrs.xml文件中(如果您还没有属性,则在values文件夹中创建一个属性)。 然后为你的应用程序创建一个主题,并将新属性链接到该主题中所需的样式(或者,如果你已经在使用一个主题,就将其添加到现有主题中)。 最后,在自定义视图中,构造函数将属性传递给超级构造函数。Android将在上下文的主题中查找该属性(根据文档),并且应该使用它。 但是,请注意,如果在XMl中指定了样式,它将覆盖构造函数中使用的样式,因为它具有优先权 事情最终应该是这样的: attrs.xml
<?xml version="1.0" encoding="utf-8"?>
<resources>
<attr name="queueButtonStyle" format="reference" />
</resources>
<QueueButton
android:id="@+id/queueBtn"
style="@style/queuebutton"
android:layout_width="50dp"
android:layout_height="35dp"
android:layout_gravity="center_horizontal"
android:focusable="false"
android:src="@drawable/remove_queue_icon" />
<?xml version="1.0" encoding="utf-8"?>
<resources>
<attr name="queueButtonStyle" format="reference" />
</resources>
<style name="AppBaseTheme" parent="android:Theme.Holo.Light">
<item name="queueButtonStyle">@style/queuebutton</item>
</style>
<style name="queuebutton">
...content...
</style>
public class QueueButton extends ImageButton {
public QueueButton(Context context) {
super(context);
}
public QueueButton(Context context, AttributeSet attrs) {
super(context, attrs, R.attr.queueButtonStyle);
}
public QueueButton(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, R.attr.queueButtonStyle);
}
}