Есть ли у Android какие-нибудь стойки для айфонов и пружин? - PullRequest
5 голосов
/ 08 марта 2011

Я продолжаю пытаться найти какой-то эквивалент распорок и пружин iPhone в Android.И не говорите гравитацию: -)

Хорошо, говорите гравитацию, но затем объясните, как я могу предотвратить сдвиг представлений с экрана в LinearLayout или RelativeLayout.Или покажите мне какой-нибудь другой макет, который позволяет заполнять экран, не мешая при этом.

В iPhone Interface Builder я просто установил бы пружины соответствующим образом, чтобы каждый вид занимал столько места, сколько доступно, нобольше не надо.Это позволяет макетам iPhone хорошо справляться с изменениями ориентации.

В Android основным подходом, о котором я читал, кажется, является создание нескольких папок макетов, таких как layout-port и layout-land, а затем репликация файлов макетов XML между ними,но это кажется очень подверженным ошибкам, и все же единственный способ, которым я могу остановить получение большого пользовательского представления от нажатия других кнопок на экране, - это точно установить его layout_height для определенного размера экрана и ориентации.Учитывая, что на рынок выходит множество дисплеев Android, создается впечатление, что это будет все более и более мучительным.

Вот пример:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical" android:layout_width="fill_parent"
    android:layout_height="fill_parent">
    <TextView android:layout_width="fill_parent"
        android:layout_height="wrap_content" android:text="@string/hello" />
    <ImageView android:id="@+id/imageView1" android:src="@drawable/icon"
        android:layout_height="320dip" android:layout_width="fill_parent"></ImageView>
    <SeekBar android:layout_height="wrap_content" android:id="@+id/seekBar1"
        android:layout_width="fill_parent"></SeekBar>
</LinearLayout>

- это всего лишь виджеты по умолчанию.Я не хочу, чтобы вы нашли какой-то другой способ установить высоту ImageView так, чтобы он занимал как можно большую часть экрана, не выбивая панель поиска из поля зрения.Попробуйте установить для Android ImageView: layout_height значение fill_parent, чтобы понять, что я имею в виду.

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

Единственное решение, которое я могу придумать (но еще не попробовал), - это сделать что-то в коде, чтобы обнаружитьразмер экрана и другие виджеты, но я не хочу идти по этому пути, потому что, похоже, должно быть простое решение для разметки XML.

Ответы [ 2 ]

1 голос
/ 14 июня 2012

Попробуйте использовать android:layout_weight при установке android:layout_width или android:layout_height на 0dp (в зависимости от значения android:orientation родительского представления).

В Android нет лучшего эквивалента тому, что вы хотите сделать ...

0 голосов
/ 15 июля 2014

У меня была похожая проблема (гораздо больше из них, если честно), поэтому я разработал SpringLayout: https://github.com/sulewicz/springlayout. Если я правильно понял, то, думаю, мне удалось добиться того, что вы хотели (изображение занимает стольковозможно):

<?xml version="1.0" encoding="utf-8"?>
<org.coderoller.springlayout.SpringLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="@android:color/white" >

    <TextView
        android:id="@+id/A"
        android:layout_width="match_parent"
        android:layout_height="32dp"
        app:layout_alignParentTop="true"
        android:text="Test" />

    <ImageView
        android:id="@+id/imageView1"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        app:layout_below="@id/A"
        app:layout_above="@+id/seekBar1"
        android:src="@drawable/ic_launcher" />

    <SeekBar
        android:id="@id/seekBar1"
        android:layout_width="match_parent"
        android:layout_height="32dp"
        app:layout_alignParentBottom="true" />

</org.coderoller.springlayout.SpringLayout>

Вот скриншот

...