Ich habe eine einfache AlertDialog
in meiner Aktivität gemacht :
View view = layoutInflater.inflate(R.layout.my_dialog, null);
AlertDialog infoDialog = new AlertDialog.Builder(MyActivity.this)
.setView(view)
.create();
infoDialog.show();
Mit obigem Code wird der Dialog in der (etwa) der Mitte des Bildschirms angezeigt.
Ich frage mich, wie ich die Position des Dialogfelds anpassen kann, damit es direkt unter der oberen Aktionsleiste angezeigt wird. (Gibt es sowieso die Schwerkraft oder etwas des Dialogs zu ändern?) Und wie mache ich das basierend auf meinem Code?
Ich habe diesen Code verwendet, um den Dialog am unteren Bildschirmrand anzuzeigen:
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);
Dieser Code verhindert auch, dass Android den Hintergrund des Dialogs bei Bedarf dimmt. Sie sollten in der Lage sein, den Gravitationsparameter zu ändern, um den Dialog zu verschieben
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();
}
sie können Ihren Dialog basierend auf Schwerkraft- und Layoutparametern anpassen Ändern Sie Schwerkraft- und Layoutparameter basierend auf Ihren Anforderungen
Für mich hat das ziemlich gut geklappt, wo ich versuchte, meinen Dialog genau unterhalb der Textansicht zu positionieren, wo er ausgewählt wurde.
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);
}
Ich habe dieses Code-Snippet aus @gypsicoder code hier gefunden.
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();
Der Wert der x-Position ist Pixel von links nach rechts. Für y ist der Positionswert von unten nach oben.
Neue BottomSheetDialog
:
BottomSheetDialog dialog = new BottomSheetDialog(YourActivity.this);
dialog.setContentView(YourView);
dialog.show();
fügen Sie dies einfach in Ihren Code ein:
dialog.getWindow().setGravity(Gravity.BOTTOM);
dialog.getWindow().getAttributes().gravity = Gravity.BOTTOM;
Für meine Dialogaktivität habe ich diese verwendet:
WindowManager.LayoutParams lp = this.getWindow().getAttributes();
lp.gravity = Gravity.BOTTOM;
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);
}
}
ich benutze diese Methode
@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;
}