actionButtonStyle不支持lib v23.1.0

时间:2015-10-26 22:28:20

标签: android android-support-library android-toolbar appcompat-v7-r23

使用最新的支持lib版本(v23.1.0),我注意到其中一个主题属性不再适用于我。我正在使用public func numberPad(numberPad: APNumberPad, functionButtonAction:UIButton, textInput: UIResponder) { var current:UITextField? for field in editCells { if (current != nil) { current?.resignFirstResponder() delay (0) { field.valueTextField.becomeFirstResponder() } return; } if (field.valueTextField == activeField) { current = field.valueTextField } } textInput.resignFirstResponder() } 主题属性来自定义工具栏中的操作按钮:

actionButtonStyle

支持lib v23.0.1完全正常,但不再适用于v23.1.0。

所以问题是 - 这是自定义工具栏操作按钮的正确方法吗?如果没有,最新支持lib发布的正确方法是什么?

试图问第一方(https://code.google.com/p/android/issues/detail?id=191544) - 但得到了“我们不关心”的回复:(

1 个答案:

答案 0 :(得分:1)

让我们开始理解为什么v7支持库v23.1.0中存在此问题。

AppCompatTextHelper v23.0.1:

// Now check TextAppearance's textAllCaps value
if (ap != -1) {
    TypedArray appearance = context.obtainStyledAttributes(ap, R.styleable.TextAppearance);
    if (appearance.hasValue(R.styleable.TextAppearance_textAllCaps)) {
        setAllCaps(appearance.getBoolean(R.styleable.TextAppearance_textAllCaps, false));
    }
    appearance.recycle();
}

// Now read the style's value
a = context.obtainStyledAttributes(attrs, TEXT_APPEARANCE_ATTRS, defStyleAttr, 0);
if (a.hasValue(0)) {
    setAllCaps(a.getBoolean(0, false));
}
a.recycle();

AppCompatTextHelper v23.1.0:

// Now check TextAppearance's textAllCaps value
if (ap != -1) {
    TypedArray appearance = context.obtainStyledAttributes(ap, R.styleable.TextAppearance);
    if (appearance.hasValue(R.styleable.TextAppearance_textAllCaps)) {
        setAllCaps(appearance.getBoolean(R.styleable.TextAppearance_textAllCaps, false));
    }
    appearance.recycle();
}

// Now read the style's value
a = context.obtainStyledAttributes(attrs, TEXT_APPEARANCE_ATTRS, defStyleAttr, 0);
if (a.getBoolean(0, false)) {
    setAllCaps(true);
}
a.recycle();

正如您在v23.1.0中看到的那样setAllCaps仅在样式的值为true时才会被调用。这就是为什么当值为false时没有任何反应。在以前的版本中,每次有值时都会调用setAllCaps

如何恢复属性textAllCaps,如版本23.0.1?

将这些行添加到styles.xml:

<style name="AppTheme.AppBarOverlay" parent="ThemeOverlay.AppCompat.Dark.ActionBar">
    <item name="actionButtonStyle">@style/Custom.Widget.AppCompat.ActionButton</item>
    <item name="actionMenuTextAppearance">@style/Custom.TextAppearance.AppCompat.Widget.ActionBar.Menu</item>
</style>

<style name="Custom.TextAppearance.AppCompat.Widget.ActionBar.Menu" parent="@style/TextAppearance.AppCompat.Widget.ActionBar.Menu">
    <item name="textAllCaps">false</item>
</style>

<style name="Custom.Widget.AppCompat.ActionButton" parent="Widget.AppCompat.ActionButton">
    <item name="textAllCaps">false</item>
</style>

将主题应用到工具栏:

<android.support.v7.widget.Toolbar
    android:id="@+id/toolbar"
    android:layout_width="match_parent"
    android:layout_height="?attr/actionBarSize"
    app:theme="@style/AppTheme.AppBarOverlay"/>