De acordo com a desenvolvedora da plataforma Android Dianne Hackborn, neste post do grupo de discussão, a Dialogs definiu a largura e a altura do layout de nível superior do Windows WRAP_CONTENT
. Para aumentar o Diálogo, você pode definir esses parâmetros para MATCH_PARENT
.
Código de demonstração:
AlertDialog.Builder adb = new AlertDialog.Builder(this);
Dialog d = adb.setView(new View(this)).create();
// (That new View is just there to have something inside the dialog that can grow big enough to cover the whole screen.)
WindowManager.LayoutParams lp = new WindowManager.LayoutParams();
lp.copyFrom(d.getWindow().getAttributes());
lp.width = WindowManager.LayoutParams.MATCH_PARENT;
lp.height = WindowManager.LayoutParams.MATCH_PARENT;
d.show();
d.getWindow().setAttributes(lp);
Observe que os atributos são definidos após o diálogo ser mostrado. O sistema é meticuloso sobre quando eles são definidos. (Acho que o mecanismo de layout deve defini-los na primeira vez que a caixa de diálogo é exibida, ou algo assim.)
Seria melhor fazer isso estendendo Theme.Dialog, então você não precisaria jogar um jogo de adivinhação sobre quando chamar setAttributes. (Embora seja um pouco mais trabalhoso fazer com que a caixa de diálogo adote automaticamente um tema claro ou escuro apropriado, ou o tema Honeycomb Holo. Isso pode ser feito de acordo com http://developer.android.com/guide/topics/ui/themes. html # SelectATheme )
Tente agrupar seu layout de caixa de diálogo personalizado em
RelativeLayout
vez deLinearLayout
. Isso funcionou para mim.fonte
A especificação de FILL_PARENT na janela da caixa de diálogo, como outros sugeriram, não funcionou para mim (no Android 4.0.4), porque apenas esticou o fundo preto da caixa de diálogo para preencher a tela inteira.
O que funciona bem é usar o valor mínimo de exibição, mas especificá-lo no código, para que a caixa de diálogo ocupe 90% da tela.
Assim:
Em geral, apenas o ajuste da largura deve ser suficiente na maioria dos casos.
fonte
Defina
android:minWidth
eandroid:minHeight
na sua visualização personalizada xml. Isso pode forçar o alerta a não apenas quebrar o tamanho do conteúdo. Usar uma exibição como esta deve fazer isso:fonte
Ainda mais simples, faça o seguinte:
fonte
onCreate
após a rotação do dispositivo. Nesse caso, não podemos confiar na largura / altura de nada no layout, porque ele ainda não foi criado; mas a largura / altura física do dispositivo ainda estão disponíveis.ViewGroup.LayoutParams.WRAP_CONTENT
como um dos parâmetrosfonte
FILL_PARENT
pela largura calculada como 90% da largura da exibição atual. Mas eu gosto da resposta porque é mais fácil do que os outros.Todas as outras respostas aqui fazem sentido, mas não atendem às necessidades de Fabian. Aqui está uma solução minha. Pode não ser a solução perfeita, mas funciona para mim. Ele mostra uma caixa de diálogo em tela cheia, mas você pode especificar um preenchimento na parte superior, inferior, esquerda ou direita.
Como você pode ver, eu tenho o Android: paddingTop = 20dp é basicamente o que você precisa. O android: windowBackground = @ color / Black0Percent é apenas um código de cor declarado no meu color.xml
Esse código de cores serve apenas como um modelo para substituir o plano de fundo da janela padrão da caixa de diálogo por uma cor de transparência de 0%.
Finalmente, aqui está nossa caixa de diálogo que define a exibição personalizada, que usa nosso dialog.xml:
Conclusão: tentei substituir o tema da caixa de diálogo no styles.xml chamado CustomDialog. Ele substitui o layout da janela da caixa de diálogo e me dá a chance de definir um preenchimento e alterar a opacidade do plano de fundo. Pode não ser a solução perfeita, mas espero que ajude você .. :)
fonte
DialogFragment
) ocorre quando você faz:Dialog customDialog = new Dialog(context, STYLE);
obrigado, REALMENTE, obrigado.Você pode usar a porcentagem para (APENAS) a largura da caixa de diálogo das janelas.
Veja este exemplo do Tema Holo:
Tudo o que você precisa fazer é estender esse tema e alterar os valores de "Maior" e "Menor" para 90%, em vez de 65%.
Saudações.
fonte
O seguinte funcionou bem para mim:
(observação: windowMinWidthMajor / Minor, conforme sugerido nas respostas anteriores, não funcionou. Minhas caixas de diálogo continuavam mudando de tamanho, dependendo do conteúdo)
e depois:
fonte
Solução com cálculo real de 90%:
onde
getScreenWidth(Activity activity)
é definido o seguinte (melhor colocado em uma classe Utils):fonte
Obtenha a largura do dispositivo:
use-o para criar diálogo 90% do dispositivo,
fonte
Bem, você deve definir a altura e a largura da caixa de diálogo antes de mostrar isso (dialog.show ())
então, faça algo parecido com isto:
fonte
De longe, a maneira mais simples de pensar -
Se sua caixa de diálogo é feita de um LinearLayout vertical, basta adicionar uma exibição fictícia de "preenchimento de altura", que ocupará toda a altura da tela.
Por exemplo -
Observe
android:weightSum="1"
nos atributos do LinearLayout eandroid:layout_weight="1"
nos atributos da visualização fictíciafonte
Bem, você deve definir a altura e a largura da caixa de diálogo antes de mostrar isso (dialog.show ())
então, faça algo parecido com isto:
Obtendo este código, eu fiz algumas alterações:
no entanto, o tamanho da caixa de diálogo pode mudar quando o dispositivo muda de posição. Talvez você precise lidar sozinho quando as métricas mudarem. PD: peekDecorView, implica que o layout da atividade seja inicializado corretamente, caso contrário você poderá usar
para obter o tamanho da tela
fonte
Depois de inicializar seu objeto de diálogo e definir a exibição do conteúdo. Faça isso e aproveite.
(no caso, estou definindo 90% para a largura e 70% para a altura, porque a largura 90% estará sobre a barra de ferramentas)
fonte
Minha resposta é baseada no koma, mas não precisa substituir o onStart, mas apenas o onCreateView, que quase sempre é substituído por padrão quando você cria novos fragmentos.
Eu testei no Android 5.0.1.
fonte
Aqui está minha variante para a largura da caixa de diálogo personalizada:
Portanto, dependendo da orientação do dispositivo (
ThemeHelper.isPortrait(mContext)
), a largura da caixa de diálogo será de 95% (no modo retrato) ou 65% (no modo paisagem). É um pouco mais do que o autor pediu, mas poderia ser útil para alguém.Você precisa criar uma classe que se estenda do Dialog e coloque esse código no seu
onCreate(Bundle savedInstanceState)
método.Para a altura da caixa de diálogo, o código deve ser semelhante a isso.
fonte
ThemeHelper
? Eu não tenho essa classe disponível no meu projeto.ThemeHelper
é apenas uma aula auxiliar para minhas necessidades. Seu métodoisPortrait(Context)
retorna se a orientação da tela do dispositivo é retrato ou paisagem.fonte
Acima, muitas das respostas são boas, mas nenhuma delas funcionou totalmente para mim. Então eu combinei a resposta do @nmr e peguei essa.
fonte
fonte
você precisa usar um estilo @ style.xml como CustomDialog para exibir a caixa de diálogo personalizável.
e use esse estilo em Activity.java como este
e seu custom_dialog.xml deve estar dentro do diretório de layout
fonte
Se você estiver usando o Layout de restrição , poderá definir qualquer visualização dentro dele, para preencher uma porcentagem da tela com:
layout_constraintWidth_percent = "0.8"
Por exemplo, se você tem um ScrollView dentro da caixa de diálogo e deseja defini-lo como uma porcentagem da altura da tela. Seria assim:
Espero que ajude alguém !!
fonte
Basta dar ao AlertDialog esse tema
fonte
Aqui está uma resposta curta que funcionou para mim (Testado na API 8 e API 19).
fonte
fonte
fonte