Determinar medidas em telas de tamanho e densidade diferentes {Resolvido}

Ola, tenho uma aplicaçao que que conta com um bottomsheet (um tipo de menu que vem de baixo pra cima )
esse bottomsheet conta com 2 fileiras de icones na parte superior e uma lista na parte inferior. Quando ele é
exibido eu mostro apenas os icones usando o.setPeekHeight(); e se o usuario quiser ver a lista ele puxa o bottomsheet pra cima porem o valor que o bottomsheet deve subir é varia em dispositivos com telas e resoluçoes diferentes
atualmente uso

float scale = getResources().getDisplayMetrics().density;
float width = getResources().getDisplayMetrics().widthPixels - (int)(14*scale+0.5f);
height = (width / 16) * 7;

para fazer o calculo, funciona bem no meu g3 (5 polegadas 2k) no nexus 5x (1920x1080 420dp) e em outros dispositivos nessa faixa porem em tablets e smartphones pequenos ou ele sobe demais ou qse nao sobe.
Como faço para o bottomsheet subir a mesma medida em todos os dispositivos?
Desde ja, obg.

Também sofro de dificuldade com layouts, mas tenta seguir isso
https://developer.android.com/guide/practices/screens_support.html?hl=pt-br

Práticas recomendadas
O objetivo de oferecer suporte a várias telas é criar um aplicativo que funcione corretamente e tenha uma boa aparência em qualquer uma das configurações de tela generalizadas permitidas pelo Android. As seções anteriores deste documento fornecem informações sobre como o Android adapta a tela do seu aplicativo para configurações de tela e como você pode personalizar a aparência do aplicativo em diferentes configurações de tela. Esta seção fornece dicas adicionais e uma visão geral de técnicas que ajudam a garantir que o aplicativo seja dimensionado corretamente para diferentes configurações de tela.

A seguir apresentamos uma lista de verificação rápida para garantir que seu aplicativo seja exibido corretamente em diferentes telas:

*Use unidades wrap_content, match_parent ou dp ao especificar dimensões em um arquivo de layout XML
*Não use valores de pixel rígidos no código do seu aplicativo
*Não use AbsoluteLayout (obsoleto)
*Forneça drawables bitmap alternativos para diferentes densidades de tela

As seções a seguir fornecem mais detalhes.

Não sei se há uma forma que funcione de generalizar por calculo o tamanho dos componentes… pelo padrão deles eles pedem para criar outras Layouts XML conforme tamanho de telas diferentes…:cry:

Vou procurar também porque se caso precisar será uma mão na roda …
Qualquer coisa volto aqui.

1 curtida

Consegui uma solução pratica para o problema :

    double height = (double) getResources().getDisplayMetrics().density * 35;
    mBottomSheetBehavior.setPeekHeight((int) height);

A lógica é a seguinte : No meu G3 eu precisava setar o PeekHeight em 140 pra ficar da altura correta levando em consideração que minha tela é 5Pol e tem 2K de resolução o que faz com que sua densidade seja 4 (valor retornado pelo getResources().getDisplayMetrics().density) entao oque fiz foi dividir os 140 que eu precisava que o bottomsheet subisse por 4: 140/4=35. Ou seja , a cada 1 ponto de densidade o bottomsheet deve subir 35 pixeis. Assim aparentemente eu consegui um padrao afinal, funcionou perfeitamente nos smarts e tablets em que testei.

1 curtida

Valeu a dica Frmichetti, mais o problema é que como vc disse eles mandam criar outros xml pra tudo e isso n me ajuda, ate pq eu precisava fazer o calculo em tempo de execuçao, alias eu consegui uma soluçao que ja postei aqui em baixo, OBG.

1 curtida

Legal, entendido!