Установить положение / размер элемента пользовательского интерфейса в процентах от размера экрана

Я пытаюсь работать, если можно использовать процентные позиции / размеры при создании макета. Я хочу что-то вроде этого …

^ | | | 68% | | v Gallery (height equivalent of 16% total screen size) ^ | 16% v 

Я тестирую устройство, которое в ландшафте имеет отображение фактических пикселей 800×480, и я в настоящее время вынуждаю его со следующим …

 <?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent" > <Gallery android:id="@+id/gallery" android:layout_width="fill_parent" android:layout_height="80px" android:layout_marginTop ="320px" /> </RelativeLayout> 

Очевидно, я не хочу жестко фиксировать единицы фиксированных px но я не могу использовать 68% или 0.68 для layout_marginTop (например). Я посмотрел на единицы dp но я не уверен, могу ли я сделать это так.

Я должен признать, что дизайн пользовательского интерфейса является слабым моментом, поэтому любой совет будет с благодарностью принят.

EDIT: для дальнейшего использования, если кто-то ищет аналогичный ответ, следуя предложению Алана Мура, у меня есть следующее, работающее именно так, как я этого хочу …

 <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:background="@drawable/bground" android:layout_width="fill_parent" android:layout_height="fill_parent" > <TextView android:layout_width="fill_parent" android:layout_height="0dp" android:layout_weight="0.68" android:background="@android:color/transparent" /> <Gallery android:id="@+id/gallery" android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_weight="0.16" /> <TextView android:layout_width="fill_parent" android:layout_height="0dp" android:layout_weight="0.16" android:background="@android:color/transparent" /> </LinearLayout> 

Мне удалось найти другие примеры использования layout_weight и решил установить высоты TextView в 0dp а также использовать float для весов. Отлично работает. 🙂

Solutions Collecting From Web of "Установить положение / размер элемента пользовательского интерфейса в процентах от размера экрана"

Я думаю, что вы хотите установить андроид: layout_weight,

http://developer.android.com/resources/tutorials/views/hello-linearlayout.html

Что-то вроде этого (я просто помещаю текстовые представления сверху и снизу в качестве заполнителей):

  <LinearLayout android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent" android:weightSum="1"> <TextView android:layout_width="fill_parent" android:layout_height="0dp" android:layout_weight="68"/> <Gallery android:id="@+id/gallery" android:layout_width="fill_parent" android:layout_height="0dp" android:layout_weight="16" /> <TextView android:layout_width="fill_parent" android:layout_height="0dp" android:layout_weight="16"/> </LinearLayout> 

Для TextView и его потомков (например, Button) вы можете получить размер дисплея из WindowManager, а затем установить высоту TextView в некоторой его части:

 Button btn = new Button (this); android.view.Display display = ((android.view.WindowManager)getSystemService(Context.WINDOW_SERVICE)).getDefaultDisplay(); btn.setHeight((int)(display.getHeight()*0.68)); 

Используйте PercentRelativeLayout или PercentFrameLayout из библиотеки Supoort Percent

 <android.support.percent.PercentFrameLayout android:orientation="vertical" android:layout_width="match_parent" android:layout_height="match_parent"> <TextView android:layout_width="match_parent" app:layout_heightPercent="68%"/> <Gallery android:id="@+id/gallery" android:layout_width="match_parent" app:layout_heightPercent="16%"/> <TextView android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_width="match_parent"/> </android.support.percent.PercentFrameLayout> 

Взгляните на это:

http://developer.android.com/reference/android/util/DisplayMetrics.html

Вы можете получить представление о экране, и это простая математика для вычисления 68 процентов экрана.