2011-08-08 12 views
8

私はカスタムダイアログを作成しました。ダイアログの位置を設定するにはどうすればよいですか?

<?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(スタイル/ 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> 

答えて

4

Theme.Panelをスタイルのparentとして代わりに使用してください。

+0

ありがとうございます!働いた! :) – Roger

2

確かに、params.gravity=Gravity.TOP | Gravity.LEFT;とは関係がありますか?

別の編集後、

OK、これはより多くの使用である必要があります:Calling android dialog without it fading the background

+0

"Theme.Translucent.NoTitleBar"ではそれほどよく似ていません。私。 Theme.Dialogの場合、paramsは正常に動作しますが、私はそのモーダルシャドーを全面的に取得します。 – Roger

+0

上記の編集を参照してください。 – Roger

+0

本当にありません。タイトルバーからその小さな影を取り除くというリンクがありますが、モデルの陰影を取り除く必要があります(つまり、ダイアログの後ろの画面全体を暗くする)。 – Roger

7

は、パラメータの新しいセットを作成してみてください:

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

編集:あなたが保存したい場合はウィンドウの属性では、これを2行目として追加することができます:

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

しかし、copyFromメソッドは完全に文書化されていないことに注意してください。そのように聞こえるかどうかはわかりません。

+0

は、 "Theme.Translucent.NoTitleBar"で動作しないようです。 – Roger

0

params.gravity = Gravity.TOP |重力.LEFT;それは動作します。私はもう試した。

上記のコードで
2

行...

dialog.show(); 

あなたはXの設定最初にダイアログを表示しているもののルックスでは

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

後に表示される必要があり、yは、ダイアログの後の座標すでにスクリーンに描画されています。

関連する問題