Android   发布时间:2022-04-28  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了android – 如何使style =“?attr / actionButtonStyle”适用于矩形工具栏按钮大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
在我们之前的holo设计应用程序(targetSdkVersion 21,主题为Theme.Sherlock.Light.DarkActionBar)中,我们使用系统样式属性attr / actionButtonStyle来定义我们的自定义操作栏按钮样式.

actionbar_custom_view_done_discard.xml

<LinearLayout xmlns:android="http://scheR_958_11845@as.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="horizontal">
    <include layout="@layout/actionbar_discard_button" />
    <View
        android:layout_width="1px"
        android:layout_height="match_parent"
        android:layout_marginTop="12dp"
        android:layout_marginBottom="12dp"
        android:BACkground="?attr/actionBarCustomViewDividerColor" />    
    <include layout="@layout/actionbar_done_button" />
</LinearLayout>

actionbar_done_button.xml

<FrameLayout xmlns:android="http://scheR_958_11845@as.android.com/apk/res/android"
    style="?attr/actionButtonStyle"
    android:id="@+id/actionbar_done"
    android:layout_width="0dp"
    android:layout_height="match_parent"
    android:layout_weight="1">

    <TextView style="?attr/actionBarTabTextStyle"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center"
        android:paddingRight="20dp"
        android:drawableLeft="?attr/actionBarDoneIcon"
        android:drawablePadding="8dp"
        android:gravity="center_vertical"
        android:text="@String/save" />
</FrameLayout>

StockAlertFragmentActivity.java

