Lo que estoy tratando de hacer: estoy tratando de hacer un diálogo personalizado en Android con esquinas redondeadas.
Lo que está sucediendo: puedo hacer un diálogo personalizado pero no tiene esquinas redondeadas. Intenté agregar un selector, pero aún así no pude lograr esquinas redondeadas.
A continuación se muestra mi código para el mismo:
Código Java:
private void launchDismissDlg() {
dialog = new Dialog(getActivity(), android.R.style.Theme_Dialog);
dialog.requestWindowFeature(Window.FEATURE_NO_TITLE);
dialog.setContentView(R.layout.dlg_dismiss);
dialog.setCanceledOnTouchOutside(true);
Button btnReopenId = (Button) dialog.findViewById(R.id.btnReopenId);
Button btnCancelId = (Button) dialog.findViewById(R.id.btnCancelId);
btnReopenId.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
}
});
btnCancelId.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
}
});
dialog.setCanceledOnTouchOutside(false);
dialog.getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN);
dialog.getWindow().setLayout(LayoutParams.MATCH_PARENT,LayoutParams.WRAP_CONTENT);
dialog.show();
}
código xml:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@android:color/white"
android:orientation="vertical" >
<TableLayout
android:layout_width="match_parent"
android:layout_height="wrap_content" >
<TableRow
android:id="@+id/tableRow1"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="20dp"
android:gravity="center" >
<TextView
android:id="@+id/textView1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:gravity="center"
android:text=""I WOULD LIKE TO DISMISS THE VENDOR""
android:textColor="@color/col_dlg_blue_light"
android:textSize="14sp"
android:textStyle="bold" />
</TableRow>
<TableRow
android:id="@+id/tableRow2"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="5dp"
android:gravity="center" >
<TextView
android:id="@+id/textView2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:gravity="center"
android:text="BECAUSE"
android:textColor="@android:color/black"
android:textStyle="bold" />
</TableRow>
<TableRow
android:id="@+id/tableRow4"
android:layout_width="match_parent"
android:layout_height="wrap_content" >
<Button
android:id="@+id/btnReopenId"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:background="@color/col_dlg_green_light"
android:text="REOPEN"
android:padding="5dp"
android:textSize="14sp"
android:textColor="@android:color/white"
android:textStyle="bold" />
<Button
android:id="@+id/btnCancelId"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:background="@color/col_dlg_pink_light"
android:text="CANCEL"
android:padding="5dp"
android:textSize="14sp"
android:textColor="@android:color/white"
android:textStyle="bold" />
</TableRow>
</TableLayout>
</LinearLayout>
Respuestas:
Crea un xml en dibujable, di dialog_bg.xml
establecerlo como fondo en su diseño xml
Establezca el fondo de la vista raíz del cuadro de diálogo en transparente, ya que Android coloca el diseño del cuadro de diálogo dentro de una vista raíz que oculta las esquinas en su diseño personalizado.
fuente
dialog.getWindow().setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT));
es lo que falta en la mayoría de los otros hilos SO! +1setBackgroundDrawable
parece estar en desuso ... ¿alguna alternativa a eso?dialog.getWindow().setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT));
antessetContentView
Debes hacer lo siguiente:
Cree un fondo con esquinas redondeadas para el fondo del Diálogo:
Ahora en el archivo XML de su cuadro de diálogo en el diseño raíz, use ese fondo con el margen requerido
Finalmente en la parte de Java necesitas hacer esto:
Esto funciona perfectamente para mi.
fuente
<corners android:radius="8dp"/>
, de lo contrario obtendrá problemas de renderizadoPath.isConvex is not supported
esta es la advertencia que generalmente recibe en su diseño si usa una forma con el mismo valor para todas las esquinas. stackoverflow.com/q/34736981/6605907dialog.getWindow().setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT));
esto funciona para mi
fuente
dimen.xml
styles.xml
dialog_title_style.xml
dialog_background.xml
dialog_one_button.xml
OneButtonDialog.java
fuente
Hice una nueva forma sin tener un fondo dibujable que hace que tenga CardView como padre y le dé un
app:cardCornerRadius="20dp"
y luego agregue esto en la clase javadialog.getWindow().setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT));
Es otra forma de hacerlo.
fuente
Si usa componentes materiales :
CustomDialog.kt
styles.xml
fuente
Puede usar la forma para el fondo como-
Echa un vistazo a esto para los detalles.
fuente
la manera más simple es usar
fuente
Ajuste
evitará que el diálogo proyecte una sombra.
La solución es usar
donde está R.drawable.dialog_itated_background
fuente
Para cualquiera a quien le guste hacer cosas en XML, especialmente en el caso de que esté utilizando acciones de componentes de la arquitectura de navegación para navegar a los cuadros de diálogo
Puedes usar:
fuente
Simplemente puede usar MaterialAlertDialogBuilder para crear un diálogo personalizado con esquinas redondeadas.
Primero cree un estilo para el diálogo de material como este:
luego cree un objeto Alert Dialog en la clase Java como este:
Eso es todo lo que necesitas hacer.
fuente
Con la biblioteca de Androidx y el Tema de componentes de material puede anular el
getTheme()
método:con:
O puede utilizar el
MaterialAlertDialogBuilder
incluido en la Biblioteca de componentes de material:con:
Si no necesita un
DialogFragment
solo use elMaterialAlertDialogBuilder
.fuente
Aquí está la solución completa si desea controlar el radio de la esquina del diálogo y preservar la sombra de elevación
Diálogo:
dialog_options.xml layout:
La clave es envolver el CardView con otro ViewGroup (aquí FrameLayout) y establecer márgenes para crear espacio para la sombra de elevación.
fuente
En Kotlin, estoy usando una clase DoubleButtonDialog.Java con la línea
window?.setBackgroundDrawable(ColorDrawable(Color.TRANSPARENT))
como importanteEn el diseño, podemos crear un dialog_double_button.xml
luego use drawable.xml como
fuente
Para el nivel API> = 28 atributo disponible
android:dialogCornerRadius
. Para admitir versiones anteriores de API es necesario usardonde dialog_bg.xml
fuente