如何为alertdialog换行内容进行自定义布局

时间:2017-04-25 04:31:36

标签: android

我创建了一个自定义布局,其中包含3个用于alertdialog的按钮,工作正常。我正在尝试进行布局,以便宽度和高度布局仅包装其内容,即没有额外的宽度/高度,但我无法这样做。你可以帮帮我吗?

这是我对alertdialog的自定义布局:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="horizontal"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_gravity="center"
    android:background="#00ffffff"

    >

    <LinearLayout
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:orientation="horizontal"
        android:background="@drawable/rectangle_menu"
        >

    <ImageButton
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:id="@+id/wowButtonId"
            android:layout_marginLeft="5dp"
            android:src="@drawable/love_icon"
            android:background="@drawable/round_button_for_round_menu_like_button"
        android:layout_gravity="center"
        />

  <ImageButton
        android:layout_width="40dp"
        android:layout_height="35dp"
        android:id="@+id/blehButtonId"
        android:layout_marginLeft="5dp"
        android:src="@drawable/bleh"
        android:background="@drawable/round_button_for_round_menu_like_button"
      android:layout_gravity="center"
      />

    <ImageButton
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:id="@+id/dislikeButtonId"
        android:layout_marginLeft="5dp"
        android:src="@drawable/dislike_icon"
        android:background="@drawable/round_button_for_round_menu_like_button"
        android:layout_gravity="center"
        />
    </LinearLayout>
</LinearLayout>
适配器代码中的

alertDialog实现:

AlertDialog.Builder builder=new AlertDialog.Builder(context);
                AlertDialog alertDialog=builder.create();
View view1=LayoutInflater.from(context).inflate(R.layout.layout_for_long_like_button_option,null);

                ImageButton wow=(ImageButton) view1.findViewById(R.id.wowButtonId);
                ImageButton disLike=(ImageButton) view1.findViewById(R.id.dislikeButtonId);
                ImageButton bleh=(ImageButton) view1.findViewById(R.id.blehButtonId);

                wow.setOnClickListener(new View.OnClickListener() {
                    @Override
                    public void onClick(View view) {
                        Toast.makeText(context,"wow",Toast.LENGTH_SHORT).show();
                    }
                });

                disLike.setOnClickListener(new View.OnClickListener() {
                    @Override
                    public void onClick(View view) {
                        Toast.makeText(context,"dislike",Toast.LENGTH_SHORT).show();
                    }
                });

                bleh.setOnClickListener(new View.OnClickListener() {
                    @Override
                    public void onClick(View view) {
                        Toast.makeText(context,"bleh",Toast.LENGTH_SHORT).show();
                    }
                });

                alertDialog.setView(view1);

                alertDialog.show();

4 个答案:

答案 0 :(得分:1)

在您的类文件中尝试此操作,在此文件中为警报对话框充气...

WindowManager.LayoutParams lp = new WindowManager.LayoutParams();
            Window window = alertDialog.getWindow();
            lp.copyFrom(window.getAttributes());
//This makes the dialog take up the full width
            lp.width = WindowManager.LayoutParams.WRAP_CONTENT;
            lp.height = WindowManager.LayoutParams.WRAP_CONTENT;
            window.setAttributes(lp);

答案 1 :(得分:0)

您可以使用以下代码设置布局和显示对话框

  public void showDialog() {

    LayoutInflater li = LayoutInflater.from(MainActivity.this);
    View promptsView = li.inflate(R.layout.layout_for_long_like_button_option, null);

    final TextView txtOk = (TextView) promptsView.findViewById(R.id.txtOk);
    final TextView txtCancel = (TextView) promptsView.findViewById(R.id.txtCancel);


    AlertDialog.Builder alertDialogBuilder = new AlertDialog.Builder(BaseActivity.this);
    alertDialogBuilder.setView(promptsView);

    final AlertDialog alertDialog = alertDialogBuilder.create();
    alertDialog.getWindow().setBackgroundDrawable(new ColorDrawable(android.graphics.Color.TRANSPARENT));


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

            alertDialog.dismiss();

        }
    });


    txtCancel.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            alertDialog.dismiss();
        }
    });


    alertDialog.show();
}

答案 2 :(得分:0)

摘要:在自定义布局的根目录中使用 RelativeLayout 标记

我在写的应用程序中有两个警告对话框。其中一个没有包装内容,而另一个没有。在其根部具有LinearLayout标签的那个,其高度扩展比其内容实际占用的空间更大。 我尝试在LinearLayout上将width和height属性设置为 wrap_content ,但无济于事。

具有RelativeLayout的那个紧紧包裹其内容。实现此目的的代码结构如下所示:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent">
    <LinearLayout
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    >
    <!-- More widgets -->
    </LinearLayout>
</RelativeLayout>

虽然必须小心,但内部LinearLayout仍应指定 wrap_content 。你当然可以指定 match_parent ,如果你打算提出一个细长的对话框,这样做的意图,我会留给开发人员。

Android Studio仍然警告我 LinearLayout布局或其RelativeLayout父级无用。我不认为这是解决问题的方法,而只是解决问题。而且,我应该提一下,我一直有使用Android的这些布局问题。我觉得这是一种更加理智的方法,因为它可以将代码修改保持在布局之下。

答案 3 :(得分:0)

您可以尝试在显示对话框并因此有一个窗口时直接设置展开视图的宽度

self.assertEquals(test_foo.prepared, True)
AssertionError: False !=  True