как закруглить углы кнопки, но сохранить ее внешний вид по умолчанию

У меня есть кнопка, которая выглядит в соответствии с Theme.Holo.Light. Раньше я закруглял его углы, устанавливая его фон следующим образом:

   <?xml version="1.0" encoding="utf-8"?>
   <shape xmlns:android="http://schemas.android.com/apk/res/android"
   android:padding="10dp"
   android:shape="rectangle" >

   <corners
    android:bottomLeftRadius="15dp"
    android:bottomRightRadius="15dp"
    android:topLeftRadius="15dp"
    android:topRightRadius="15dp" />
   </shape>

Теперь Button становится прозрачным. Я пытался создать селектор, добавить атрибут solid и использовать 2 таких drawables для нормального и нажатого состояний, но не смог скопировать поведение Button по умолчанию темы Holo.Light. Итак, я ищу 2 возможных решения: либо как-то закруглить углы кнопки, не затрагивая ее стиль по умолчанию, либо найти XML, определяющий упомянутый стиль, чтобы я мог его скопировать. Я просматривал SDK и использовал эту ссылку: https://android.googlesource.com/platform/frameworks/base/+/refs/heads/master/core/res/res/values/themes.xml, но не удалось.

Есть идеи, как сделать закругленные углы Button, НО оставить все остальные атрибуты внешнего вида по умолчанию?


person Droidman    schedule 16.02.2014    source источник
comment
Возможно, использование каких-то 9 патчей поможет.   -  person Phantômaxx    schedule 16.02.2014
comment
@ArtooDetoo, почему? Мне не нужны никакие пользовательские фоны, мне нужно только закруглить углы кнопки и оставить все остальные параметры по умолчанию.   -  person Droidman    schedule 16.02.2014
comment
По той же причине, по которой вы пытались использовать рисование xml: чтобы скруглить углы.   -  person Phantômaxx    schedule 16.02.2014
comment
@ArtooDetoo Я могу скруглить углы, но тогда фон по умолчанию становится много. Использование патча 9 приведет к точно такому же результату.   -  person Droidman    schedule 16.02.2014
comment
НЕТ. Патч 9 не обязательно должен быть прозрачным. Исходный стиль (не тема, ошибочно указанная в вашем вопросе) использует 9 исправлений. Если вы прочитали ЭТОТ документ и найдите btn_default (начиная со строки 1552), вы узнаете, как создать стиль, который переопределяет стандартные чертежи (9 патчей). Затем нужно просто скопировать исходные изображения в папки вашего приложения и закруглить их углы.   -  person Phantômaxx    schedule 16.02.2014
comment
Начните со строки 1995 (вместо 1552), чтобы увидеть облегченный вариант.   -  person Phantômaxx    schedule 16.02.2014
comment
а, хорошо, я нашел исходный код btn_default_holo_light.xml на GitHub, но мне нужно скопировать его в свой проект (чтобы я мог его изменить), так как этот ресурс не является общедоступным, и я не могу ссылаться на него. Любая идея, где внутри SDK я могу найти это?   -  person Droidman    schedule 16.02.2014
comment
проверьте это решение stackoverflow.com/a/18879660/2337837   -  person Zied R.    schedule 16.02.2014
comment
Если вы используете Windows, он находится здесь: C:\Your_Path_To_Eclipse\sdk\platforms\android-XY\data\res\drawable, где XY — от 11 до 19 (в зависимости от вашей версии minSdkVersion)   -  person Phantômaxx    schedule 16.02.2014
comment
спасибо, я нашел это, вы можете опубликовать свои предложения в качестве ответа   -  person Droidman    schedule 16.02.2014
comment
Ага, готово! Я попытался сделать его поток немного лучше.   -  person Phantômaxx    schedule 16.02.2014


Ответы (1)


В исходном стиле используется 9 исправлений.
Если вы читали ЭТОТ документ и найдите btn_default (начиная со строки 1995), вы узнаете, как создать стиль, который переопределяет стандартные чертежи (9 исправлений).
Затем все просто скопируйте исходные изображения в папки вашего приложения и закруглите их углы.

Они будут указаны в выводимом объекте StateList с именем btn_default_holo_light.xml.

Если вы используете Windows, он находится здесь: C:\Your_Path_To_Eclipse\sdk\platforms\android-XY\data\res\drawable, где XY — от 11 до 19 (в зависимости от вашей версии minSdkVersion).

И 9 патчей здесь: C:\Your_Path_To_Eclipse\sdk\platforms\android-XY\data\res\drawable-RES, где XY — от 11 до 19 (в зависимости от вашего minSdkVersion), а RES — это определенное разрешение dpi (mdpi, для справки)

person Phantômaxx    schedule 16.02.2014