Recentemente, encontrei um problema de adaptação de tela com botões virtuais durante o desenvolvimento do projeto. Por exemplo, Huawei P9, Xiaomi MAX e outros modelos, o layout de toda a tela está acima, acho que deve ser um problema de botão virtual. Então, após algumas jogadas, encontrei a seguinte solução:
- Obtenha o tamanho real de exibição e a altura da tela
//获取屏幕尺寸,不包括虚拟功能高度
getWindowManager().getDefaultDisplay().getHeight();
- Obtenha a altura original da tela
private int getHeight() {
int dpi = 0;
Display display = getWindowManager().getDefaultDisplay();
DisplayMetrics dm = new DisplayMetrics();
Class c;
try {
c = Class.forName("android.view.Display");
@SuppressWarnings("unchecked")
Method method = c.getMethod("getRealMetrics", DisplayMetrics.class);
method.invoke(display, dm);
dpi = dm.heightPixels;
} catch (Exception e) {
e.printStackTrace();
}
return dpi;
}
Após duas comparações de altura, a altura da chave virtual pode ser obtida. A resolução da tela com teclado virtual é 1920 * 1080, mas na verdade reconhece a altura real ((altura do teclado virtual 1920) * 1080).
resolver:
Você pode escrever um conjunto de arquivos dimens de um tamanho específico. Por exemplo, a altura do botão virtual no Huawei p9 é 120px. Em seguida, você pode adicionar um conjunto de valores -1800X1080 e copiar 1920X1080 para os valores -1800X1080. Solução perfeita!