在styles.xml中将对话框按钮更改为具有波纹效果的清除

时间:2019-05-02 17:44:00

标签: android android-layout android-alertdialog android-styles

我有一个带有两个按钮的简单对话框,正向和负向采用我在styles.xml中定义的简单样式布局。我希望取消按钮具有清晰的背景,但在触摸它时仍然有用户反馈(例如红色的波纹效果)。我已经尝试了2天了,没有运气。任何输入都会很棒。

使用波纹效果:

enter image description here

我的下一个布局代码使该布局具有清晰的取消背景,但没有波纹效果。但是我确实对“是”产生了连锁反应:

 <style name="AlertDialogThemeTesting" parent="Theme.AppCompat.Dialog.Alert">
    <item name="colorControlHighlight">@color/Red</item>
    <item name="colorControlActivated">@color/Red</item>
    <item name="colorControlNormal">@color/Red</item>
    <item name="android:textColor">@color/Black</item>
    <item name="android:textColorPrimary">@color/Gray</item>
    <item name="android:buttonBarNegativeButtonStyle">@style/NegativeButtonStyle</item>
    <item name="android:buttonBarPositiveButtonStyle">@style/PositiveButtonStyle</item>
</style>

<style name="NegativeButtonStyle" parent="Widget.AppCompat.Button.ButtonBar.AlertDialog">
    <item name="android:textColor">@color/Black</item>
    <item name="android:background">?attr/selectableItemBackgroundBorderless</item>
    <item name="backgroundTint">@color/Clear</item>
</style>

<style name="PositiveButtonStyle" parent="Widget.AppCompat.Button.ButtonBar.AlertDialog">
    <item name="android:textColor">@color/Black</item>
    <item name="android:background">?attr/selectableItemBackgroundBorderless</item>
    <item name="android:backgroundTint">@color/Gold</item>
</style>

背景清晰但没有涟漪效应:

enter image description here

添加透明/白色背景似乎可以消除波纹效果,这是出于某种原因。

对话框代码:

final AlertDialog.Builder alert = new AlertDialog.Builder(PopOut.this,
        R.style.AlertDialogTheme);
alert   .setTitle("Delete Profile?")
        .setMessage("Are you sure you want to delete" + profile)
        .setPositiveButton("OK",
                new DialogInterface.OnClickListener()
                {
                    public void onClick(DialogInterface dialog,
                                        int whichButton)
                    {
                        finish();
                        dialog.dismiss();
                    }
                })
        .setNegativeButton("Cancel", null);

final AlertDialog dialog = alert.create();
dialog.show();

1 个答案:

答案 0 :(得分:1)

定义您的按钮,如下所示,

<LinearLayout

    android:id="@+id/test_btn"
    android:layout_width="match_parent"
    android:layout_height="50dp"
    android:layout_marginTop="68dp"
    android:background="@drawable/button_effect"
    app:layout_constraintTop_toTopOf="parent"
    tools:layout_editor_absoluteX="0dp">

    <TextView
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_gravity="center"
        android:fontFamily="@font/titilliumweb_bold"
        android:gravity="center"
        android:text="Test Button"
        android:textColor="@color/UcabWhite" />

</LinearLayout>
在如下所示的可绘制类中

创建 button_effect.xml

   <ripple xmlns:android="http://schemas.android.com/apk/res/android"
     android:color="@color/colorPrimary"     //colour you want the effect
     android:exitFadeDuration="@android:integer/config_shortAnimTime">
       <selector>
          <item>
             <color android:color="@android:color/transparent" />
          </item>
      </selector>
   </ripple>

同时在活动对话框中为按钮定义 setOnClickListner

test.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {

        }
    });

我已经对此进行了测试,它就像一种魅力。尝试一下,让我知道您是否有任何困难。

编辑

如下定义您的警报对话框。长按取消按钮,您会看到波纹效果。但是,当您单击它时,由于没有发出警报,因此没有时间显示效果。

 final AlertDialog.Builder alert = new AlertDialog.Builder(this, R.style.AppTheme);
    alert.setTitle("Delete Profile?")
            .setMessage("Are you sure you want to delete")
            .setPositiveButton("OK",
                    new DialogInterface.OnClickListener() {
                        public void onClick(DialogInterface dialog,
                                            int whichButton) {
                            finish();
                            dialog.dismiss();
                        }
                    })
            .setNegativeButton("Cancel", new DialogInterface.OnClickListener() {
                @Override
                public void onClick(DialogInterface dialog, int which) {

                }
            });

    final AlertDialog dialog = alert.create();
    dialog.show();

    Button negativeButton = dialog.getButton(DialogInterface.BUTTON_NEGATIVE);
    negativeButton.setBackgroundResource(R.drawable.button_mini_oval);

会有所帮助。