android - 自定义 Alertdialog 宽度大于布局 xml 中显示的宽度

标签 android android-layout android-alertdialog android-dialog

我正在尝试创建自定义警报对话框。这是我的警报对话框自定义布局 xml

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">

<LinearLayout
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_centerHorizontal="true"
    android:layout_centerVertical="true"
    android:gravity="center"
    android:orientation="horizontal">

    <ProgressBar
        android:id="@+id/progressBar"
        style="?android:attr/progressBarStyle"
        android:layout_width="wrap_content"
        android:layout_height="match_parent" />

    <TextView
        android:id="@+id/textView"
        android:layout_width="wrap_content"
        android:layout_height="match_parent"
        android:gravity="center"
        android:text="Processing" />
</LinearLayout>
</RelativeLayout>

以及我调用自定义警报对话框的 Activity 代码

   LayoutInflater inflater = MainActivity.this.getLayoutInflater();
   View dialogView = inflater.inflate(R.layout.layoutalertprogress, null);
   AlertDialog.Builder alertDialogBuilder = new AlertDialog.Builder(MainActivity.this);
   alertDialogBuilder.setView(dialogView);
   alertDialog = alertDialogBuilder.create();
    if(!alertDialog.isShowing())
      {
           alertDialog.show();
      }

问题甚至在布局文件中 linearlayout 宽度也像这样包装到它的内容中 layout demo

alertdialog 的真实宽度在运行时看起来是这样的 enter image description here 所以 alertdialog 的实际宽度更宽(比上面显示的布局更宽)。 似乎 linearlayout 宽度没有包装到它的内容中,所以从它的边缘到它的子元素有很大的未使用空间。如何使此线性布局宽度包裹其内容,以便可以删除其边缘未使用的空间?谢谢

最佳答案

试试这个

设置子LinearLayout的背景色

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:orientation="vertical">

    <LinearLayout
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_centerHorizontal="true"
        android:layout_centerVertical="true"
        android:gravity="center"
        android:background="@android:color/white"
        android:orientation="horizontal">

        <ProgressBar
            android:id="@+id/progressBar"
            style="?android:attr/progressBarStyle"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content" />

        <TextView
            android:id="@+id/textView"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:gravity="center"
            android:text="Processing" />
    </LinearLayout>
</RelativeLayout>

然后在你的java代码中加入这一行

 alertDialog.getWindow().setBackgroundDrawable(new ColorDrawable(android.graphics.Color.TRANSPARENT));

在此之后

AlertDialog alertDialog = alertDialogBuilder.create();

关于android - 自定义 Alertdialog 宽度大于布局 xml 中显示的宽度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53114542/

相关文章:

android - 以编程方式使用 setTextSize 到 ?attr/textAppearanceLarge

android - 获取Textview中一行可以有多少个字符

android - 如何在 android 中以编程方式与 USSD 对话框交互

java - 安卓图片互相影响

android - 如何在 android 中使用 webview 显示的 html 文件中拖动图像?

android - 在 ConstraintLayout 上对齐按钮

Android - 以编程方式删除布局

java - 使用 ButterKnife 处理自定义 AlertDialog 时出现异常

android - AlertDialog 列表中的自定义对象;如何获取显示字符串然后获取实际值?

java - Android-按钮滑动效果