为了账号安全,请及时绑定邮箱和手机立即绑定

向警报对话框添加圆角

向警报对话框添加圆角

www说 2023-05-10 17:35:11
我正在尝试向 中添加圆角AlertDialog,但我不明白形状文件的逻辑(不起作用)。我将它用作 的背景RelativeLayout,AlertDialog但它似乎被忽略了。这是形状文件:<?xml version="1.0" encoding="utf-8"?><shape xmlns:android="http://schemas.android.com/apk/res/android"    android:shape="rectangle">    <solid android:color="@android:color/transparent"/>    <corners android:radius="10dp" />    <padding android:left="10dp" android:right="10dp"/></shape>这是警报对话框 xml:<RelativeLayout    xmlns:android="http://schemas.android.com/apk/res/android"    xmlns:tools="http://schemas.android.com/tools"    android:id="@+id/dialog_rl"    android:layout_width="match_parent"    android:layout_height="match_parent"    android:padding="10dp"    tools:context=".UserList"    android:background="@drawable/shape_dialog">    <TextView        android:id="@+id/dialog_titile"        android:layout_width="match_parent"        android:layout_height="wrap_content"        android:text="Scegli un'operazione"        android:textAlignment="center"        android:padding="5dp"        android:textColor="@android:color/black"        android:background="#D3D3D3"        android:textSize="26dp" />    <TextView        android:id="@+id/dialog_tv"        android:layout_width="wrap_content"        android:layout_height="wrap_content"        android:text="Vuoi aprire o eliminare il test?"        android:textAlignment="center"        android:padding="15dp"        android:textSize="26dp"        android:layout_marginLeft="80dp"        android:background="@android:color/white"        android:textColor="@android:color/black"        android:layout_below="@id/dialog_titile" />    <Button        android:id="@+id/dialog_neutral_btn"        android:layout_width="80dp"        android:layout_height="wrap_content"        android:text="Indietro"        android:layout_below="@id/dialog_tv"        android:textColor="@android:color/black"        android:background="@drawable/button_bg_3" />这就是结果 我错过了什么?
查看完整描述

5 回答

?
慕无忌1623718

TA贡献1744条经验 获得超4个赞

只需使用官方Material Components for Android 库中包含的官方Material AlertDialog。

new MaterialAlertDialogBuilder(context)
            .setTitle("Title")
            .setMessage("Message")
            .setPositiveButton("Ok", null)
            .show();

并使用主题

<item name="materialAlertDialogTheme">@style/ThemeOverlay.MaterialComponents.MaterialAlertDialog</item>

它遵循以下准则:

//img3.sycdn.imooc.com/645b65a40001621806530336.jpg

您可以使用属性自定义组件的形状shapeAppearanceOverlay

就像是:

<!-- Alert Dialog -->

  <style name="MyThemeOverlayAlertDialog" parent="@style/ThemeOverlay.MaterialComponents.MaterialAlertDialog">

    <item name="shapeAppearanceOverlay">@style/ShapeAppearanceOverlay.MyApp.Dialog.Rounded</item>

  </style>


  <style name="ShapeAppearanceOverlay.MyApp.Dialog.Rounded" parent="">

    <item name="cornerFamily">rounded</item>

    <item name="cornerSize">8dp</item>

  </style>


查看完整回答
反对 回复 2023-05-10
?
陪伴而非守候

TA贡献1757条经验 获得超8个赞

我已经检查了你的形状,它在我的手机上看起来不错,我有这个形状以同样的方式工作 + 有渐变:

<shape xmlns:android="http://schemas.android.com/apk/res/android"android:shape="rectangle">
<gradient
    android:angle="-90"
    android:centerColor="#F2F2F2"
    android:endColor="#ADA996"
    android:startColor="#DBDBDB" />
<stroke
    android:width="2dp"
    android:color="#000000" />
<corners android:radius="8dp" />

<padding
    android:bottom="4dp"
    android:left="4dp"
    android:right="4dp"
    android:top="4dp" />
</shape>
  • 尝试使用上面的形状,如果它无论如何都不起作用,请尝试在单个按钮上使用您的形状 - 如果您看到您的形状正常工作,您就会知道您的问题来自您的布局文件。

  • 也许您需要做的就是Invalidate Caches/Restart,您可能没有错误,但您的应用程序正在使用来自缓存的旧形状


查看完整回答
反对 回复 2023-05-10
?
SMILET

TA贡献1796条经验 获得超4个赞

您可以通过执行以下步骤来实现。


您必须为 Textview 和主布局创建两个可绘制形状的 xml


1. border_no_white_bg.xml


<?xml version="1.0" encoding="utf-8"?>

<shape xmlns:android="http://schemas.android.com/apk/res/android">

<solid android:color="@color/white" />

<stroke

    android:width="1dp"

    android:color="@color/white" />


  <corners android:radius="6dp" />

</shape>




2. shape_button_orange_bg_with_radius.xml


<?xml version="1.0" encoding="utf-8"?>

 <shape xmlns:android="http://schemas.android.com/apk/res/android">


<stroke

    android:width="1dp"

    android:color="@color/black" />

  <corners android:radius="15dp" />

</shape>


3. Now in main_popup.xml, replace by below code

<?xml version="1.0" encoding="utf-8"?>

