Почему андроид настраивается в полноэкранном режиме

Я пытаюсь создать собственный диалог

Базовый макет (я также пробовал различные измененные макеты)

<RelativeLayout android:layout_width="match_parent" android:layout_height="wrap_content" > <TextView android:id="@+id/title" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentLeft="true" android:layout_alignParentRight="true" android:layout_alignParentTop="true" android:background="@color/dialogHeaderBackground" android:gravity="center" android:minHeight="@dimen/minHeightDialogTitle" android:text="" android:textStyle="bold" /> <TextView android:id="@+id/message" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentLeft="true" android:layout_below="@+id/title" android:layout_marginTop="5dp" android:text="" /> <LinearLayout android:id="@+id/loutButton" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_alignParentBottom="true" android:layout_below="@+id/message" android:layout_centerHorizontal="true" android:layout_marginTop="5dp" android:orientation="horizontal" > <Button android:id="@+id/btnNeutral" android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight="1" android:text="" /> <Button android:id="@+id/btnNegative" android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight="1" android:text="" /> <Button android:id="@+id/btnPositive" android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight="1" android:text="" /> </LinearLayout> </RelativeLayout> 

Код Java

  Dialog dialog = new Dialog(this); // Dialog dialog = new Dialog(this,R.style.Theme_Dialog); dialog.requestWindowFeature(Window.FEATURE_NO_TITLE); dialog.setContentView(R.layout.custom_dialog); Button btnPositive=(Button) dialog.findViewById(R.id.btnPositive); Button btnNegative=(Button) dialog.findViewById(R.id.btnNegative); Button btnNeutral=(Button) dialog.findViewById(R.id.btnNeutral); TextView txvTitle=(TextView)dialog.findViewById(R.id.title); TextView txvMessage=(TextView)dialog.findViewById(R.id.message); ... so on and so forth 

Я получаю следующий диалог, который является полноэкранным, WHICH I NOT HANT

Полноэкранный диалог

Решения уже пробовали, которые дают те же результаты, что и выше.

  1. Конфигурация Styles.xml 1 | Реализованный код Pastebin
  2. Конфигурация Styles.xml 2 | Реализованный код Pastebin
  3. Пример, приведенный в Android Dev Guide, используя AlertDialog.Builder | Реализованный код Java
  4. Ни один из моих базовых макетов не использует MATCH_PARENT по высоте. Как сказано в этом ответе переполнения стека
  5. Также попробуйте изменить настройки окна на WRAP_CONTENT для диалога, основанного на ответе здесь | Реализованный Java-код в Пастбине
  6. Также попытались сохранить весь RelativeLayout внутри родительского LinearLayout , см. Третий комментарий в следующем ответе

Единственный раз, когда я могу получить приличный диалог, – это указать высоту для макета xml, например android:layout_height="150dp"

  <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="150dp" > 

Диалог при заданной высоте,

  1. Содержимое / макет отсутствует, когда сообщение больше Больше текста в диалоговом сообщении
  2. Когда сообщение меньше, диалог отображается больше, чем требуется, см. Ниже кнопку ОК Меньше текста - диалоговое сообщение

Не предлагайте выше (указать фиксированную высоту) как решение, так как оно неэффективно и не выглядит таким хорошим, а также не динамическим, его статическим

Вопрос

Что делать, укажите, подходящий настраиваемый диалог, который настраивается тоже?

Я готов дать награду в знак признательности, если вы можете помочь мне решить эту проблему

РЕДАКТИРОВАТЬ: Предоставить щедрость для исправления решения.

Удалить android:layout_alignParentBottom="true" из линейного макета

 <LinearLayout android:id="@+id/loutButton" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_alignParentBottom="true" android:layout_below="@+id/message" android:layout_centerHorizontal="true" android:layout_marginTop="5dp" android:orientation="horizontal" > 

Удалить android:layout_alignParentBottom="true" из кода выше и проверить.

Я, это происходит с релятивизмом. В своих документах google четко упоминаются.

Обратите внимание, что вы не можете иметь круговую зависимость между размером RelativeLayout и положением своих детей. Например, у вас не может быть RelativeLayout, высота которого установлена ​​в WRAP_CONTENT, а дочерний элемент – ALIGN_PARENT_BOTTOM

Когда вы работаете с диалоговым окном, вы должны использовать linearlayout согласно вашему требованию. Это будет вызывающе работать для вас.

Дальнейшие идеи могут быть неприменимы для вас, но я просто упомянул об этом для справки

Вы можете использовать java-код для создания диалогового окна размера исправления, или вы можете установить разметку макета из параметров макета, чтобы вы могли поддерживать отзывчивость в разных размерах экрана. Вы также можете сделать одно, получить размер экрана

 DisplayMetrics metrics = new DisplayMetrics(); getWindowManager().getDefaultDisplay().getMetrics(metrics); int height = metrics.heightPixels; int width = metrics.widthPixels; 

Чем вы можете рассчитать свой новый размер диалога и установить его как ответ @ guobao

 DisplayMetrics displayMetrics = new DisplayMetrics(); dialog.getWindow().getWindowManager().getDefaultDisplay().getMetrics(displayMetrics); WindowManager.LayoutParams params = dialog.getWindow().getAttributes(); params.width = (new width); params.height = (new height); 

Спросите меня, нужна ли какая-либо дополнительная спецификация.

Вы можете установить этот код в своем диалоговом окне

 DisplayMetrics displayMetrics = new DisplayMetrics(); dialog.getWindow().getWindowManager().getDefaultDisplay().getMetrics(displayMetrics); WindowManager.LayoutParams params = dialog.getWindow().getAttributes(); params.width = (the width you want to set); params.height = (the height you want to set); 

Это был мой подход, когда я столкнулся с той же проблемой.

Я расширил DialogFragment (из support.v4 lib)

А потом раздуть:

 @Override public Dialog onCreateDialog(Bundle savedInstanceState) { AlertDialog.Builder builder = new AlertDialog.Builder(getActivity()); LayoutInflater inflater = getActivity().getLayoutInflater(); final View view = inflater.inflate(R.layout.dialog_whatever, null); builder.setView(view); return builder.create(); } 

Это макет:

 <?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" android:background="@drawable/rounded_corners" android:padding="20dp"> <TextView android:id="@+id/confirm_dialog_text" android:layout_width="wrap_content" android:layout_height="wrap_content" android:textSize="16sp" android:textColor="@color/black" android:text="@string/are_you_sure_declining_whatever"/> <LinearLayout android:layout_marginTop="20dp" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="right|bottom" android:orientation="horizontal"> <Button android:id="@+id/cancel_action" android:layout_marginRight="10dp" android:layout_width="fill_parent" android:layout_height="wrap_content" android:background="@color/transparent" android:text="@string/cancel" android:textColor="@color/accent_color"/> <Button android:id="@+id/confirm_action" android:layout_width="fill_parent" android:layout_height="wrap_content" android:background="@color/transparent" android:textColor="@color/accent_color" android:text="@string/reject"/> </LinearLayout> </LinearLayout> 

Этот подход также следует принципам проектирования материалов!

Надеюсь, это поможет вам

С наилучшими пожеланиями,

pedrovic90