Макет Android сломан с 9-патч фона - PullRequest
36 голосов
/ 11 октября 2010

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

Предыдущий макет выглядит так:

Исходный макет http://onik.org/android/layoutOk.png.

При изменении на 9-патч:

9-патч-изображение http://onik.org/android/layoutError.png.

Файл XML не изменился, только PNGфайлы были изменены.

<?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"
    android:background="@drawable/bg">

    <TextView 
        android:text="@string/title"
        android:id="@+id/login_title"
        android:layout_width="fill_parent"
        android:layout_height="40px"
        android:textSize="30px">
    </TextView>

    <View
        android:id="@+id/login_underline"
        android:layout_width="wrap_content"
        android:layout_height="2px"
        android:background="#aaaaaa">
    </View>

    <TableLayout
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:layout_weight="1"
        android:stretchColumns="1"
        android:gravity="center"
        android:paddingLeft="10px"
        android:paddingRight="10px">

        <TableRow>
            <TextView
                android:id="@+id/login_usernameLabel"
                android:text="@string/login_usernameLabel"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:paddingRight="5px">
            </TextView>

            <EditText
                android:text=""
                android:id="@+id/login_username"
                android:layout_width="fill_parent"
                android:layout_height="wrap_content"
                android:inputType="textEmailAddress"
                android:lines="1"
                android:nextFocusDown="@+id/login_password">
            </EditText>

        </TableRow>

        <TableRow>

            <TextView
                android:id="@+id/login_passwordLabel"
                android:text="@string/login_passwordLabel"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content">
            </TextView>

            <EditText
                android:text=""
                android:id="@+id/login_password"
                android:layout_width="fill_parent"
                android:layout_height="wrap_content"
                android:nextFocusDown="@+id/login_login"
                android:inputType="textPassword">
            </EditText>

        </TableRow>

        <TableRow android:gravity="right">

            <Button
                android:text="@string/login_login"
                android:id="@+id/login_login"
                android:layout_width="fill_parent"
                android:layout_height="wrap_content">
            </Button>   


     </TableRow>

        <TableRow>

            <CheckBox
                android:id="@+id/login_remember"
                android:text="@string/login_remember"
                android:layout_span="2">
            </CheckBox>

        </TableRow>

 </TableLayout>


</LinearLayout>

Есть идеи?Или другие решения для получения немасштабированного центрированного фона?

Ответы [ 3 ]

100 голосов
/ 26 ноября 2010

это значит просто добавить атрибут

android:padding="0dip"

к тегу макета

<?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"
    android:background="@drawable/bg"
    android:padding="0dip">

Обновление:

Документы Android содержит точное объяснение:

"Вы также можете определить необязательный нарисованный участок изображения (фактически, линии отступа), нарисовав линию на правой и нижней линиях. Если объект View устанавливает NinePatch в качестве фона, а затем указываеттекст представления, он растянется так, что весь текст помещается только в области, обозначенной правой и нижней строками (если включены). Если строки отступа не включены, Android использует левую и верхнюю строки для определенияэта область рисования."

Чтобы игнорировать это поведение по умолчанию, нам нужно явно задать атрибут padding в макете XML

3 голосов
/ 11 октября 2010

Решил проблему, моя область заполнения на 9-патче была неподходящей. Когда я нарисовал область отступа как обратную область растяжения, изображение начало работать. Я просто подумал, что это было бы автоматически, если бы не было никакой области заполнения:)

1 голос
/ 24 ноября 2014

Используйте 9-патч для установки строки содержимого (справа и снизу)!

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