マニフェストの主なアクティビティは、常にポートレート表示に設定されています。これは、タブレットにアプリケーションを読み込むときに正常に動作します。AlertDialogは、風景で横長の横長表示を表示します。
しかし、メニューボタンを使用して「設定」をクリックすると、xmlレイアウトを膨らませるAlertDialog
が開きます。タブレットには、ダイアログ全体の2/3程度が表示されます。残りの部分はオフスクリーンで右側に表示されます。このケースは、アプリを横向きモードで保持しているときにタブレットにアプリをインストールした場合、またはアプリが実行されていないときにタブレットを横向きにすると発生します(縦に戻ってアプリをクリックしても)。このダイアログでは、this.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
に電話をかけても、(この呼び出しで問題が解決しなくても)ポートレートをそのままにしておくことができます。
つまり、AlertDialog
の表示方法は、AlertDialog
の実際の向きが似ているにもかかわらず、横向きの表示が吹き飛ばされているため(一部がオフスクリーンになる)すべきだ。
(上記の文言が混乱した場合、私は謝罪 - 。必要であれば、何かを明確にする私に尋ねる)
なぜタブレットはこれを行うだろうか?私はいくつかのアンドロイド携帯電話でそれをテストしたが、これは起こらないので、なぜタブレットがこれを行うのか分からない。
SIDE注意事項:私は起動する場合、アプリ(別のAlertDialog
)の開始時に表示されるだけで、このAlertDialog
..私のEULAのいずれかでもこの方法を表示されたため
これも発生していませんアプリはランドスケープモードです
私は、ポートレート/ランドスケープモードを指定するすべての呼び出しを取り除くことによってランドスケープの使い勝手を可能にしました。タブレットでポートレートビューで保持しても、電話。
EDIT:
このコードは、電話でうまく動作しますが、タブレットの問題が解決しません。下のdialog.show();
のコメントを外すと、タブレットと携帯電話には欲しいサイズが表示されますが、灰色のメイン画面ではなく黒で表示されます。何か案は?呼び出し元関数によって呼び出される
showDialog(EXAMPLE_CASE);
が機能:
protected Dialog onCreateDialog(final int id) {
Dialog dialog;
AlertDialog.Builder builder = new AlertDialog.Builder(this);
Display display = getWindowManager().getDefaultDisplay();
int mwidth = display.getWidth();
int mheight = display.getHeight();
WindowManager.LayoutParams lp = new WindowManager.LayoutParams();
switch(id) {
// Example of what all my cases look like (there were way too many to copy)
case EXAMPLE_CASE:
builder.setTitle("Example")
.setMessage("Example message")
.setPositiveButton("OK", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialoginterface,int i) {
dialoginterface.dismiss();
showDialog(DIALOG_CHOICE);
}
})
.setCancelable(false);
dialog = builder.create();
break;
}
if (dialog != null) {
lp.copyFrom(dialog.getWindow().getAttributes());
lp.width = mwidth;
lp.height = mheight;
lp.x = mwidth;
//lp.y = mheight;
lp.dimAmount=0.0f;
//dialog.show();
dialog.getWindow().setAttributes(lp);
dialog.getWindow().addFlags(WindowManager.LayoutParams.FLAG_DIM_BEHIND);
dialog.setOnDismissListener(new OnDismissListener() {
@Override
public void onDismiss(DialogInterface dialog) {
removeDialog(id);
}
});
}
return dialog;
}
以下の回答以外は解決しましたか? –