O que estou tentando fazer: estou tentando criar uma caixa de diálogo personalizada no android Com cantos arredondados.
O que está acontecendo: sou capaz de criar um diálogo personalizado, mas ele não possui cantos arredondados. Tentei adicionar um seletor, mas ainda não consegui obter cantos arredondados.
Abaixo está o meu código para o mesmo:
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>
Respostas:
Crie um xml no drawable, diga dialog_bg.xml
defini-lo como plano de fundo em seu layout xml
Defina o plano de fundo da visualização raiz da caixa de diálogo como transparente, porque o Android coloca o layout da caixa de diálogo em uma visualização raiz que oculta os cantos do layout personalizado.
fonte
dialog.getWindow().setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT));
é o que mising na maioria dos outros segmentos SO! 1setBackgroundDrawable
parece estar obsoleto ... alguma alternativa para isso?dialog.getWindow().setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT));
antessetContentView
Você precisa fazer o seguinte:
Crie um plano de fundo com cantos arredondados para o plano de fundo da caixa de diálogo:
Agora, no arquivo XML do seu Diálogo no layout raiz, use esse plano de fundo com a margem necessária:
finalmente, na parte java, você precisa fazer isso:
Isso funciona perfeitamente para mim.
fonte
<corners android:radius="8dp"/>
, caso contrário, você vai ter problemas de processamentoPath.isConvex is not supported
este é o aviso que você geralmente recebe em seu layout se usar uma forma com o mesmo valor para todos os cantos. stackoverflow.com/q/34736981/6605907dialog.getWindow().setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT));
isso funciona para mim
fonte
dimen.xml
styles.xml
dialog_title_style.xml
dialog_background.xml
dialog_one_button.xml
OneButtonDialog.java
fonte
Eu criei uma nova maneira sem ter um drawable em segundo plano, que faça com que o CardView seja pai e dê a ele um
app:cardCornerRadius="20dp"
e adicione-o na classe javadialog.getWindow().setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT));
É outra maneira de fazer isso.
fonte
Se você usar componentes de material :
CustomDialog.kt
styles.xml
fonte
Você pode usar a forma para o fundo como
Dê uma olhada nisto para obter detalhes.
fonte
maneira mais simples é usar a partir de
fonte
Configuração
impedirá o diálogo de projetar uma sombra.
Solução é usar
onde é R.drawable.dialog_rounded_background
fonte
Para quem gosta de fazer coisas em XML, especialmente no caso de você estar usando ações de componentes da arquitetura de Navegação para navegar pelas caixas de diálogo
Você pode usar:
fonte
Você pode simplesmente usar MaterialAlertDialogBuilder para criar uma caixa de diálogo personalizada com cantos arredondados.
Primeiro, crie um estilo para o diálogo de material como este:
crie um objeto Alert Dialog na classe Java como este:
É tudo o que você precisa fazer.
fonte
Com a biblioteca Androidx e o Tema dos componentes materiais, você pode substituir o
getTheme()
método:com:
Ou você pode usar o
MaterialAlertDialogBuilder
incluído na Biblioteca de componentes de material:com:
Se você não precisa
DialogFragment
apenas usar oMaterialAlertDialogBuilder
.fonte
Aqui está a solução completa, se você deseja controlar o raio do canto da caixa de diálogo e preservar a sombra da elevação
Diálogo:
layout dialog_options.xml:
A chave é envolver o CardView com outro ViewGroup (aqui FrameLayout) e definir margens para criar espaço para a sombra de elevação.
fonte
No Kotlin, estou usando uma classe DoubleButtonDialog.Java com a linha
window?.setBackgroundDrawable(ColorDrawable(Color.TRANSPARENT))
mais importanteNo layout, podemos criar um dialog_double_button.xml
use drawable.xml como
fonte
Para nível de API> = 28 atributo disponível
android:dialogCornerRadius
. Para oferecer suporte a versões anteriores da API, usewhere dialog_bg.xml
fonte