Eu gostaria de carregar o valor como está. Eu tenho dois dimension.xml
arquivos, um em /res/values/dimension.xml
e outra no /res/values-sw360dp/dimension.xml
.
No código fonte, eu gostaria de fazer algo como
getResources().getDimension(R.dimen.tutorial_cross_marginTop);
Isso funciona, mas o valor que recebo é multiplicado pelo fator de densidade da tela (1,5 para hdpi, 2,0 para xhdpi, etc.).
Eu também tentei fazer
getResources().getString(R.dimen.tutorial_cross_marginTop);
Isso funcionaria em princípio, mas recebo uma string que termina em "dip" ...
android
android-resources
dpi
dimension
Héctor Júdez Sapena
fonte
fonte
getDimensionPixelSize(int id)
que exatamente afirma que ele retorna em Pixel, entãogetDimension(int id)
deve retornar no dp (dependência unidades independentes), que estaria pronto para uso, por exemplo, com VistasetPadding
Respostas:
No meu dimens.xml eu tenho
No código Se eu fizer
isso retornará 72 que, como o estado dos documentos, é multiplicado pela densidade do telefone atual (48dp x 1,5 no meu caso)
exatamente como os documentos afirmam:
portanto, se você quiser o valor exato do dp, como no xml, apenas divida-o com a densidade do DisplayMetrics
dp será 48 agora
fonte
dp
fornecerá o valor de pixel em escala em relação à escala do objeto de recurso usado para recuperá-lo. Depois de encontrar várias maneiras de obter recursos, isso será mais relevante. Para simplificar, você pode pensar nisso como sendo relativo à escala da tela. Também existemsp
pixels em relação ao tamanho do texto do sistema epx
pixels diretamente. Cada um é diferente e tem um propósito diferente.fonte
A
Resource
classe também possui um método getDimensionPixelSize () que, penso, será adequado às suas necessidades.fonte
getDimensionPixelSize()
se você pode consultar os docs ele afirma claramente ReturnsResource dimension value multiplied by the appropriate metric and truncated to integer pixels.
Para aqueles que precisam apenas economizar algum
int
valor nos recursos, você pode fazer o seguinte.integers.xml
Código
fonte
Você pode usar getDimensionPixelOffset () em vez de getDimension, para não precisar converter para int.
fonte
Você também pode escrever um número inteiro no arquivo xml.
Você viu [isto] http://developer.android.com/guide/topics/resources/more-resources.html#Integer ? use como.
fonte
Eu acho que é bom obter o valor conforme a resolução, mas se você não quiser fazer isso, dê isso em px .......
Pixel independente da densidade (dp)
Uma unidade virtual de pixels que você deve usar ao definir o layout da interface do usuário para expressar dimensões ou posição do layout de maneira independente da densidade. O pixel independente da densidade é equivalente a um pixel físico em uma tela de 160 dpi, que é a densidade da linha de base assumida pelo sistema para uma tela de densidade "média". No tempo de execução, o sistema lida com qualquer escalonamento transparente das unidades dp, conforme necessário.
based on the actual density of the screen in use. The conversion of dp units to screen pixels is simple: px = dp * (dpi / 160). For example, on a 240 dpi screen, 1 dp equals 1.5 physical pixels.
Você sempre deve usar unidades dp ao definir a interface do usuário do aplicativo, para garantir a exibição adequada da interface do usuário em telas com densidades diferentes.Eu acho que é bom alterar o valor conforme a resolução, mas se você não quiser fazer isso, dê isso em px .......
consulte este link
de acordo com isso
dp
Pixels independentes da densidade - Uma unidade abstrata que se baseia na densidade física da tela. Essas unidades são relativas a uma tela de 160 dpi (pontos por polegada), na qual 1dp é aproximadamente igual a 1px.
When running on a higher density screen, the number of pixels used to draw 1dp is scaled up by a factor appropriate for the screen's dpi. Likewise, when on a lower density screen, the number of pixels used for 1dp is scaled down.
A proporção de dp para pixel mudará com a densidade da tela, mas não necessariamente na proporção direta. O uso de unidades de DP (em vez de unidades de px) é uma solução simples para fazer com que as dimensões da vista em seu layout sejam redimensionadas corretamente para diferentes densidades de tela. Em outras palavras, ele fornece consistência para os tamanhos reais dos elementos da interface do usuário em diferentes dispositivos.px
Pixels - corresponde aos pixels reais na tela. Esta unidade de medida não é recomendada porque a representação real pode variar entre dispositivos; cada dispositivo pode ter um número diferente de pixels por polegada e pode ter mais ou menos pixels totais disponíveis na tela.
fonte
Use uma extensão Kotlin
Você pode adicionar uma extensão para simplificar esse processo. Permite que você chame apenas
context.dp(R.dimen. tutorial_cross_marginTop)
para obter o valor de flutuaçãoSe você quiser lidar com isso sem contexto, poderá usar
Resources.getSystem()
:Por exemplo, em um dispositivo xhdpi, use
24.dp
para obter 12.0 ou12.px
24fonte