Подтвердить что ты не робот

Кнопка Borderless на Pre-Lollipop с библиотекой поддержки

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

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

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

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

введите описание изображения здесь

Не нормальное поведение на Pre-Lollipop (Цвет желания серый, как показано выше, но не): Кнопка без полей в нормальном состоянии и сфокусированное состояние на Pre-lollipop введите описание изображения здесь

Тема

<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 без создания отдельных Drawables.

4b9b3361

Ответ 1

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

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

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

Вы можете сделать Borderless Button следующим образом:

<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 (и выше).

Ответ 2

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

Ответ 3

Вы используете встроенный андроид стиль "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);

Ответ 4

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

<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