Как установить позицию диалога? - PullRequest
8 голосов
/ 08 августа 2011

Я сделал специальный диалог.

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <style name="myBackgroundStyle"
        parent="@android:style/Theme.Translucent.NoTitleBar" />
</resources>

screenshot

Dialog dialog = new Dialog(this, R.style.myBackgroundStyle);
dialog.setContentView(R.layout.dialog);

dialog.show();

WindowManager.LayoutParams params = dialog.getWindow().getAttributes();
params.y = 225; params.x = 225;
params.gravity = Gravity.TOP | Gravity.LEFT;       
dialog.getWindow().setAttributes(params); 

Но проблема в том, что он появляется в верхнем левом углу, и я не могу найти способ разместить его там, где мне это нужно. params.y=225; params.x=225; как-то не влияет на это.

Есть идеи?


редактировать: Если у меня есть такой xml (style / Theme.Dialog), то параметры и местоположение работают нормально, но появляется модальная тень. Есть ли способ его удалить?

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <style name="myBackgroundStyle" parent="@android:style/Theme.Dialog">
    <item name="android:windowBackground">@android:color/transparent</item>
    <item name="android:windowNoTitle">true</item>
    <item name="android:windowFullscreen">false</item>
    </style>
</resources>

Ответы [ 5 ]

7 голосов
/ 08 августа 2011

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

WindowManager.LayoutParams params = new WindowManager.LayoutParams();
params.y = 225; params.x = 225;
params.gravity = Gravity.TOP | Gravity.LEFT;       
dialog.getWindow().setAttributes(params);

Редактировать: Если вы хотите сохранить атрибуты окна, вы можете попробовать добавить это во второй строке:

params.copyFrom(dialog.getWindow().getAttributes());

Тем не менее, обратите внимание, что метод copyFrom полностью недокументирован, поэтому я понятия не имею, если он делает то, что звучит так, как он делает.

4 голосов
/ 08 августа 2011

Попробуйте вместо этого использовать Theme.Panel в качестве стиля parent.

2 голосов
/ 14 сентября 2012

В приведенном выше коде строка ...

dialog.show();

Должен появиться после

WindowManager.LayoutParams params = dialog.getWindow().getAttributes();
params.y = 225; params.x = 225;
params.gravity = Gravity.TOP | Gravity.LEFT;       
dialog.getWindow().setAttributes(params); 
...

По внешнему виду вы сначала показываете диалоговое окно, а затем задаете координаты x, y после того, как диалоговое окно уже выведено на экран.

2 голосов
/ 08 августа 2011

не уверен на 100%, но связано ли это с params.gravity=Gravity.TOP | Gravity.LEFT;?

другое редактирование

Хорошо, тогда этот должен быть более полезным: Вызов диалогового окна Android без затухания фона

0 голосов
/ 05 января 2012

Просто удалите params.gravity = Gravity.TOP |Gravity.LEFT;и это будет работать.Я пробовал.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...