ventana studio personalizado full form example emergente dialogo custom cuadro android android-layout android-dialog

studio - input dialog android



AlertDialog: Cómo quitar bordes negros arriba y abajo Ver (5)

En mi caso, ese límite fue causado por el tema de la Actividad principal para AlertDialog. Para deshacerte del borde por completo, dale un tema diferente (en este caso, Holo):

AlertDialog.Builder builder = new AlertDialog.Builder( new ContextThemeWrapper(this, android.R.style.Theme_Holo) );

Esto me lo arregló. ¡Espero que esto ayude!

Esta pregunta se ha formulado con anterioridad: el título personalizado de AlertDialog tiene un borde negro

Pero no fue respondida satisfactoriamente y falta información.

Intento crear un cuadro de diálogo personalizado en Android sin título y sin botones en la parte inferior.

Sin embargo, el cuadro de diálogo resultante tiene "bordes" / "espaciado" / algo negro en la parte superior e inferior de la vista.

De la documentación :

Un diálogo hecho con la clase de diálogo base debe tener un título. Si no llama a setTitle (), el espacio utilizado para el título permanece vacío, pero aún visible. Si no desea un título, debe crear su diálogo personalizado utilizando la clase AlertDialog. Sin embargo, debido a que un AlertDialog se crea más fácilmente con la clase AlertDialog.Builder, no tiene acceso al método setContentView (int) utilizado anteriormente. En su lugar, debe usar setView (Ver). Este método acepta un objeto View, por lo que debe inflar el objeto de vista raíz del diseño desde XML.

Entonces, eso es lo que hice:

Bienvenido.java

public class Welcome extends Activity { public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.welcome); LayoutInflater inflater = (LayoutInflater)this.getSystemService(LAYOUT_INFLATER_SERVICE); View layout = inflater.inflate(R.layout.welcomedialog, (ViewGroup)findViewById(R.id.layout_root)); AlertDialog.Builder builder = new AlertDialog.Builder(this); builder.setView(layout); builder.create().show(); } }

welcomedialog.xml

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent" android:background="@drawable/texturebg" android:id="@+id/layout_root" android:orientation="vertical" android:padding="40px"> ... </LinearLayout>

NOTA: He intentado usar FrameLayout como el grupo de ViewGroup raíz en lugar de LinearLayout según una sugerencia que encontré en alguna parte, pero eso no me ayudó.

Resultado

setBackgroundDrawable Suggestion

public class Welcome extends Activity { public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.welcome); LayoutInflater inflater = (LayoutInflater)this.getSystemService(LAYOUT_INFLATER_SERVICE); View layout = inflater.inflate(R.layout.welcomedialog, (ViewGroup)findViewById(R.id.layout_root)); AlertDialog.Builder builder = new AlertDialog.Builder(this); builder.setView(layout); AlertDialog dialog = builder.create(); dialog.getWindow().setBackgroundDrawable(new ColorDrawable(0)); dialog.show(); } }

No funcionó para mí


Para que la respuesta de Steve sea más clara, esto se puede hacer fácilmente. Por ejemplo, en mi caso, la vista que estaba configurando en el cuadro de diálogo era una vista Web.

@Override public Dialog onCreateDialog(Bundle savedInstanceState) { WebView webView = new WebView(getActivity()); webView.loadUrl(" url to show "); OnClickListener clickListenerOk = new OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { ... } }; OnClickListener clickListenerCancel = new OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { ... } }; AlertDialog dialog = new AlertDialog.Builder(getActivity()) .setPositiveButton("OK", clickListenerOk) .setNegativeButton("Cancel",clickListenerCancel) .create(); dialog.setView(webView, 0, 0, 0, 0); return dialog; }


Si nos fijamos en el origen de la clase AlertDialog , verá que la mayoría de los métodos son simplemente métodos de proxy (fachada) alrededor de private AlertController mAlert .

Al observar la fuente de la clase AlertController , verá 4 variables de miembros interesantes:

private int mViewSpacingLeft; private int mViewSpacingTop; private int mViewSpacingRight; private int mViewSpacingBottom; private boolean mViewSpacingSpecified = false;

Establecer mViewSpacingSpecified en true eliminará los bordes en la parte superior e inferior del cuadro de diálogo.

Esto se hace correctamente al cambiar esta línea:

dialog.setView(layout);

a:

dialog.setView(layout, 0, 0, 0, 0);


dialog.setInverseBackgroundForced(true);

utilice lo anterior en su código para eliminar el borde del cuadro de diálogo de alerta.

Refiera este LINK para InverseBackgroundForced.

ACTUALIZADO Pruebe este código ::::

public class Welcome extends Activity { public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.welcome); AlertDialog.Builder builder = new AlertDialog.Builder(Welcome.this); LayoutInflater _inflater = LayoutInflater.from(Welcome.this); View view = _inflater.inflate(R.layout.welcomedialog,null); builder.setView(view); AlertDialog alert = builder.create(); alert.show(); } }

Nota :: También intente quitando android: padding = "40px" de welcomedialog.xml.


setBackgroundDrawable(new ColorDrawable(0));

Llámalo en tu diálogo.