Pergunta

Eu tenho uma subclasse personalizada de AlertDialog que deve exibir uma lista de todas as redes Wifi disponíveis ao alcance.

Estou exibindo esta caixa de diálogo criando uma instância dela e chamando show() e Não estou usando AlertDialog.Builder (Porque quero que minha classe personalizada seja usada).

Eu tenho meu próprio layout para exibir como visualização de conteúdo, mas quero a aparência normal do AlertDialog, com o cabeçalho do título e o quadro.

Meu layout personalizado é bem simples:

<?xml version="1.0" encoding="utf-8"?>
<ListView xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@android:id/list"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content" >
</ListView>

E estou adicionando-o à caixa de diálogo em onCreate():

protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setTitle(R.string.pick_wifi_network);
    setContentView(R.layout.pick_wifi_dialog);
    // Rest of implementation
}

Mas o resultado não se parece em nada com AlertDialog.Não há título e o ListView ocupa a tela inteira:

enter image description here

Então, o que estou fazendo de errado e como devo fazer certo?

Obrigado!

Editar:Por que não uso AlertDialog.Builder:Minha classe Dialog personalizada é responsável por ouvir SCAN_RESULTS_AVALIABLE_ACTION do WifiManager e atualizar o ListView conforme os resultados são atualizados.Por esse motivo não posso usar AlertDialog.Builder.FIM DA EDIÇÃO

Foi útil?

Solução

Acho que o seu problema está no tema da caixa de diálogo (que você não está aplicando).

Eu não tentei isso, mas se entendi corretamente, deve funcionar:

No construtor do seu diálogo, chame o superconstrutor que recebe um tema, passando o tema padrão do diálogo.

public CustomDialog(Context context) {
    super(context, android.R.style.Theme_Dialog);
}

Os diálogos criados no Android possuem este tema padrão.

A documentação para os estados Theme_Dialog (v2.2):

Tema padrão para janelas e atividades de diálogo (no nível 10 e inferior da API), que é usado pela classe de diálogo.Isso muda a janela a ser flutuando (não preencha a tela inteira) e coloca um quadro em torno de seu conteúdo.Você pode definir esse tema em uma atividade se quiser fazer uma atividade que pareça uma caixa de diálogo.

Espero que isto ajude!

EDITAR:

Para resolver o problema com setTitle, a maneira mais fácil parece ser herdar Dialog em vez de AlertDialog.

Também fazendo isso, não há necessidade de passar no android.R.style.Theme_Dialog no construtor (aparentemente subclassificando AlertDialog vem sem tema).

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top