Intereting Posts
Как импортировать несколько файлов .vcf программно в android? Метод getSupportFragmentManager () не определен В Android, можно ли перехватить ключевые события во всем мире, прежде чем они достигнут вид ребенка, который имеет фокус? Настройка турецкого и английского языков: перевод турецких символов на латинские эквиваленты Отрегулируйте громкость записи микрофона Ошибка: атрибут «цвет» уже определен, обновить appcompat v-7 Как обнаружить событие TOUCH другим пальцем, когда ACTION_MOVE находится в процессе Что такое повышение в Android L? Как использовать токен доступа Facebook в веб-обозревателе Android FFMpeg на Android, неопределенные ссылки на функции libavcodec, хотя он указан в командной строке Дважды нажмите кнопку «Назад», чтобы выйти из операции Как переместить кеш webView в SD? Как остановить ВНУТРЕННУЮ прокрутку WebView в Android? Проблема совместимости с датой DatePicker для Android с библиотекой MonkeyTalk Смартфон акселерометр жесты algorightms

Как указать правильный размер диалогового окна в файле макета XML для диалогового окна Android?

Я создал диалоговое окно Android с использованием файла макета XML, например:

final Dialog dialog = new Dialog(this); dialog.setContentView(R.layout.enabledialog); dialog.setTitle("Define message keys and setup"); Switch locationSwitch = (Switch) dialog.findViewById(R.id.locationSwitch); Switch blareSwitch = (Switch) dialog.findViewById(R.id.blareSwitch); final EditText locationEdit = (EditText) dialog.findViewById(R.id.locationEdit); final EditText blareEdit = (EditText) dialog.findViewById(R.id.blareEdit); WindowManager.LayoutParams lp = new WindowManager.LayoutParams(); lp.copyFrom(dialog.getWindow().getAttributes()); lp.width = WindowManager.LayoutParams.MATCH_PARENT; lp.height = WindowManager.LayoutParams.MATCH_PARENT; dialog.show(); dialog.getWindow().setAttributes(lp); 

Однако содержимое моего XML-файла занимает половину экрана, поэтому, когда я показываю диалог, я показываю дополнительное пространство, которое выглядит не очень красиво:

ЗДЕСЬ – СКАЗКА КАК ДИАЛОГ СМОТРЕТЬ (R.layout.enabledialog):

Введите описание изображения здесь

Как отремонтировать это дополнительное пространство? В андроид-студии редактор макета предполагает, что XML-файл должен отображать весь экран, но на самом деле мне нужно только небольшое всплывающее окно.

Благодаря,

Ruchir


EDIT: Вот мой файл ресурсов макета:

 <?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent" android:background="#1dd1e9"> <Switch android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/locationSwitch" android:layout_marginTop="46dp" android:checked="false" android:layout_alignParentTop="true" android:layout_alignParentLeft="true" android:layout_alignParentStart="true" /> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:textAppearance="?android:attr/textAppearanceLarge" android:text="Blah" android:id="@+id/textView" android:textSize="30sp" android:layout_alignTop="@+id/locationSwitch" android:layout_centerHorizontal="true" /> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:textAppearance="?android:attr/textAppearanceSmall" android:text="Blah Blah Blah" android:id="@+id/textView2" android:gravity="center" android:textSize="20sp" android:layout_below="@+id/locationSwitch" android:layout_centerHorizontal="true" /> <EditText android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/locationEdit" android:layout_below="@+id/textView2" android:layout_alignLeft="@+id/textView" android:layout_alignStart="@+id/textView" android:layout_alignRight="@+id/textView" android:layout_alignEnd="@+id/textView" android:singleLine = "true" android:imeOptions="actionDone" /> <Switch android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/blareSwitch" android:layout_marginTop="40dp" android:checked="false" android:layout_below="@+id/locationEdit" android:layout_alignParentLeft="true" android:layout_alignParentStart="true" /> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:textAppearance="?android:attr/textAppearanceLarge" android:text="Blah" android:id="@+id/textView3" android:textSize="30sp" android:layout_alignBottom="@+id/blareSwitch" android:layout_centerHorizontal="true" /> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:textAppearance="?android:attr/textAppearanceSmall" android:text="Blah Blah Blah" android:id="@+id/textView4" android:textSize="20sp" android:layout_centerVertical="true" android:layout_alignParentLeft="true" android:layout_alignParentStart="true" /> <EditText android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/blareEdit" android:layout_below="@+id/textView4" android:layout_alignLeft="@+id/locationEdit" android:layout_alignStart="@+id/locationEdit" android:layout_alignRight="@+id/locationEdit" android:layout_alignEnd="@+id/locationEdit" android:singleLine = "true" android:imeOptions="actionDone" /> </RelativeLayout> 

