El paso a paso o código que hallarás en este artículo es la resolución más rápida y válida que hallamos a tu duda o dilema.
Solución:
Prueba algo como esto:
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState)
{
getDialog().getWindow().setGravity(Gravity.CENTER_HORIZONTAL | Gravity.TOP);
WindowManager.LayoutParams p = getDialog().getWindow().getAttributes();
p.width = ViewGroup.LayoutParams.MATCH_PARENT;
p.softInputMode = WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_VISIBLE;
p.x = 200;
...
getDialog().getWindow().setAttributes(p);
...
u otros métodos para getDialog().getWindow()
.
asegúrese de establecer la posición después de llamar a set-content.
Correcto, me golpeé la cabeza contra la pared durante una o dos horas con esto, antes de finalmente obtener DialogFragment
colocado como yo quería.
Estoy construyendo sobre la respuesta de Steelight aquí. Este es el enfoque más simple y confiable que encontré.
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle b)
Window window = getDialog().getWindow();
// set "origin" to top left corner, so to speak
window.setGravity(Gravity.TOP
Tenga en cuenta que params.width
y params.softInputMode
(usado en la respuesta de Steelight) son irrelevantes para esto.
A continuación se muestra un ejemplo más completo. Lo que realmente necesitaba era alinear un “cuadro de confirmación” DialogFragment junto a una vista “fuente” o “principal”, en mi caso un ImageButton.
Elegí usar DialogFragment, en lugar de cualquier Fragmento personalizado, porque le brinda funciones de “diálogo” de forma gratuita (cerrar el diálogo cuando el usuario hace clic fuera de él, etc.).
Ejemplo ConfirmBox encima de su “fuente” ImageButton (papelera)
/**
* A custom DialogFragment that is positioned above given "source" component.
*
* @author Jonik, https://stackoverflow.com/a/20419231/56285
*/
public class ConfirmBox extends DialogFragment
private View source;
public ConfirmBox()
public ConfirmBox(View source)
this.source = source;
public static ConfirmBox newInstance(View source)
return new ConfirmBox(source);
@Override
public void onCreate(Bundle savedInstanceState)
super.onCreate(savedInstanceState);
setStyle(STYLE_NO_FRAME, R.style.Dialog);
@Override
public void onStart()
super.onStart();
// Less dimmed background; see https://stackoverflow.com/q/13822842/56285
Window window = getDialog().getWindow();
WindowManager.LayoutParams params = window.getAttributes();
params.dimAmount = 0.2f; // dim only a little bit
window.setAttributes(params);
// Transparent background; see https://stackoverflow.com/q/15007272/56285
// (Needed to make dialog's alpha shadow look good)
window.setBackgroundDrawableResource(android.R.color.transparent);
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState)
// Put your dialog layout in R.layout.view_confirm_box
View view = inflater.inflate(R.layout.view_confirm_box, container, false);
// Initialise what you need; set e.g. button texts and listeners, etc.
// ...
setDialogPosition();
return view;
/**
* Try to position this dialog next to "source" view
*/
private void setDialogPosition() Gravity.LEFT);
WindowManager.LayoutParams params = window.getAttributes();
// Just an example; edit to suit your needs.
params.x = sourceX - dpToPx(110); // about half of confirm button size left of source view
params.y = sourceY - dpToPx(80); // above source view
window.setAttributes(params);
public int dpToPx(float valueInDp)
DisplayMetrics metrics = getActivity().getResources().getDisplayMetrics();
return (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, valueInDp, metrics);
Es bastante fácil hacer que lo anterior sea de uso más general agregando parámetros constructores o configuradores según sea necesario. (Mi final ConfirmBox
tiene un botón con estilo (dentro de algunos bordes, etc.) cuyo texto y View.OnClickListener
se puede personalizar en código.)
Debe anular el método onResume() en su DialogFragment de la siguiente manera:
@Override
public void onResume()
final Window dialogWindow = getDialog().getWindow();
WindowManager.LayoutParams lp = dialogWindow.getAttributes();
lp.x = 100; // set your X position here
lp.y = 200; // set your Y position here
dialogWindow.setAttributes(lp);
super.onResume();
Eres capaz de añadir valor a nuestra información tributando tu experiencia en las notas.