Я предполагаю, что вы пытаетесь получить отображение, которое не меняется, если пользователь изменяет параметры доступа на своем телефоне в зависимости от размера пользовательского интерфейса.
Вы можете получить эту работу, используя DisplayMetrics.
DisplayMetrics metrics = getResources().getDisplayMetrics();
При «нормальных» значениях масштабного коэффициента metrics.xdpi
и metrics.densityDpi
имеют одинаковое значение. Если это не так, вы можете получить «реальный» масштабный коэффициент, который используется, когда пользователь использует нормальное масштабирование, используя следующее.
if(metrics.xdpi != metrics.densityDpi){
Log.d(TAG,"Real scale " + (metrics.xdpi / metrics.densityDpi)*metrics.density);
}
Чем вы можете использовать указанное значение для умножения ваших фиксированных значений из макета, чтобы оно могло иметь точную плотность на разных экранах. Это также будет означать, что каждое значение в макете должно использовать px
вместо dp
или sp
.
Хотя этот подход будет работать, я настоятельно рекомендую его не использовать.
Во-первых, потому что это много работы, и будет сложно поддерживать этот код в будущих обновлениях.
Во-вторых, эта функция Android очень удобна, и если ваше приложение не компилируется с ней, вероятно, это указывает на то, что вам следует лучше создать свой макет.