Estou tentando gerar uma caixa de diálogo personalizada no Android. Eu crio meu Diálogo assim:
dialog = new Dialog(this);
dialog.setContentView(R.layout.my_dialog);
Tudo funciona bem, exceto pelo título do Diálogo. Mesmo se eu não definir o título da caixa de diálogo, o pop-up da caixa de diálogo terá um espaço em branco na posição da caixa de diálogo.
Existe alguma maneira de ocultar essa parte do diálogo?
Eu tentei com um AlertDialog, mas parece que o layout não está definido corretamente:
LayoutInflater inflater =
(LayoutInflater) this.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
View view = inflater.inflate(R.layout.map_dialog, null);
AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.setView(view);
// dialog = new Dialog(this);
// dialog.setContentView(R.layout.map_dialog);
dialog = builder.create();
((TextView) dialog.findViewById(R.id.nr)).setText(number);
Se eu usar esse código, recebo uma exceção de ponteiro nula na última linha. A caixa de diálogo não é nula, portanto, o TextView que tento recuperar não existe.
Se eu descomentar a parte em que uso o Dialog Constructor, tudo funcionará bem, exceto no título acima do layout da minha caixa de diálogo.
android
android-layout
dialog
Janusz
fonte
fonte
Respostas:
Você pode ocultar o título de uma caixa de diálogo usando:
dialog.requestWindowFeature(Window.FEATURE_NO_TITLE);
Versão anterior desta resposta, que é complicada demais:
Você precisa usar um
AlertDialog
. Há uma boa explicação no site do desenvolvedor do Android sobre diálogos personalizados .Em um resumo muito breve, você faz isso com o código copiado abaixo no site oficial. Isso pega um arquivo de layout personalizado, o inflaciona, fornece texto e ícone básicos e depois o cria. Você mostraria isso com
alertDialog.show()
.Em resposta ao comentário:
Suponho que o TextView com o ID
nr
esteja no modo de exibição com o qual você está inflandoView view = inflater....
. Nesse caso, você precisa alterar apenas um pouco: em vez dedialog.findView...
fazê-loview.findView...
. Depois de fazer isso, lembre-se de usar dialog.show () ou mesmo builder.show () sem se preocupar em fazer builder.create ().fonte
dialog.requestWindowFeature(Window.FEATURE_NO_TITLE);
FEATURE_NO_TITLE funciona ao criar uma caixa de diálogo do zero, como em:
Mas não funciona ao criar um AlertDialog (ou usar o Builder), porque já desativa o título e usa internamente um personalizado.
Examinei as fontes do SDK e acho que não pode ser contornado. Portanto, para remover o espaçamento superior, a única solução é criar uma caixa de diálogo personalizada do zero IMO, usando diretamente a classe Dialog.
Além disso, pode-se fazer isso com um estilo, por exemplo, em styles.xml:
E depois:
fonte
Dialog
, mas criar umaAlertDialog
era muito mais fácil. Como é indicado nos docs :The Dialog class is the base class for dialogs, but you should avoid instantiating Dialog directly. Instead, use one of the following subclasses: <AlertDialog and others described here>
. EleAlertDialog
também lida com as coisas do ciclo de vida e aceita / cancela de maneiras fáceis.No seu código, adicione esta linha
Ou, em XML, use um tema
XML seria uma implementação melhor, pois com a versão do código, a barra de título é criada e removida, o que é um desperdício de recursos
Altere o tipo de caixa de diálogo de alerta para caixa de diálogo do sistema (por exemplo, TYPE_SYSTEM_OVERLAY) e veja se isso resolve seu problema
fonte
Use assim:
Isso removerá qualquer barra de título da janela de diálogo.
fonte
Use o código abaixo antes
setcontentview
: -Nota : Você deve ter o código acima, na mesma ordem e linha.
requestWindowFeature
deve estar antes da linha setContentView.fonte
você pode remover o título
Onde diálogo é o nome do meu diálogo.
fonte
No seu código, se você usar,
requestWindowFeature(Window.FEATURE_NO_TITLE);
certifique-se de que o procedimentodialog.setContentView();
seja anterior, caso contrário, o aplicativo poderá travar.fonte
Eu encontrei a Three Way para fazer isso>
1) Usando requestWindowFeature
2) Usando style (style.xml)
3) Usando o tema XML no AndroidManifest.xml
fonte
Na sua classe Custom_Dialog.java, adicione
requestWindowFeature(Window.FEATURE_NO_TITLE)
fonte
A resposta do olivierg funcionou para mim e é a melhor solução se a criação de uma classe Dialog personalizada for o caminho que você deseja seguir. No entanto, me incomodou não poder usar a classe AlertDialog. Eu queria poder usar o estilo AlertDialog do sistema padrão. Criar uma classe de diálogo personalizada não teria esse estilo.
Então, eu encontrei uma solução (hack) que funcionará sem ter que criar uma classe personalizada; você pode usar os construtores existentes.
O AlertDialog coloca uma exibição acima da exibição de conteúdo como um espaço reservado para o título. Se você encontrar a vista e definir a altura como 0, o espaço desaparecerá.
Eu testei isso em 2.3 e 3.0 até agora, é possível que ainda não funcione em todas as versões.
Aqui estão dois métodos auxiliares para fazer isso:
Aqui está um exemplo de como é usado:
Se você estiver usando isso com um DialogFragment, substitua o
onCreateDialog
método do DialogFragment . Em seguida, crie e retorne sua caixa de diálogo como o primeiro exemplo acima. A única alteração é que você deve passar false como o terceiro parâmetro (show) para que ele não chame show () na caixa de diálogo. O DialogFragment tratará disso mais tarde.Exemplo:
À medida que for testando mais, não deixarei de atualizar os ajustes adicionais necessários.
fonte
Não sei se essa pergunta ainda é real, mas no meu caso, quando mudei de Dialog para DialogFragment,
não era uma opção, mas eu poderia usar
em vez disso, com o mesmo resultado.
fonte
setStyle(STYLE_NO_TITLE, 0);
) irá no método onCreate da sua classe DialogFragment.Defina o título como sequência vazia usando o construtor.
fonte
defina o atributo "gravidade" em toda a caixa de diálogo para "centralizar". Você precisará substituir essa configuração por todos os componentes filhos na caixa de diálogo que você não deseja centralizar.
fonte
fonte
em XML use um tema
fonte
Se simplesmente usarmos a caixa de diálogo sem a
setTitle()
, isso funcionará na remoção do espaço do título?fonte
Pense que você pode apenas usar isso agora:
fonte
cria um título menos diálogo
fonte
fonte
Ao usar o AlertDialog, o não uso
setTitle()
faz o título desaparecerfonte
Depois de muitos hackers, consegui que isso funcionasse:
fonte
dialog
aqui egetResources()
Você pode fazer isso sem usar
AlertDialog
, definindo a nova classe que se estende daDialog
classe da seguinte maneira:fonte
Aqui está algo que você pode fazer
AlertBuilder
para fazer o título desaparecer:fonte
Usa isto
fonte
dialog_custom .requestWindowFeature (Window.FEATURE_NO_TITLE);
isso removerá o título da caixa de diálogo de edição.
Nota adicione estas linhas antes de adicionar conteúdo. Por exemplo
fonte