Изменение положения диалогового окна на экране Android
Я сделал простой AlertDialog
в моей Деятельности:
View view = layoutInflater.inflate(R.layout.my_dialog, null);
AlertDialog infoDialog = new AlertDialog.Builder(MyActivity.this)
.setView(view)
.create();
infoDialog.show();
С приведенным выше кодом диалог отображается в центре экрана (около).
Мне интересно, как я могу настроить положение диалога, чтобы он показывался только под верхней панелью действий? (Есть ли способ изменить гравитацию или что-то в диалоговом окне?) И как это сделать на основе моего кода?
Ответы
Ответ 1
Я использовал этот код, чтобы отобразить диалоговое окно в нижней части экрана:
Dialog dlg = <code to create custom dialog>;
Window window = dlg.getWindow();
WindowManager.LayoutParams wlp = window.getAttributes();
wlp.gravity = Gravity.BOTTOM;
wlp.flags &= ~WindowManager.LayoutParams.FLAG_DIM_BEHIND;
window.setAttributes(wlp);
Этот код также препятствует тому, чтобы андроид затемнял фон диалога, если вам это нужно. Вы должны изменить параметр силы тяжести, чтобы переместить диалог о
Ответ 2
private void showPictureialog() {
final Dialog dialog = new Dialog(this,
android.R.style.Theme_Translucent_NoTitleBar);
// Setting dialogview
Window window = dialog.getWindow();
window.setGravity(Gravity.CENTER);
window.setLayout(LayoutParams.FILL_PARENT, LayoutParams.FILL_PARENT);
dialog.setTitle(null);
dialog.setContentView(R.layout.selectpic_dialog);
dialog.setCancelable(true);
dialog.show();
}
вы можете настроить диалог, основанный на параметрах силы тяжести и макета
изменить параметр гравитации и макета на основе вашего требования
Ответ 3
Для меня это получилось очень хорошо, когда я пытался расположить свой диалог где-то точно в нижней части текстового поля, где он был выбран.
public void setPosition(int yValue) {
Window window = getWindow();
WindowManager.LayoutParams param = window.getAttributes();
param.gravity = Gravity.TOP | Gravity.CENTER_HORIZONTAL;
param.y = yValue;
window.setAttributes(param);
window.clearFlags(WindowManager.LayoutParams.FLAG_DIM_BEHIND);
}
Ответ 4
Я нашел этот фрагмент кода из кода @gypsicoder здесь
private CharSequence[] items = {"Set as Ringtone", "Set as Alarm"};
AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.setItems(items, new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int item) {
if(item == 0) {
} else if(item == 1) {
} else if(item == 2) {
}
}
});
AlertDialog dialog = builder.create();
dialog.requestWindowFeature(Window.FEATURE_NO_TITLE);
WindowManager.LayoutParams wmlp = dialog.getWindow().getAttributes();
wmlp.gravity = Gravity.TOP | Gravity.LEFT;
wmlp.x = 100; //x position
wmlp.y = 100; //y position
dialog.show();
Здесь значение позиции x - это пиксели слева направо. Для позиции y позиция снизу вверх.
Ответ 5
Новый BottomSheetDialog
:
BottomSheetDialog dialog = new BottomSheetDialog(YourActivity.this);
dialog.setContentView(YourView);
dialog.show();
Ответ 6
просто добавьте это в свой код:
dialog.getWindow().setGravity(Gravity.BOTTOM);
Ответ 7
dialog.getWindow().getAttributes().gravity = Gravity.BOTTOM;
Ответ 8
public class MyDialogFragment extends DialogFragment{
protected void setDialogGravity(int gravity) {
Dialog dialog = getDialog();
if (dialog != null) {
Window window = dialog.getWindow();
if (window != null) {
WindowManager.LayoutParams params = window.getAttributes();
params.width = WindowManager.LayoutParams.MATCH_PARENT;
params.height = WindowManager.LayoutParams.MATCH_PARENT;
params.horizontalMargin = 0;
params.gravity = gravity;
params.dimAmount = 0;
params.flags &= ~WindowManager.LayoutParams.FLAG_DIM_BEHIND;
window.setAttributes(params);
}
}
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
super.onCreateView(inflater,container,savedInstanceState);
return inflater.inflate(R.layout.my_dialog, null);
}
@Override
public void onViewCreated(View view, @Nullable Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
setDialogGravity(Gravity.BOTTOM | Gravity.CENTER_HORIZONTAL);
}
}
Ответ 9
Для своей деятельности в диалоге я использовал это:
WindowManager.LayoutParams lp = this.getWindow().getAttributes();
lp.gravity = Gravity.BOTTOM;
Ответ 10
я использую этот метод
@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
final Dialog dialog = new Dialog(getActivity());
dialog.requestWindowFeature(Window.FEATURE_NO_TITLE);
dialog.getWindow().setBackgroundDrawable(new ColorDrawable(android.graphics.Color.TRANSPARENT));
Window window = dialog.getWindow();
WindowManager.LayoutParams wlp = window.getAttributes();
wlp.gravity = Gravity.BOTTOM;
dialog.setContentView(R.layout.dialog_droppoint);
dialog.show();
window.setAttributes(wlp);
return dialog;
}