2012-02-20 5 views
7

this questionのように、WindowManagerによって管理されるオーバーレイViewがあります。アンドロイド:ビューのLayoutParamsをWindowManagerによって追加しました

簡単に言えば、それは次のようになります。

WindowManager wm = (WindowManager) getSystemService(WINDOW_SERVICE); 
my_view_layout_params = new WindowManager.LayoutParams(
     WindowManager.LayoutParams.TYPE_SYSTEM_OVERLAY, 
     WindowManager.LayoutParams.FLAG_WATCH_OUTSIDE_TOUCH, 
     PixelFormat.TRANSLUCENT); 

wm.addView(my_view, my_view_layout_params); 

それは動作しますが、私は、レイアウトのparamsを変更する必要がある場合、私はビューを削除し、そのように、それを再度追加する必要があります。

wm.removeView(my_view); 
wm.addView(my_view, my_view_layout_params); 

あまり美しくないように見えます。私はmy_view.setLayoutParams(my_view_layout_params)をしようとしましたが、残念なことに動作しません。どうすればいいですか?

+0

あなたがview.getLayoutParamsを行うことはできませんが()、)layoutparams返されたオブジェクトを更新し、view.requestLayout(呼び出し? –

+0

ルーベン、返信いただきありがとうございますが、残念ながらそれは動作しません。私は 'view.requestLayoutParams()'を行い、返されたLayoutParamsの '重力'を変更し、 'view.requestLayout()'を実行します。 –

+1

WindowManagerはupdateViewLayout()メンバを持っています...確かにそれはあなたが望むものですか? –

答えて

11

WindowManagerにはupdateViewLayout()メンバがあります。これは間違いなくあなたが望むものですか?

(元々はコメントに答えたとして)

+1

この方法は便利ですが、一度設定したウィンドウタイプのようなプロパティは一度変更できないので注意してください。試してみるとFCが得られます。 – Tom

+0

はいこれが有効です。 'setLayoutParams'を使う必要はありません。ありがとうございました! –

+0

このupdateViewLayout()メソッドはどこで使用できますか? –

3

あなたは、この使用することができます:

wm.updateViewLayout(my_view,my_view_layout_params); 
関連する問題