it-swarm.com.ru

Кнопка "Без полей" на пред-леденце с поддержкой библиотеки

Я делаю плоскую кнопку без полей, используя библиотеку поддержки (23.0.1). На Lollipop работает нормально. Тем не менее, на предварительном леденце, когда я нажимаю кнопку, его цвет меняется на цвет colorButtonNormal, как будто это обычная кнопка. 

Я не думаю, что это нормальное поведение, и сфокусированный цвет должен быть серым, как на Lollipop.

Вот скриншот из Lollipop и Pre-Lollipop.

Первое нормальное поведение на Lollipop: Кнопка без полей в нормальном и сфокусированном состоянии на Lollipop

 enter image description here

Нестандартное поведение в Pre-Lollipop (Desire имеет серый цвет, как указано выше, но это не): Кнопка без полей в нормальном состоянии и в фокусированном состоянии в Pre-Lollipop  enter image description here

Тема 

<style name="AppTheme.Base" parent="Theme.AppCompat.Light.NoActionBar">
//other stuff 
        <item name="colorButtonNormal">@color/orangeColor</item>
        <item name="buttonBarButtonStyle">@style/BorderlessButtonStyle</item>
</style>

<style name="BorderlessButtonStyle" parent="Widget.AppCompat.Button.Borderless">
        <item name="Android:textColor">@color/blueTextColor</item>
</style>

А теперь кнопка в макете:

<Button
            Android:id="@+id/btnForgotPassword"
            Android:layout_width="wrap_content"
            Android:layout_height="wrap_content"
            Android:text="@string/forgot_your_password"
            style="?attr/buttonBarButtonStyle"
            />

Любой способ заставить его писать, используя AppCompat Theme и стили без создания отдельных Drawables.

15
Sharj

Кнопка «Без полей» работает в версиях Post и Pre Lollipop с библиотекой поддержки, но между их цветом onPressed есть небольшая разница. 

Pre-Lollipop: по умолчанию цвет onPressed такой же, как и цвет кнопки по умолчанию, установленный с помощью colorButtonNormal.

Lollipop: по умолчанию onPressed цвет светло-серый, что идеально.

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

<Button  
    Android:layout_width="match_parent"
    Android:layout_height="wrap_content"
    Android:text="Name"
    style="@style/Widget.AppCompat.Button.Borderless"/>

Теперь, если вы хотите, чтобы во всех версиях был одинаковый цвет onPressed, вы можете установить colorControlHighlight в новой теме и установить эту тему на Button.

<Button  
        Android:layout_width="match_parent"
        Android:layout_height="wrap_content"
        Android:text="Name"
        Android:theme="@style/BorderlessButton"
        style="@style/Widget.AppCompat.Button.Borderless"/>

И тема в вашем стиле:

<style name="BorderlessButton" parent="Theme.AppCompat.Light">
      <item name="colorControlHighlight">YOUR COLOR</item>
</style>

Обновлено : Вы можете использовать атрибут Android:theme для View начиная с Android 5.0 Lollipop и AppCompat v22.1.0 (и выше).

24
Sharj

Добавление style="?attr/borderlessButtonStyle" к Button работало нормально для меня.

2
arekolek

Вы используете реализованный в Android стиль "buttonBarButtonStyle", так как вы вызываете его через ?atr - используйте вместо него style="@style/BorderlessButtonStyle.

Правка: Оставьте свой xml как есть, но вы можете изменить его на желаемое поведение следующим образом:

AppCompatButton button = (AppCompatButton) findViewById(R.id.btnForgotPassword);

ColorStateList colorStateList = new ColorStateList(new int[][] {{0}}, new int[] {0xFF969696});  
    //969696 is your wanted grey color, just change it
button.setSupportBackgroundTintList(colorStateList);
0
yennsarah

почему вы волнуетесь с некоторыми вещами, просто пойти с этим и быть свободным

<Button
   Android:id="@+id/btnForgotPassword"
   Android:layout_width="wrap_content"
   Android:layout_height="wrap_content"
   Android:text="@string/forgot_your_password"
   Android:background="@drawable/abc_btn_borderless_material"
/>

и теперь небрежно о API вещи

0
Elltz