<LinearLayout

    android:layout_width="match_parent"

    android:layout_height="wrap_content"

    android:layout_centerInParent="true"

    android:layout_margin="15dp"

    android:background="@drawable/border_no_white_bg"

    android:orientation="vertical">



    <TextView

        android:layout_width="match_parent"

        android:layout_height="wrap_content"

        android:layout_gravity="center_horizontal"

        android:layout_margin="10dp"

        android:background="#CCCCCC"

        android:baselineAligned="false"

        android:gravity="center"

        android:padding="10dp"

        android:text="Scegli un'operazione"

        android:textColor="#000"

        android:textSize="18sp" />


    <TextView

        android:layout_width="match_parent"

        android:layout_height="wrap_content"

        android:layout_gravity="center_horizontal"

        android:layout_margin="10dp"

        android:baselineAligned="false"

        android:gravity="center"

        android:padding="10dp"

        android:text="Vuoi aprire o eliminare il test?"

        android:textColor="#000"

        android:textSize="18sp" />



    <RelativeLayout

        android:layout_width="wrap_content"

        android:layout_height="wrap_content"

        android:layout_marginBottom="15dp"

        android:orientation="horizontal">



        <Button

            android:layout_width="wrap_content"

            android:layout_height="40dp"

            android:layout_marginLeft="15dp"

            android:layout_marginRight="15dp"

            android:background="@drawable/shape_button_orange_bg_with_radius"

            android:text="Indietro"

            android:textColor="#000"

            android:textSize="14sp" />



        <LinearLayout

            android:layout_width="wrap_content"

            android:layout_height="wrap_content"

            android:layout_alignParentRight="true"

            android:orientation="horizontal">


            <Button

                android:layout_width="wrap_content"

                android:layout_height="40dp"

                android:layout_marginLeft="5dp"

                android:layout_marginRight="5dp"

                android:background="@drawable/shape_button_orange_bg_with_radius"

                android:text="Apri"

                android:textColor="#000"

                android:textSize="14sp" />


            <Button

                android:layout_width="wrap_content"

                android:layout_height="40dp"

                android:layout_marginLeft="5dp"

                android:layout_marginRight="15dp"

                android:background="@drawable/shape_button_orange_bg_with_radius"

                android:text="Elimina"

                android:textColor="#000"

                android:textSize="14sp" />

        </LinearLayout>


    </RelativeLayout>



     </LinearLayout>


 </RelativeLayout>



4. popup_window_animation

   Inside res->values->style.xml, add this code




<style name="popup_window_animation">

    <item name="android:windowEnterAnimation">@anim/fade_in</item>

    <item name="android:windowExitAnimation">@anim/fade_out</item>

</style>

现在创建一个方法来调用这个布局


public void showPopup(View anchorView) {


    final View popupView = getLayoutInflater().inflate(R.layout.main_popup, null);


    RelativeLayout layout_close;

    // Declare your views here


    final PopupWindow popupWindow = new PopupWindow(popupView, ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT);

    popupWindow.setAnimationStyle(R.style.popup_window_animation);


    layout_feedback_close = (RelativeLayout) popupView.findViewById(R.id.layout_feedback_close);

    // Here find view by ids


    layout_feedback_close.setOnClickListener(new View.OnClickListener() {

        @Override

        public void onClick(View v) {


        }

    });


    popupWindow.setFocusable(true);

    popupWindow.setBackgroundDrawable(new ColorDrawable());

    int location[] = new int[2];

    anchorView.getLocationOnScreen(location);

    popupWindow.showAtLocation(anchorView, Gravity.CENTER, location[0], location[1] + anchorView.getHeight());

     }


查看完整回答
反对 回复 2023-05-10
?
繁花不似锦

TA贡献1851条经验 获得超4个赞

你的 shape_dialog.xml 应该是这样的


<?xml version="1.0" encoding="utf-8"?>

 <shape xmlns:android="http://schemas.android.com/apk/res/android">

   <solid

     android:color="@color/white"/>

   <corners

      android:radius="30dp" />

   <padding

    android:left="10dp"

    android:top="10dp"

    android:right="10dp"

    android:bottom="10dp" />

</shape>

您需要将对话框的背景设置为透明状。


dialog.getWindow().setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT));


查看完整回答
反对 回复 2023-05-10
?
子衿沉夜

TA贡献1828条经验 获得超3个赞

使用DialogClass 而不是AlertDialogBuilder.


代码片段


showDialog()使用 Dialog 类而不是定义此方法AlertBuilder


public void showDialog() {


    final Dialog dialog = new Dialog(this);

    dialog.setContentView(R.layout.your_xml);


    Button dialog_neutral_btn = dialog.findViewById(R.id.dialog_neutral_btn);

    Button dialog_positive_btn = dialog.findViewById(R.id.dialog_positive_btn);

    Button dialog_negative_btn=dialog.findViewById(R.id.dialog_negative_btn);

    TextView dialog_titile = dialog.findViewById(R.id.dialog_titile);

    TextView dialog_tv = dialog.findViewById(R.id.dialog_tv);



   // do you stuff here , define click listeners


    dialog.show();

}

用法


 yourButton.setOnClickListener(new View.OnClickListener() {

        @Override

        public void onClick(View v) {

           showDialog();

        }

    });

笔记:-


android.support.v7.app.AlertDialog

代替


android.app.AlertDialog

如果您想使用 AlertDialogBuilder


查看完整回答
反对 回复 2023-05-10
  • 5 回答
  • 0 关注
  • 182 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信