Android — 9-исправление для кнопки

Я создал кнопку с изображением 9patch в качестве фона. В изображении 9patch я использовал нижнюю и правую строки, чтобы указать область содержимого/отступы, чтобы расположить текст на кнопке. Это хорошо работает в TextView, но на кнопке строки содержимого, похоже, не влияют на положение текста. Установка "paddingTop"/"paddingBottom" также не имеет никакого эффекта - только "padding" имеет какой-либо эффект.

Это мой макет XML:

<Button 
            android:layout_width="450dp"
            android:layout_height="198dp"
            android:text="Some text here"
            android:gravity="center"
            android:background="@drawable/my_button"/>

Есть ли способ установить отступ? Может быть, я мог бы использовать другой вид вместо кнопки? Например, я мог бы попытаться просто использовать TextView и сделать его интерактивным, но я не уверен, какие другие побочные эффекты это будет иметь.


person Ralf    schedule 04.04.2012    source источник


Ответы (2)


Явная установка android:padding="@null" решила мою проблему.

Проблема, похоже, заключалась в том, что кнопка (или один из стилей в теме, которую я использую) устанавливает отступ, который переопределяет все остальные отступы в кнопке - отступы в фоновом режиме, а также paddingTop, paddingLeft и т. д.

Мой макет кнопки теперь определяется следующим образом:

<Button 
        android:layout_width="450dp"
        android:layout_height="198dp"
        android:text="Some text here"
        android:gravity="center"
        android:padding="@null"
        android:background="@drawable/my_button"/>

Моя IDE (IntelliJ IDEA 11.1) обнаружила @null как ошибку, хотя она скомпилировалась. Установка его на -1px также сработала.

person Ralf    schedule 04.04.2012
comment
Касательно связанных, иногда использование версий IDEA с ранним доступом устраняет эти ошибки синтаксического анализа: confluence.jetbrains. сеть/дисплей/IDEADEV/IDEA+11.1+EAP - person sole; 04.04.2012
comment
Я подал отчет об ошибке - кажется, это будет исправлено в 11.2 - person Ralf; 04.04.2012

Если вы используете изображение с 9 патчами в качестве фона, как отступы, так и растянутые области определяются в фоновом режиме.

Это довольно наглядно, если вы используете инструмент draw9patch: отступ определяется (косвенно) областью содержимого (линии справа и внизу): http://developer.android.com/guide/developing/tools/draw9patch.html

person sole    schedule 04.04.2012
comment
В инструменте с 9 патчами он показывает область содержимого точно так, как я этого хочу, и это при использовании в TextView. Однако при использовании в качестве фона кнопки область содержимого игнорируется. - person Ralf; 04.04.2012