Solutions Collecting From Web of "Как указать правильный размер диалогового окна в файле макета XML для диалогового окна Android?"

Попробуйте изменить fill_parent на wrap_content в корневой RelativeLayout , а также MATCH_PARENT на WRAP_CONTENT в вашем Java-коде (или избавитесь от всего setAttributes() ).

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

Тогда это отдельная проблема, которую вам нужно будет исправить. Начните с того, что размер диалогового окна будет примерно таким, каким вы хотите. Затем используйте какой-либо инструмент осмотра (новый в AS 2.2, Hierarchy View, uiautomatorviewer и т. Д.), Чтобы начать выяснять, как исправить макет, чтобы избежать совпадений.

Попробуйте изменить высоту параметров макета yout:

lp.height = WindowManager.LayoutParams.WRAP_CONTENT;

Я обычно устанавливаю LayoutParams программно. Я думаю, вы можете попробовать DialogFragment с ниже кодом в onResume :

 /** * Setup position of dialog */ protected void setupDialogPosition() { // setup the dialog WindowManager.LayoutParams p = getDialog().getWindow().getAttributes(); p.width = ViewGroup.LayoutParams.MATCH_PARENT; py = 0; // change height of dailog if (mHeight == ViewGroup.LayoutParams.MATCH_PARENT) { p.height = mScreenHeight - py; if (isStatusBarVisible()) { p.height -= getStatusBarHeight(); } } else { p.height = ViewGroup.LayoutParams.WRAP_CONTENT; } getDialog().getWindow().setGravity(mGravity); getDialog().getWindow().setAttributes(p); } 

Изменить RelativeLayout на LinearLayout:

 <LinearLayout android:layout_height="match_parent" android:layout_width="wrap_content" </LinearLayout> 

Я нашел хорошую библиотеку для материальных диалогов в github. Попробуйте это. Он будет управлять макетами для вас.

https://github.com/afollestad/material-dialogs

В вашей Relative Layout укажите layout_height и layout_width и не устанавливайте его в fill_parent. Пример:

 <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="250dp" android:layout_height="wrap_content"> <TextView android:id="@+id/customdia_text" android:layout_marginTop="20dp" android:layout_width="wrap_content" android:layout_height="40dp" android:layout_centerHorizontal="true" android:text="hello" /> <Button android:id="@+id/custdia_btn" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Ok" android:layout_marginBottom="30dp" android:layout_marginTop="20dp" android:layout_below="@+id/customdia_text" android:layout_centerHorizontal="true"/> </RelativeLayout> 

Преобразование непосредственно из значения ресурса:

 int width = getResources().getDimensionPixelSize(R.dimen.popup_width); int height = getResources().getDimensionPixelSize(R.dimen.popup_height); getDialog().getWindow().setLayout(width, height); 

Теперь match_parent в вашем макете для диалога:

 android:layout_width="match_parent" android:layout_height="match_parent" android:layout_width="match_parent" android:layout_height="match_parent" 

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

Создайте пользовательский диалог следующим образом

 public class MyDialog extends Dialog { @Override public void onAttachedToWindow() { super.onAttachedToWindow(); WindowManager.LayoutParams lp = new WindowManager.LayoutParams(); lp.width = WindowManager.LayoutParams.MATCH_PARENT; lp.height = WindowManager.LayoutParams.WRAP_CONTENT; getWindow().setAttributes(lp); } public MyDialog(Context context) { super(context); } @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.dialog); } } 

