@act262
2017-09-19T05:17:39.000000Z
字数 2393
阅读 2518
AndroidStudio
// 比如某个地方要用到这个按钮,就引用这个公用样式ConfirmButtonStyle,然后就是重复这么搞了<io.micro.widget.ConfirmButtonstyle="@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.ConfirmButtonandroid: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 themeMissing 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变成_了
把.改成下划线或者去掉就可正常预览了。