Установить положение/размер элемента пользовательского интерфейса в процентах от размера экрана
Я пытаюсь выяснить, можно ли использовать процентные позиции/размеры при создании макета. Я хочу что-то вроде этого...
^
|
|
| 68%
|
|
v
Gallery (height equivalent of 16% total screen size)
^
| 16%
v
Я тестирую устройство, которое в ландшафте имеет отображение фактических пикселей 800x480, и я сейчас заставляю его со следующим...
<?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
, но я не уверен, могу ли я сделать это так же.
Я должен признать, что дизайн пользовательского интерфейса является слабым моментом, поэтому любые советы были бы с благодарностью получены.
РЕДАКТИРОВАТЬ: В будущем, если кто-либо ищет аналогичный ответ, следуя предложению Алана Мура, у меня есть следующее, работающее именно так, как я хочу...
<?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
, а также использовать поплавки для весов. Отлично работает.:)
Ответы
Ответ 1
Я думаю, что вы хотите установить android: 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>
Ответ 2
Используйте PercentRelativeLayout или PercentFrameLayout из Процентная библиотека Supoort
<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>
Ответ 3
Для 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));
Ответ 4
Взгляните на это:
http://developer.android.com/reference/android/util/DisplayMetrics.html
Вы можете получить представление о экране, и это простая математика, чтобы вычислить 68 процентов экрана.