Проблема изменения размера Android с LinearLayout и мозаичным фоном - PullRequest
0 голосов
/ 12 июля 2011

У меня есть следующий макет (это сложно, но я должен все это поставить);У меня есть 3 LinearLayouts, горизонтальные с мозаичным png в качестве фона: 2 должны быть размещены в верхней части экрана, а последние в нижней части экрана.Между ними я должен поместить галерею виджетов.

Я хочу, чтобы 3 LinearLayouts принимали высоту png, используемого для их фона (это нормально для первых 2, но не для последнего, размер которого был изменен) иГалерея занимает оставшийся размер экрана.

Я не могу понять, почему изменен размер третьего LinearLayout.

Заранее большое спасибо за вашу помощь.Я поставил 2 кода после кода, чтобы понять ситуацию.

<?xml version="1.0" encoding="utf-8"?>

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

<!-- THE FOLLOWING LAYOUT SHALL TAKE THE HEIGHT OF THE IMAGE USED FOR BACKGROUND
 => IT IS OK -->
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content" 
        android:orientation="horizontal"
        android:background="@drawable/bg_title" 
        android:gravity="center_horizontal">

        <TextView xmlns:android="http://schemas.android.com/apk/res/android"
            android:id="@+id/title"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:text="@string/home_title"
            android:textColor="@color/white"
            android:gravity="center"
            android:textSize="20sp"/>
</LinearLayout>

<!-- THE FOLLOWING LAYOUT SHALL TAKE THE HEIGHT OF THE IMAGE USED FOR BACKGROUND
=> IT IS OK -->
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content" 
    android:orientation="horizontal"
    android:background="@drawable/bg_channel_title">
    <FrameLayout 
        android:layout_width="fill_parent" 
        android:layout_height="wrap_content" 
        android:id="@+id/channels_frameLayout">

        <HorizontalScrollView 
            android:id="@+id/channel_scrollView" 
            android:layout_width="wrap_content" 
            android:layout_height="wrap_content">

            <LinearLayout 
                android:id="@+id/channel_layout" 
                android:layout_width="match_parent" 
                android:layout_height="match_parent" 
                android:orientation="horizontal">

            </LinearLayout>
        </HorizontalScrollView>

    </FrameLayout>
</LinearLayout>

<!-- THE FOLLOWING LAYOUT SHALL TAKE THE REMAINING HEIGHT OF THE SCREEN -->
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="0dp"
    android:layout_weight="1"
    android:orientation="vertical"
    android:id="@+id/description_frameLayout">
    <Gallery xmlns:android="http://schemas.android.com/apk/res/android" 
        android:id="@+id/gallery"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:gravity="center" 
    />
</LinearLayout>

<!-- THE FOLLOWING LAYOUT SHALL BE PLACED ON THE BOTTOM OF THE SCREEN 
AND TAKE THE HEIGHT OF THE IMAGE USED FOR BACKGROUND
=> IT IS NOK, THE LAYOUT IS RESIZED IN HEIGHT -->
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content" 
    android:orientation="horizontal"
    android:background="@drawable/bg_description"
    android:id="@+id/description_layout"
    android:gravity="bottom">

    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="0dp"
        android:layout_weight="1"
        android:layout_height="wrap_content" 
        android:orientation="vertical"
        android:gravity="left"
        android:id="@+id/texts">

        <TextView xmlns:android="http://schemas.android.com/apk/res/android"
            android:id="@+id/title"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:textColor="@color/orange"/>

        <TextView xmlns:android="http://schemas.android.com/apk/res/android"
            android:id="@+id/content"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:textColor="@color/white"/>

    </LinearLayout>

    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" 
        android:orientation="vertical"
        android:gravity="right"
        android:id="@+id/btns">

        <ImageButton
            android:id="@+id/info" 
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:background="@null"
            android:src="@drawable/btn_info" />

        <ImageButton
            android:id="@+id/favorite" 
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:background="@null" 
            android:src="@drawable/btn_favorite" />

    </LinearLayout>
</LinearLayout> 

Good Layout that should be obtained

Bad layout that is currently obtained

Ответы [ 3 ]

0 голосов
/ 13 июля 2011

Хорошо, я пытаюсь уменьшить высоту рисования; оно работает. Я не могу понять почему. Первое изображение выше из Photoshop. Я только что создал рабочее пространство с размерами моего телефона и встроил в него свои компоненты, стараясь соблюдать некоторые пропорции. Затем я просто подобрал свои компоненты без изменения их размеров и использовал их в качестве отрисовки в моем приложении. Я ожидал, что соотношение сторон будет соблюдаться и на экране устройства.

На самом деле это соблюдается для двух первых элементов рисования (в верхней части), но для элемента в нижней части я должен уменьшить его ... Если я это сделаю, он будет работать в устройстве, но в Photoshop его не будет актуальным.

И что? Разве нельзя издеваться над нашими приложениями и использовать графические компоненты такими, какими они были созданы? Для меня это странно.

0 голосов
/ 13 июля 2011

Я, наконец, решил пойти дальше и найти другой способ решения моей проблемы.

Теперь все сделано с конфигурацией xml.

Это макет, содержащий кнопки в нижней частиэкрана:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content" 
    android:orientation="horizontal"
    android:background="@drawable/bg_description"
    android:id="@+id/description_layout"
    >

А вот и bg_description.xml:

<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
<item>
    <shape android:shape="rectangle">
        <solid android:color="#919191" />
    </shape>
</item>
<item android:top="1dp">
    <shape xmlns:android="http://schemas.android.com/apk/res/android"
        android:shape="rectangle">
            <gradient
                android:endColor="#525252"
                android:startColor="#1B1B1B"
                android:angle="90"/>
    </shape>
</item>

Теперь все идеально.Фон хорошо отображается, рендеринг лучше, чем с png, и проблем с изменением размера больше нет.

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

0 голосов
/ 12 июля 2011

Куда бы вы ни положили "android: layout_height =" 0dp "" и у вас есть layout_weight = "1" попробуйте с: "Андроид: layout_height =" wrap_content ""

Более того, вам наверняка не хватает android: layout_weight = "1" в макете, который содержит кнопки изображения в конце файла.

Если ваш последний макет такой большой, это потому, что ваше @ drawable / bg_description определенно немного велико, поэтому, если вы не хотите добавлять android: layout_weight = "1" в макет кнопки изображения, просто уменьшите Высота отрисовки.

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