Мой подход к этому следующий:
1). Получите высоту устройства. Также проверьте этот ответ.
DisplayMetrics displayMetrics = new DisplayMetrics();
getWindowManager().getDefaultDisplay().getMetrics(displayMetrics);
int height = displayMetrics.heightPixels;
2). Рассчитайте коэффициент.
Я полагаю, вы установили верхнее поле 130dp
. Используя pixplicity, мне удалось преобразовать его в px
.
![dp в px](https://i.stack.imgur.com/RIHWN.png)
У вашего телефона разрешение высота x вес в пикселях. Определим высоту как phoneHeight
.
Здесь мне тоже становится немного сложно. Как вы можете видеть, 130dp имеет разные значения пикселей для ldpi, mdpi и т. д. Лично я не знаю, какой из них вам следует использовать, вы можете попробовать mdpi. (Я постараюсь изучить больше и вернуться с ответом).
LE:
Вы можете использовать этот метод для преобразования dp в пиксели в соответствии с вашим телефоном. (См. этот ответ).
public static float convertDpToPixel(float dp, Context context){
Resources resources = context.getResources();
DisplayMetrics metrics = resources.getDisplayMetrics();
float px = dp * ((float)metrics.densityDpi / DisplayMetrics.DENSITY_DEFAULT);
return px;
}
Используйте возвращенные px в формулу ниже. (назовем возвращенный px - convertedPx
.
3). Формула для значения верхнего поля.
Если мы используем значение 130dp для mdpi из таблицы, мы получим 130px. Таким образом, формула будет:
margin_top = (convertedPx / phoneHeight) * height
где phoneHeight
— высота телефона, на котором вы в данный момент тестируете, а height
— высота устройства, использующего displayMetrics
.
ВНИМАНИЕ: convertedPx
будет константой. Вам нужно только запустить этот метод (convertDpToPixel
) на своем телефоне, чтобы узнать, сколько 130dp означает в пикселях.
person
grrigore
schedule
06.08.2018
FrameLayout
/LinearLayout
сgravity=center
. ИлиRelativeLayout
сalignSelf=parentBottom
, или раскладка Constraint? - person Khemraj Sharma   schedule 06.08.2018height
илиweight
устройства и процент для создания верхнего поля. Что-то вроде верхнего поля должно быть0.15 * height
. - person grrigore   schedule 06.08.2018