0

Я хочу задать размеры для моего настраиваемого диалогового окна оповещений на основе ориентации экрана. Мое намерение состоит в том, чтобы поменять значения высоты и ширины, чтобы ящик выглядел как один размер, но обрабатывал различные размеры экрана различных устройств, благодаря фрагментации Android, кажется, трудно добиться такого же эффекта на всех устройствах. Автоматическое изменение размера Android кажется мне странным.контрольные размеры диалогового окна пользовательских предупреждений в разных ориентациях экрана

Портрет:

alertDialog.width=screen.width*0.8 
alertDialog.height=screen.height=0.5 

Пейзаж:

alertDialog.width=screen.width*0.5; 
alertDialog.height=screen.height*0.8 

Пожалуйста, обратите внимание, что Пользовательские оповещения Dialog должны использовать один и тот же код и поддержка Android версии от Jellybean (по крайней мере 4.2) в Нуга (7).

я использую android.support.v7.AlertDialog (последняя доступная вещь)

Я полагаю, android.app.Dialog следует избегать в настоящее время (стар)

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

я использовал андроида: windowMinWidthMajor и андроида: windowMinWidthMinor, но они влияют на оба Раскладке (портрет и пейзаж) и, кажется, игнорируются, если содержимое не соответствует указанным ограничениям.

Я хотел было андроид: windowMaxWidthMinor & андроид: windowMaxWidthMajor

+0

Возможно, вы захотите изучить DialogTheme, поскольку он управляет представлением диалога, включая прозрачную тень и белый фон. Ширина 50% довольно узкая для диалога, но Android все равно изменит ваше диалоговое окно. Лучше всего изменить тему и использовать размеры для управления шириной. Кроме того, вам нужно подождать, пока диалог не будет добавлен в представление, но еще не отображен, чтобы изменить высоту и ширину. –

ответ

0

Это то, что я использовал для изменения размера конкретных мнений на странице:

myView.getViewTreeObserver().addOnGlobalLayoutListener(() -> { 
    item.height = myView.getHeight(); 
}); 

Применяя его к тому, что вы хотите сделать:

myView.getViewTreeObserver().addOnGlobalLayoutListener(() -> { 
    LayoutParams params = (get the layout params according to the layout); 
    params.width = myView.getWidth() * 0.5; 
    params.height = myView.getHeight() * 0.8; 
    myView.setLayoutParams(params); 
}); 

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

0

Update:

я мог бы достичь его, установив android:layout_centerInParent="true" для моего макета. и значения компоновки для каждого компонента в стиле до

android:layout_width="wrap_content" 
android:layout_height="wrap_content" 
android:gravity="center" 
android:layout_gravity="center" 

для достижения центровки.Код

XML доступны на https://github.com/computingfreak/CFTest/blob/master/app/src/main/res/layout/alert_popup.xml

Java кодекса доступны на https://github.com/computingfreak/CFTest/blob/master/app/src/main/java/net/cf/sms/cftest/MainActivity.java

Интересно, эта строка кода является излишним

view.setTextAlignment(View.TEXT_ALIGNMENT_CENTER); 

и, таким образом, оставил его в системе Android, чтобы решить, размеры и изменение размеров основанный на контенте. Он работает для моего случая, но не удастся в случае длинного текста, возможно, какой-то макет прокрутки поможет. Ура!

 Смежные вопросы

  • Нет связанных вопросов^_^