Como obter a densidade de tela programaticamente no android?
Quero dizer: Como encontrar o dpi da tela do dispositivo atual?
android
dpi
screen-density
Praveen
fonte
fonte
getDisplayMetrics().xdpi
, que deve retornar o dpi real do dispositivo. Observe que esse valor não é definido corretamente de maneira consistente entre os dispositivos pelos fabricantes, portanto você não pode usá-los . Triste, mas verdadeiro: as informações sobre dpi reais não estão disponíveis . Fonte: groups.google.com/d/msg/android-developers/g56jV0Hora0/…getResources().getDisplayMetrics().xdpi
egetResources().getDisplayMetrics().ydpi
fornecerá densidades horizontais e verticais reais , que na maioria dos casos são diferentes.Respostas:
Você pode obter informações sobre a exibição na estrutura DisplayMetrics :
Embora o Android não use um mapeamento de pixel direto, ele usa vários valores quantificados de Density Independent Pixel e, em seguida, é dimensionado para o tamanho real da tela. Assim, a
metrics.densityDpi
propriedade será uma dasDENSITY_xxx
constantes (120
,160
,213
,240
,320
,480
ou640
dpi).Se você precisar da densidade real de pixels em LCD (talvez para um aplicativo OpenGL), poderá obtê-la nas propriedades
metrics.xdpi
emetrics.ydpi
para densidade horizontal e vertical, respectivamente.Se você estiver direcionando os Níveis da API anteriores a 4. A
metrics.density
propriedade é um fator de escala de ponto flutuante da densidade de referência (160 dpi). O mesmo valor agora fornecido pormetrics.densityDpi
pode ser calculadofonte
getWindowManager().getDefaultDisplay().getRealMetrics(metrics);
foi adicionada oficialmente na API 17, mas fiquei surpreso ao descobrir que ela funcionava corretamente mesmo em um dispositivo 4.0 que eu tentei.Isso também funciona:
Isso lhe dará:
0,75 - ldpi
1.0 - mdpi
1.5 - hdpi
2.0 - xhdpi
3.0 - xxhdpi
4.0 - xxxhdpi
ref: densidade
ref 2
fonte
WindowManager
(por exemplo, dentro de um carregador). Basta multiplicá-lo por 160tvdpi
. Para mais informações sobretvdpi
ver aquiIsso funcionará no nível 4 da API e superior.
fonte
A resposta de Blundell como método auxiliar estático:
fonte
Tente o seguinte:
fonte
View
muito mais facilmente (que é onde eu preciso dele!)Para obter dpi:
fonte
Aqui estão as constantes de densidade, fonte :
Além das densidades padrão, existem 5 intermediárias. Levando em conta esse fato, o código a seguir será um exemplo de trabalho completo:
Como alternativa, você pode encontrar constantes de densidade usando o
densityDpi
:fonte
A resposta a seguir é uma pequena melhoria baseada na resposta de qwertzguy.
fonte
Na verdade, se você deseja ter o dpi de exibição real, a resposta está em algum ponto, se você consultar as métricas de exibição:
densityDpi * 160 fornecerá os valores / sugestões de qual densidade você deve usar
conforme especificado nas postagens anteriores
mas
dm.xdpi
não fornecerá sempre o dpi REAL de determinada exibição: exemplo:então talvez o dpi real da tela deva ser Densidade * xdpi .. mas não tenho certeza se essa é a maneira correta de fazer!
fonte
Isso deve ajudar na sua atividade ...
RESULTADO :
fonte
fonte
Se você deseja recuperar a densidade de um Serviço, ele funciona assim:
fonte
Você deve tentar isso. Acabei de adicionar um método que irá encontrar e mostrar o brinde. Aquele em que categoria o dispositivo cai.
http://www.androidwarriors.com/2016/01/how-to-find-different-devices-screen.html
fonte
Isso deve funcionar.
fonte
Ainda outra resposta:
fonte
Outra maneira de obter a densidade carregada pelo dispositivo:
Crie
values
pastas para cada densidadeAdicione um recurso de string em seus respectivos
strings.xml
:Em seguida, basta obter o recurso de string e você terá sua densidade:
Se a densidade for maior que
XXXHDPI
, será o padrãoXXXHDPI
ou se for menor doHDPI
que o padrão.MDPI
Eu deixei de fora
LDPI
, porque para o meu caso de uso não é necessário.fonte
Tente isso ...
No kotlin
Você pode ligar
println("density: ${determineScreenDensityCode()}")
e a saída seráSystem.out: density: xxxhdpi
fonte
Estou usando o seguinte código para acessar o DPI dos módulos (não é necessário ter acesso a um objeto de contexto):
fonte
No Android, você pode obter a densidade da tela assim:
E em Kotlin assim:
Verifique regularmente se novas densidades foram adicionadas .
fonte