@act262
2017-09-19T05:17:39.000000Z
字数 2393
阅读 2345
AndroidStudio
// 比如某个地方要用到这个按钮,就引用这个公用样式ConfirmButtonStyle,然后就是重复这么搞了
<io.micro.widget.ConfirmButton
style="@style/ConfirmButtonStyle"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:enabled="false"
android:text="@string/sure"
android:textColor="@color/pub_btn_color_1" />
<!-- 自定义组件主题属性 -->
<attr name="Attr.Widget.ConfirmButton" format="reference" />
<!-- Base application theme. -->
<style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">
<item name="colorPrimary">@color/c_ff0a1437</item>
<item name="colorPrimaryDark">@color/c_ff0a1437</item>
// 一些全局属性的配置
<item name="Attr.Widget.ConfirmButton">@style/ConfirmButtonStyle</item>
</style>
<!-- 确认类按钮的默认样式 -->
<style name="ConfirmButtonStyle" parent="Widget.AppCompat.Button">
<item name="android:text">@string/confirm</item>
<item name="android:textSize">@dimen/text_px_50</item>
<item name="android:textColor">@android:color/white</item>
<item name="android:minHeight">@dimen/ui_px_120</item>
<item name="android:minWidth">@dimen/ui_px_560</item>
<item name="android:gravity">center</item>
<item name="android:background">@drawable/selector_confirm_button</item>
</style>
ConfirmButton
,第二个构造函数中设置默认属性R.attr.Attr_Widget_ConfirmButton
public class ConfirmButton extends android.support.v7.widget.AppCompatButton {
public ConfirmButton(Context context) {
this(context, null);
}
public ConfirmButton(Context context, AttributeSet attrs) {
this(context, attrs, R.attr.Attr_Widget_ConfirmButton);
}
public ConfirmButton(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
init();
}
private void init() {
// xxx
}
}
在布局中使用自定义按钮
<io.micro.widget.ConfirmButton
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:enabled="false"
android:text="@string/sure"
android:textColor="@color/pub_btn_color_1" />
AS预览不正常,但是部署到手机是正常的
AS的提示:
Failed to find style 'Attr_Widget_ConfirmButton' in current theme
Missing styles. Is the correct theme chosen for this layout? Use the Theme combo box above the layout to choose a different layout, or fix the theme style references.
解决方案:AS 预览主题配置为当前的主题,比如使用当前对应的主题AppTheme
But在已配置当前主题的情况下AS预览还是没有我们想要的效果。
最后发现是属性命名问题,不能带有下划线的属性名,虽然编译没问题,但是在预览下不正常。估计是AS的一个小问题吧。
Attr.Widget.ConfirmButton
-> R.attr.Attr_Widget_ConfirmButton
属性名之间的.
在R.java
变成_
了
把.
改成下划线或者去掉就可正常预览了。