Eu sei, isso já foi discutido mil vezes, mas não consigo ajustar o tamanho do texto para diferentes tamanhos de tela. Eu tento usar 'sp' como unidades de tamanho no meu estilo personalizado:
<style name="CustumButtonStyle" parent="@android:style/Widget.Button">
...
<item name="android:textSize">30sp</item>
...
</style>
No 2.7 QVGA, parece OK:
Mas no WSVGA de 7 polegadas fica assim:
Eu tentei usar 'sp' e 'dp' com o mesmo resultado.
Poderia explicar como fazer com que esses botões pareçam iguais em qualquer tela?
O estilo completo do botão personalizado
<style name="CustumButtonStyle" parent="@android:style/Widget.Button">
<item name="android:background">@drawable/custom_button</item>
<item name="android:layout_width">fill_parent</item>
<item name="android:layout_height">wrap_content</item>
<item name="android:layout_margin">3dp</item>
<item name="android:textColor">#ffffff</item>
<item name="android:gravity">center</item>
<item name="android:textSize">30sp</item>
<item name="android:textStyle">bold</item>
<item name="android:shadowColor">#000000</item>
<item name="android:shadowDx">1</item>
<item name="android:shadowDy">1</item>
<item name="android:shadowRadius">2</item>
</style>
E no meu tema de aplicação eu tenho
<item name="android:buttonStyle">@style/CustumButtonStyle</item>
E aqui está o meu layout:
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/RelativeLayout1"
android:layout_width="fill_parent"
android:background="@drawable/grid"
android:gravity="center"
android:orientation="vertical" android:layout_height="fill_parent">
<Button
android:id="@+id/buttonContinue"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentTop="true"
android:layout_centerHorizontal="true"
android:layout_gravity="center"
android:gravity="center"
android:text="@string/continue_game" android:layout_marginTop="3dp" android:layout_marginBottom="3dp"/>
<Button
android:id="@+id/buttonNewGame"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignLeft="@+id/buttonContinue"
android:layout_alignRight="@+id/buttonContinue"
android:layout_below="@+id/buttonContinue"
android:layout_gravity="center"
android:gravity="center"
android:text="@string/new_game" android:layout_marginTop="3dp" android:layout_marginBottom="3dp"/>
<Button
android:id="@+id/ButtonAbout"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignLeft="@+id/buttonNewGame"
android:layout_alignRight="@+id/buttonNewGame"
android:layout_below="@+id/buttonNewGame"
android:layout_gravity="center"
android:gravity="center"
android:text="@string/about" android:layout_marginTop="3dp" android:layout_marginBottom="3dp"/>
android
screen-size
text-size
forcelain
fonte
fonte
Respostas:
@forcelain Acho que você precisa verificar este PDF de IO do Google para design . Nesse pdf, vá para a página no: 77, na qual você encontrará como sugerir o uso do dimens.xml para diferentes dispositivos do android, por exemplo, veja a estrutura abaixo:
por exemplo, você usou abaixo de dimens.xml em valores.
Na pasta de outros valores, você precisa alterar os valores para o tamanho do texto.
Nota: Conforme indicado por @espinchi, small, normal, large e xlarge foram descontinuados desde o Android 3.2 em favor do seguinte:
Declarando layouts de tablet para Android 3.2
fonte
Eu acho que é tarde demais para responder a esta discussão. Mas gostaria de compartilhar minha ideia ou maneira de resolver o problema do tamanho do texto em dispositivos de resolução de diferenças. Muitos sites de desenvolvedores do Android sugerem que precisamos usar a unidade sp para o tamanho do texto, que manipulará o tamanho do texto para dispositivos de resolução de diferenças. Mas eu sempre sou incapaz de obter o resultado desejado. Então, eu encontrei uma solução que estou usando nos meus últimos 4-5 projetos e está funcionando bem. De acordo com a minha sugestão, você deve colocar o tamanho do texto para cada dispositivo de resolução, o que é um trabalho tedioso, mas ele atenderá às suas necessidades. Cada desenvolvedor deve ouvir sobre a proporção como 4: 6: 8: 12 (h: xh: xxh: xxxh respectivamente) . Agora, dentro da pasta res do projeto, você deve criar 4 pastas com o arquivo dimens, por exemplo
Agora, dentro do arquivo dimens.xml, você deve colocar tamanhos de texto. Estou mostrando o código para valores-hdpi , da mesma forma que você deve colocar o código para outros valores de resolução / arquivo dimens.xml.
Para outras resoluções, é como xhdpi : 6px, xxhdpi : 8px , xxxhdpi : 12px. Isso é calculado com a razão (3: 4: 6: 8: 12) que escrevi acima. Vamos discutir outro exemplo de tamanho de texto com a proporção acima. Se você deseja obter um tamanho de texto de 12 px em hdpi, em outra resolução seria
Esta é a solução simples para implementar o tamanho de texto necessário para todas as resoluções. Não estou considerando dispositivos de resolução de valores-mdpi aqui. Se alguém quiser incluir o tamanho do texto para esta resolução, a ração é como 3: 4: 6: 8: 12 . Em qualquer consulta, por favor me avise. Espero que ajude as pessoas.
fonte
Às vezes, é melhor ter apenas três opções
Use pequeno e grande para diferenciar do tamanho normal da tela.
Para o normal, você não precisa especificar nada.
Com isso, você pode evitar testar e especificar dimensões para diferentes tamanhos de tela.
fonte
Eu fiz o mesmo por dimensão e pintei algo como (com dp, mas apenas para texto e em drawText ())
XML:
Código:
fonte
dp
para tamanho de texto ... use em seusp
lugar.Todos podem usar a biblioteca android mencionada abaixo, que é a maneira mais fácil de tornar os tamanhos de texto compatíveis com quase todas as telas de dispositivos. Na verdade, ele foi desenvolvido com base nos novos qualificadores de configuração do Android para o tamanho da tela (introduzido no Android 3.2) SmallestWidth swdp.
https://github.com/intuit/sdp
fonte
Se você possui a API 26, considere usar o autoSizeTextType :
A configuração padrão permite que o dimensionamento automático do TextView seja dimensionado uniformemente nos eixos horizontal e vertical.
https://developer.android.com/guide/topics/ui/look-and-feel/autosizing-textview
fonte
Eu acho que você pode arquivar isso adicionando vários recursos de layout para cada tamanho de tela, por exemplo:
Referência: 1. http://developer.android.com/guide/practices/screens_support.html
fonte
Para unificar todas as telas para mostrar os mesmos tamanhos de elemento, incluindo o tamanho da fonte: - Projete a interface do usuário em um tamanho de tela com os tamanhos que achar adequados durante o design, ou seja, o tamanho da fonte do TextView é 14dp no tamanho de tela padrão de 4'6 polegadas.
Calcule programaticamente o tamanho físico da tela dos outros telefones, ou seja, 5'2 polegadas dos outros telefones / telas.
Use uma fórmula para calcular a diferença percentual entre as duas telas. ou seja, qual é a diferença percentual entre 4'6 e 5'2.
Calcule a diferença de pixels entre os 2 TextViews com base na fórmula acima.
Obtenha o tamanho real (em pixels) do tamanho da fonte do TextView e aplique a diferença de pixels (calculada anteriormente) ao tamanho da fonte padrão.
Dessa forma, você pode aplicar a proporção dinâmica a todos os tamanhos de tela e o resultado é ótimo. Você terá tamanhos e layout idênticos em cada tela.
Pode ser um pouco complicado no começo, mas atinge totalmente o objetivo quando você descobrir a fórmula. Com esse método, você não precisa criar vários layouts apenas para ajustar-se a diferentes tamanhos de tela.
fonte
Você também pode usar
weightSum
elayout_weight
property para ajustar sua tela diferente.Para isso, você deve fazer
android:layout_width
= 0dp eandroid:layout_width
= (o que quiser);fonte
Como o @espinchi mencionado em 3.2 (nível 13 da API), os grupos de tamanhos foram preteridos. Os intervalos de tamanho de tela são a abordagem preferida no futuro.
fonte
Não codifique os tamanhos.
Para flexibilidade e novas resoluções de tela - a melhor prática é colocar o TextView fictício no layout para obter o textSize:
E no seu código, por exemplo:
Mantenha
textSize
como uma referência à qual você pode adicionar um tamanho constante ou de porcentagem (calculando).fonte