2016-12-02 10 views
0

Я надеялся, что DP-пиксели решают проблему с различными размерами экрана.Как настроить такой же размер ImageView на разных экранах?

Я настроил мой ImageView как это:

<ImageView 
    android:layout_width="200dp" 
    android:layout_height="200dp" 
    android:src="@drawable/center_ring" 
    android:layout_centerHorizontal="true" 
    android:layout_centerVertical="true"/> 

Затем я попытался запустить это приложение на виртуальных устройствах Nexus 5X и Nexus S с различными размерами экрана. Как вы можете видеть, относительный размер ImageView совсем другой.

Как получить такой же относительный размер на разных экранах?

enter image description here enter image description here

+0

использования Dimen файл для нескольких (hdpi, xhdpi, xxhdpi и т. д.) соответственно –

+0

@AdeelTurk, который может решить проблему с графикой, но мои другие элементы являются настраиваемыми объектами TextView, и мне по-прежнему нужен способ сделать их одинакового относительного размера на всех экранах. – wilkas

ответ

0

Вы можете сделать это, давая ширину и высоту, рх вместо дп. Для такого же относительного размера вы можете использовать макет для используемой и неиспользуемой области. Это решит вашу проблему.

Редактировать Тогда у вас должны быть пользовательские представления и создавать все представления в соответствии с расчетами веса. Тогда только вы достигнете этого.

+0

Использование px вместо dp не решает проблему. Я не могу использовать макет макета, потому что все мои объекты (изображения, пользовательские текстовые изображения) являются перетаскиваемыми элементами. – wilkas

1

попробуйте использовать эту библиотеку для вашего измерения. это поможет вам преодолеть ваши вопросы, но сво не идеальное решение, в идеале я бы рекомендовал вам использовать ограничение макета или макет весы https://github.com/intuit/sdp

Это должно помочь вам получить размер экрана

Display display = getWindowManager().getDefaultDisplay(); 
Point size = new Point(); 
display.getSize(size); 
int width = size.x; 
int height = size.y; 
+0

Я не думаю, что ConstraintLayout будет работать, так как это приложение представляет собой обучающую игру, в которой объекты (пользовательские TextViews, ImageViews) перемещаются, перекрываются и реагируют на столкновение. – wilkas

+0

Я пробовал предлагаемый Android SDK с SDP-устройствами. Они более последовательны, но не идеальны. Кроме того, многие из моих объектов создаются программно - могу ли я использовать эти модули в JAVA-коде? – wilkas

+0

Да, вы можете, но определите эти размеры в dimen xml, а затем вызовите их в коде ur – Ak9637