Пользовательские кнопки в Android: Как получить границу/край/кадр, когда я считал фон из xml?

Используя Формы Android в xml я определил градиент, который я использую в качестве фона для кнопки.

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

Форма определяется следующим образом:



    
    
    

Я ожидал бы, что граница будет установлена в xml. Почему не делает "штриховой" фиксации это? Штрих, кажется, ничего не делает. Я проверил спецификацию Разработчика Android, но не мог найти ответ там: http://developer.android.com/guide/topics/resources/drawable-resource.html

Я также просмотрел все свойства Кнопки Android, но как ожидалось нет такого параметра, вероятно, так как она встроена в нормальную кнопку Android. Btw, я проверил свойства ImageButton также.

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

Спасибо! Anna

11
задан Steve Haley 26 May 2010 в 11:25
поделиться

1 ответ

У меня была такая проблема некоторое время назад. Хотя я не совсем помню, почему я принял то или иное решение, способ, которым я ее решил, заключался в использовании списка слоев фигур. Это позволяет накладывать одну форму на другую. Например, следующий XML создает форму со сплошным черным контуром шириной 2px, с градиентом "серый - белый - серый" через середину:

<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
    <item>
        <shape>
            <padding android:left="1dp"
                android:top="1dp"
                android:right="1dp"
                android:bottom="1dp"/>
            <solid android:color="#FF000000"/>
            <corners android:radius="3dp"/>
        </shape>
    </item>

    <item>
        <shape>
            <padding android:left="2dp"
                android:top="2dp"
                android:right="2dp"
                android:bottom="2dp"/>
            <gradient android:startColor="#FFB0B0B0"
                android:centerColor="#FFFFFFFF"
                android:endColor="#FFB0B0B0"
                android:angle="315"/>
        </shape>
    </item>
</layer-list>

Если вы хотите иметь возможность динамически изменять этот цвет во время выполнения, то все становится намного сложнее. Опять же, детали того, почему я должен был сделать все определенным образом, туманны, но в итоге мне пришлось создать пользовательский класс представления, который содержал пользовательский ShapeDrawable. Я начал с изучения примеров из приложения ApiDemos, которое поставляется вместе с SDK - это очень хороший ресурс.

EDIT: Другая причина, по которой ваш штрих может не отображаться, заключается в том, что вы забыли android: перед битом color="....".

19
ответ дан 3 December 2019 в 03:04
поделиться
Другие вопросы по тегам:

Похожие вопросы: