Возникла проблема с обрезкой / смещением макета, на мой взгляд - PullRequest
0 голосов
/ 13 декабря 2010

У меня проблема с отображением моего макета в портретном / ландшафтном режиме.По сути, иерархия моего макета выглядит следующим образом: Main (представление рабочей области) -> TextView + Listview (w / BaseAdapter) -> Listview Item.

Моя проблема в том, что я начинаю в портретном режимемои предметы отображаются правильно, как они должны.Но затем, если я поверну устройство, произойдет смещение всего моего макета примерно на половину экрана (т. Е. Когда я переключаюсь, примерно половина левой части просмотра полностью черная, и он считает, что мой истинный «левый край»в середине экрана - я вижу элементы, которые должны быть выровнены по центру слева).С другой стороны, если я начну в ландшафтном режиме и переключусь в портретный режим, половина правой части экрана будет полностью черной, а «правый край» посередине, и я вижу, что мои самые правые элементы заканчиваются там.

Вот макет, с которым я работаю ... Сначала мой View в рабочей области (Listview использует BaseAdapter):

<?xml version="1.0" encoding="utf-8"?>
<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:id="@+id/tvMainChannel"
        android:layout_width="fill_parent" 
        android:layout_height="wrap_content"
        android:gravity="center"
        android:text="Disconnected"
        android:textColor="#FFFFFF"
        android:singleLine="true"/>

    <ListView android:id="@android:id/list"
        android:layout_width="fill_parent" 
        android:layout_height="wrap_content"/>
</LinearLayout>

А вот мои отдельные элементы списка, которые раздуваютсяв приведенном выше ListView (в горизонтальном расположении каждый элемент должен отображаться слева направо: изображение, текст, изображение):

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_height="wrap_content"
    android:layout_width="fill_parent"
    android:orientation="horizontal">

    <ImageView android:id="@+id/images"
        android:layout_height="30dp"
        android:layout_width="wrap_content"
        android:paddingLeft="5px"
        android:paddingRight="5px"
        android:layout_alignParentLeft="true"/>

    <ImageView android:id="@+id/images_ping"
        android:layout_height="30dp"
        android:layout_width="wrap_content"
        android:paddingLeft="5px"
        android:paddingRight="5px"
        android:layout_alignParentRight="true"/>

    <TextView android:id="@+id/text"
        android:layout_height="30dp"
        android:layout_width="wrap_content"
        android:gravity="center_vertical"
        android:text="Username"
        android:textColor="#FFFFFF"
        android:layout_toRightOf="@+id/images"/>

</RelativeLayout>

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

Любое понимание очень ценится.

Спасибо!

РЕДАКТИРОВАТЬ: Для небольшого уточнения, это мой файл main.xml, который использует рабочую область:

<?xml version="1.0" encoding="utf-8"?>
<com.test.MultiView xmlns:app="http://schemas.android.com/apk/res/com.test"
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/mvMain"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    app:default_screen="0">

    <include android:id="@+id/main_rtb" layout="@layout/main_rtb" />
    <include android:id="@+id/main_listview" layout="@layout/main_listview" />
</com.test.MultiView>

1 Ответ

1 голос
/ 13 декабря 2010

Обновление

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

Оригинальный ответ (совершенно неверный, но не совсем бесполезный)

Проблема должна быть в макете вашего предмета. Предложите использовать LinearLayout (атрибут «direction» недопустим для RelativeLayout), например:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_height="wrap_content"
    android:layout_width="fill_parent"
    android:orientation="horizontal">

    <ImageView android:id="@+id/images"
        android:layout_height="30dp"
        android:layout_width="wrap_content"
        android:paddingLeft="5px"
        android:paddingRight="5px"
        />


    <TextView android:id="@+id/text"
        android:layout_height="30dp"
        android:layout_width="wrap_content"
        android:layout_weight="1"
        android:gravity="center_vertical"
        android:text="Username"
        android:textColor="#FFFFFF"
        />

    <ImageView android:id="@+id/images_ping"
        android:layout_height="30dp"
        android:layout_width="wrap_content"
        android:paddingLeft="5px"
        android:paddingRight="5px"
        />

</LinearLayout>

Обратите внимание на использование android:layout_weight и удаление RelativeLayout -специфических атрибутов android:layout_alignParentLeft и android:layout_alignParentRight.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...