0

AlertDialogがあり、そのYが中央に表示されるように設定されています。2.3エミュレーターとデバイスでは完全に表示されますが、4.1(エミュレーターと4.0デバイス)では予想よりも上に表示されます。コードは次のとおりです。

        AlertDialog adg = scrnDlg.create();
    WindowManager.LayoutParams lp = new WindowManager.LayoutParams();
    lp.copyFrom(adg.getWindow().getAttributes());
    lp.width = WindowManager.LayoutParams.MATCH_PARENT;
    //lp.height = WindowManager.LayoutParams.MATCH_PARENT;
    lp.y = 05;
    lp.gravity = Gravity.TOP | Gravity.CENTER_HORIZONTAL;
    adg.getWindow().setAttributes(lp);
                adg.show();
    /*  working with 2.3 but nt proper position with 4.0
        WindowManager.LayoutParams lp = adg.getWindow().getAttributes();
        lp.y = 05;
        lp.gravity = Gravity.TOP | Gravity.CENTER_HORIZONTAL;
        adg.getWindow().setAttributes(lp);
        */

obthバージョンエミュレータのスクリーンショット: ここに画像の説明を入力してください

誰かが私がこの問題を解決するのを手伝ってくれる?また、この高さはLd、Mdに最適ですが、HdとxDの場合、この高さは小さく、下部により多くのスペースが残っているようです。画面の高さに基づいて高さを設定するにはどうすればよいですか。

どんな助けでも大歓迎です。

ありがとう

4

1 に答える 1

3

Android OSのバージョンをテストして重力を設定することで、ようやく上記の結果が得られました。これは私が行った方法であり、期待どおりに結果を取得します:

alertDlg.show(); 
WindowManager.LayoutParams lp = new WindowManager.LayoutParams();
lp.copyFrom(alertDlg.getWindow().getAttributes());
lp.width = WindowManager.LayoutParams.MATCH_PARENT;
lp.y = 02;
if (MyActivity.Build_Version < Build.VERSION_CODES.ICE_CREAM_SANDWICH)
lp.gravity = Gravity.TOP | Gravity.CENTER_HORIZONTAL; 
else if (MyActivity.Build_Version >= Build.VERSION_CODES.ICE_CREAM_SANDWICH)
lp.gravity = Gravity.CENTER_HORIZONTAL;

alertDlg.getWindow().setAttributes(lp);

LayoutParamsの重力は、Androidの4.1バージョンと4.1バージョン未満では異なる方法で処理されるため、上記が設定され、完全に機能します。

この共有が誰かを助けることを願っています。

于 2012-10-10T15:48:11.723 に答える