Посмотрите на метод переопределения onAttachedToWindow (), вот твой трюк. Этот метод вызывается перед методом onCreate (). Поэтому вы можете переопределить свойства окна (ширину и высоту) перед созданием диалога.

Вызовите этот диалог из своей деятельности следующим образом

 new MyDialog(ActivityContext).show(); 

Также внести некоторые изменения в файл dialog.xml

 <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="wrap_content" android:gravity="center" android:orientation="vertical"> <Switch android:id="@+id/locationSwitch" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentLeft="true" android:layout_alignParentStart="true" android:layout_alignParentTop="true" android:layout_marginTop="46dp" android:checked="false" /> <TextView android:id="@+id/textView" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignTop="@+id/locationSwitch" android:layout_centerHorizontal="true" android:text="Blah" android:textAppearance="?android:attr/textAppearanceLarge" android:textSize="30sp" /> <TextView android:id="@+id/textView2" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_below="@+id/locationSwitch" android:layout_centerHorizontal="true" android:gravity="center" android:text="Blah Blah Blah" android:textAppearance="?android:attr/textAppearanceSmall" android:textSize="20sp" /> <EditText android:id="@+id/locationEdit" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignEnd="@+id/textView" android:layout_alignLeft="@+id/textView" android:layout_alignRight="@+id/textView" android:layout_alignStart="@+id/textView" android:layout_below="@+id/textView2" android:layout_marginBottom="50dp" android:imeOptions="actionDone" android:singleLine="true" /> </LinearLayout> 

Отредактируйте файл макета, если вы хотите получить дополнительную настройку

Измените размер основного RelativeLayout согласно требованию в XML-файле. Укажите высоту, что вам нужно, например, ниже

 <?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="100dp" android:background="#1dd1e9"> <Switch android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/locationSwitch" android:layout_marginTop="46dp" android:checked="false" android:layout_alignParentTop="true" android:layout_alignParentLeft="true" android:layout_alignParentStart="true" /> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:textAppearance="?android:attr/textAppearanceLarge" android:text="Blah" android:id="@+id/textView" android:textSize="30sp" android:layout_alignTop="@+id/locationSwitch" android:layout_centerHorizontal="true" /> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:textAppearance="?android:attr/textAppearanceSmall" android:text="Blah Blah Blah" android:id="@+id/textView2" android:gravity="center" android:textSize="20sp" android:layout_below="@+id/locationSwitch" android:layout_centerHorizontal="true" /> <EditText android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/locationEdit" android:layout_below="@+id/textView2" android:layout_alignLeft="@+id/textView" android:layout_alignStart="@+id/textView" android:layout_alignRight="@+id/textView" android:layout_alignEnd="@+id/textView" android:singleLine = "true" android:imeOptions="actionDone" /> <Switch android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/blareSwitch" android:layout_marginTop="40dp" android:checked="false" android:layout_below="@+id/locationEdit" android:layout_alignParentLeft="true" android:layout_alignParentStart="true" /> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:textAppearance="?android:attr/textAppearanceLarge" android:text="Blah" android:id="@+id/textView3" android:textSize="30sp" android:layout_alignBottom="@+id/blareSwitch" android:layout_centerHorizontal="true" /> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:textAppearance="?android:attr/textAppearanceSmall" android:text="Blah Blah Blah" android:id="@+id/textView4" android:textSize="20sp" android:layout_centerVertical="true" android:layout_alignParentLeft="true" android:layout_alignParentStart="true" /> <EditText android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/blareEdit" android:layout_below="@+id/textView4" android:layout_alignLeft="@+id/locationEdit" android:layout_alignStart="@+id/locationEdit" android:layout_alignRight="@+id/locationEdit" android:layout_alignEnd="@+id/locationEdit" android:singleLine = "true" android:imeOptions="actionDone" /> </RelativeLayout> 

Изменить высоту и ширину в соответствии с требованиями и ее не требуется для установки атрибутов (lp); В Java. Если вы устанавливаете, убедитесь, что вы считаете xml RelativeLayout Height и Width