Как удалить лишнее пространство из пользовательского AlertDialog

#android #android-alertdialog

#Android #android-alertdialog

Вопрос:

Я пытаюсь создать пользовательский AlertDialog. Проблема заключается в дополнительном пространстве в диалоговом окне (белый прямоугольник на рисунке). Как это удалить?

диалоговое окно вот мой код :

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

    <LinearLayout
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:orientation="horizontal"
        android:padding="10dp"
        android:background="@drawable/round_alert_like_ui">

         <ImageButton
            android:layout_width="wrap_content"
            android:layout_height="match_parent"
            android:src="@drawable/like_icon"
            android:layout_marginStart="10dp"
            android:layout_gravity="center"
            android:id="@ id/likeIconId"
            android:fitsSystemWindows="true"
            android:padding="5dp" />

         <ImageButton
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:id="@ id/wowButtonId"
                android:layout_marginStart="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_marginStart="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_marginStart="5dp"
            android:src="@drawable/dislike_icon"
            android:background="@drawable/round_button_for_round_menu_like_button"
            android:layout_gravity="center" />
    </LinearLayout>
</LinearLayout>
  

в activity:

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

Ответ №1:

В качестве опции, если вы хотите создать пользовательский диалог, вы можете сделать вот так:

   @Override
  public void onStart() {
    super.onStart();
    Dialog dialog = getDialog();
    if (dialog != null) {
      int width = ViewGroup.LayoutParams.WRAP_CONTENT;
      int height = ViewGroup.LayoutParams.WRAP_CONTENT;
      dialog.getWindow().setLayout(width, height);
    }
  }
  

Комментарии:

1. затем установите фон прозрачным в теме для этого диалогового окна

2. я не использовал theme

Ответ №2:

Попробуйте этот макет и настройте. Нет необходимости во вложенной линейной компоновке. Это вызывает проблемы с производительностью.

 <?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="48dp"
              android:background="@color/colorPrimary"
              android:padding="4dp">

    <ImageButton
            android:id="@ id/likeIconId"
            android:layout_width="wrap_content"
            android:layout_height="match_parent"
            android:adjustViewBounds="true"
            android:background="@android:color/black"
            android:src="@android:drawable/ic_delete"/>

    <Space
            android:layout_width="8dp"
            android:layout_height="0dp"/>

    <ImageButton
            android:id="@ id/wowButtonId"
            android:layout_width="wrap_content"
            android:layout_height="match_parent"
            android:adjustViewBounds="true"
            android:background="@android:color/black"
            android:src="@android:drawable/ic_delete"/>

    <Space
            android:layout_width="8dp"
            android:layout_height="0dp"/>

    <ImageButton
            android:id="@ id/blehButtonId"
            android:layout_width="wrap_content"
            android:layout_height="match_parent"
            android:background="@android:color/black"
            android:adjustViewBounds="true"
            android:src="@android:drawable/ic_delete"/>

    <Space
            android:layout_width="8dp"
            android:layout_height="0dp"/>

    <ImageButton
            android:id="@ id/dislikeButtonId"
            android:layout_width="wrap_content"
            android:layout_height="match_parent"
            android:background="@android:color/black"
            android:adjustViewBounds="true"
            android:src="@android:drawable/ic_delete"/>
</LinearLayout>
  

И в activity или fragment вы можете вызывать следующим образом. Нет необходимости использовать диалоговое окно оповещения.

 private fun showDialog(context: Context){
        val dialog = Dialog(context)
        dialog.setContentView(R.layout.layout_for_long_like_button_option)
        dialog.show()
    }
  

Комментарии:

1. Можете ли вы опубликовать снимок экрана с этим кодом? Потому что это работает у меня.

2. пожалуйста, проверьте рисунок

3. Вы использовали AlertDialog или обычный диалог?

4. Пожалуйста, попробуйте мою функцию ShowDialog. Не используйте диалоговое окно оповещения.

5. что здесь такое val?

Ответ №3:

Просто обновите layout_width вашего родителя LinearLayout и непосредственного дочернего LinearLayout на match_parent вместо wrap_content . Смотрите код обновления ниже:

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

        <LinearLayout
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:orientation="horizontal"
            android:padding="10dp"
            android:background="@drawable/round_alert_like_ui">

             <ImageButton
                android:layout_width="wrap_content"
                android:layout_height="match_parent"
                android:src="@drawable/like_icon"
                android:layout_marginStart="10dp"
                android:layout_gravity="center"
                android:id="@ id/likeIconId"
                android:fitsSystemWindows="true"
                android:padding="5dp"/>

             <ImageButton
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:id="@ id/wowButtonId"
                    android:layout_marginStart="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_marginStart="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_marginStart="5dp"
                android:src="@drawable/dislike_icon"
                android:background="@drawable/round_button_for_round_menu_like_button"
                android:layout_gravity="center"/>
        </LinearLayout>
    </LinearLayout>
  

Обновить:

Попробуйте установить прозрачный фон для вашего диалогового окна оповещения после того, как вы вызвали alertDialog.show() .

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

Комментарии:

1. я хочу убрать пробел (там будет просто всплывающее окно с иконкой facebook like button), вместо того, чтобы расширять макет до размера alertdialog.

2. @Imranrana07 понял вашу точку зрения, я обновил свой ответ выше, попробуйте, пожалуйста

3. это просто делает фон прозрачным. я пытаюсь создать кнопку «Мне нравится facebook». если вы можете, пожалуйста, помогите мне

4. но ваш вопрос касался удаления этого дополнительного белого фона, пожалуйста, уточните, чего вы хотите, и это единственный способ, которым мы можем вам помочь

5. извините, это простая ошибка, но я сказал вам, что мне нужна кнопка facebook like, которая всплывает чуть выше кнопки.

Ответ №4:

спасибо вам, ребята, за ваше любезное сотрудничество. я решил свою проблему самостоятельно. я просто добавил макет в нужную мне позицию и решил все. еще раз спасибо