public class StockAlertFragmentActivity extends SherlockFragmentActivity {
    @Override
    public void onCreate(Bundle savedInstanceStatE) {
        super.onCreate(savedInstanceStatE);

        // Inflate a "Done/Discard" custom action bar view.
        LayoutInflater inflater = (LayoutInflater) this.getSupportActionBar().getThemedContext()
                .getSystemservice(LAYOUT_INFLATER_serviCE);
        final View customActionBarView = inflater.inflate(
                R.layout.actionbar_custom_view_done_discard,null);

当我们点击SAVE按钮时,结果如下.

android – 如何使style =“?attr / actionButtonStyle”适用于矩形工具栏按钮

但是,在将@R_303_9616@程序迁移到材料设计的应用程序(targetSdkVersion 23,主题Theme.AppCompat.Light.NoActionBar)后,系统属性attr / actionButtonStyle不再适用于矩形按钮.

相反,它在矩形按钮的顶部绘制一个圆形覆盖.

toolbar_with_save_discard.xml

<android.support.v7.widget.Toolbar xmlns:android="http://scheR_958_11845@as.android.com/apk/res/android"
    xmlns:app="http://scheR_958_11845@as.android.com/apk/res-auto"
    android:id="@+id/toolbar"
    android:layout_height="wrap_content"
    android:layout_width="match_parent"
    android:minHeight="?attr/actionBarSize"
    android:BACkground="?attr/colorPriMary"
    android:elevation="4dp"
    android:contenTinsetLeft="0dp"
    android:contenTinsetStart="0dp"
    app:contenTinsetLeft="0dp"
    app:contenTinsetStart="0dp"
    android:contenTinsetright="0dp"
    android:contenTinsetEnd="0dp"
    app:contenTinsetright="0dp"
    app:contenTinsetEnd="0dp"
    app:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar"
    app:popupTheme="@style/ThemeOverlay.AppCompat.Light" >

    <!-- android:elevation="4dp" is used due to http://www.google.com/design/spec/what-is-material/elevation-shadows.html#elevation-shadows-elevation-android- -->

    <LinearLayout
        android:id="@+id/buttons_linear_layout"
        android:layout_width="match_parent"
        android:layout_height="?attr/actionBarSize"
        android:orientation="horizontal">
        <include layout="@layout/toolbar_discard_button" />
        <View
            android:layout_width="1px"
            android:layout_height="match_parent"
            android:layout_marginTop="12dp"
            android:layout_marginBottom="12dp"
            android:BACkground="?attr/toolbarCustomViewDividerColor" />
        <include layout="@layout/toolbar_save_button" />
    </LinearLayout>

</android.support.v7.widget.Toolbar>

toolbar_save_button.xml

<FrameLayout xmlns:android="http://scheR_958_11845@as.android.com/apk/res/android"
    style="?attr/actionButtonStyle"
    android:id="@+id/toolbar_save"
    android:layout_width="0dp"
    android:layout_height="match_parent"
    android:layout_weight="1">

    <TextView style="?attr/actionBarTabTextStyle"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center"
        android:paddingRight="20dp"
        android:drawableLeft="?attr/toolbarDoneIcon"
        android:drawablePadding="8dp"
        android:gravity="center_vertical"
        android:text="@String/save" />
</FrameLayout>

@L_874_8@

我喜欢在整个矩形SAVE按钮上绘制叠加层.

我想我最有可能通过避免使用style =“?attr / actionButtonStyle”并提供我自己定义的选择器来解决这个问题.

但是,我不想这样做.我更喜欢使用系统提供的样式,以减少维护头痛.

如何使style =“?attr / actionButtonStyle”适用于矩形工具栏按钮?

或者,是否有任何其他系统样式属性,这将适用于矩形工具栏按钮?同时,有涟漪效应.

解决方法

这里的属性是:actionButtonStyle,你在包装FrameLayout上设置.在第23节,它指向:

<style name="Widget.Material.ActionButton">
    <item name="BACkground">?attr/actionBarItemBACkground</item>
    <item name="paddingStart">12dp</item>
    <item name="paddingend">12dp</item>
    <item name="minWidth">@dimen/action_button_min_width_material</item>
    <item name="minHeight">@dimen/action_button_min_height_material</item>
    <item name="gravity">center</item>
    <item name="scaleType">center</item>
    <item name="maxLines">2</item>
</style>

后台设置为actionBarItemBACkground,后者又指向此RippleDrawable:

<ripple xmlns:android="http://scheR_958_11845@as.android.com/apk/res/android"
    android:color="?attr/colorControlHighlight"
    android:radius="20dp" />

半径值是您不想要的.

解决此问题,请在应用主题下覆盖actionBarItemBACkground:

<style name="AppTheme" parent="....">
    ....
    <item name="actionBarItemBACkground">@drawable/custom_action_bar_item_bg</item>
    <item name="android:actionBarItemBACkground">@drawable/custom_action_bar_item_bg</item>
</style>

drawable custom_action_bar_item_bg将定义为:

RES /抽拉/ custom_action_bar_item_bg.xml

<?xml version="1.0" encoding="utf-8"?>
<SELEctor xmlns:android="http://scheR_958_11845@as.android.com/apk/res/android">
    <item android:state_pressed="true">
        <color android:color="#...."/>
    </item>
    <item>
        <color android:color="@android:color/transparent"/>
    </item>
</SELEctor>

RES /抽拉-V21 / custom_action_bar_item_bg.xml

<ripple xmlns:android="http://scheR_958_11845@as.android.com/apk/res/android"
android:color="?attr/colorControlHighlight">
    <item android:id="@id/mask">
        <color android:color="@android:color/white" />
    </item>
</ripple>

在API版本>的情况下,掩码将为您提供矩形. 21.

缺点:使用actionBarItemBACkground的所有项目都将受到影响(除非这没关系).要解决此问题,您可以在FrameLayout包装器上创建单独的主题.例如,这是您的应用程序的主题

<style name="AppTheme" parent="....">
    ....
    ....
</style>

创建从AppTheme继承的另一个主题

<style name="SELEctiveActionBarButtonTheme" parent="AppTheme">
    <item name="actionBarItemBACkground">@drawable/custom_action_bar_item_bg</item>
    <item name="android:actionBarItemBACkground">@drawable/custom_action_bar_item_bg</item>
</style>

要使用它,请在包装器FrameLayout上覆盖android:theme:

<FrameLayout xmlns:android="http://scheR_958_11845@as.android.com/apk/res/android"
    style="?attr/actionButtonStyle"
    android:id="@+id/toolbar_save"
    android:layout_width="0dp"
    android:layout_height="match_parent"
    android:layout_weight="1"
    android:theme="@style/SELEctiveActionBarButtonTheme">

    ....
    ....
</FrameLayout>

当然,最简单的方法是将FrameLayout的android:BACkground设置为?attr / SELEctableItemBACkground,并完成它.

大佬总结

以上是大佬教程为你收集整理的android – 如何使style =“?attr / actionButtonStyle”适用于矩形工具栏按钮全部内容,希望文章能够帮你解决android – 如何使style =“?attr / actionButtonStyle”适用于矩形工具栏按钮所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。