Как программно изменить стиль текстовой кнопки компонента материала в Android? - PullRequest
1 голос
/ 22 февраля 2020

У меня есть кнопка с текстовым материалом <Button android:id="@+id/button" style="@style/Widget.MaterialComponents.Button.TextButton"/>, цвет которой я хочу изменить во время выполнения. Поэтому я установил цвет текста, используя button.setTextColor(Color.rgb(10, 10, 10)). К сожалению, это не меняет фон рисования, поэтому, когда я нажимаю на кнопку, цвет пульсации остается неизменным. Я предполагаю, что мне нужно изменить фон с чем-то вроде attackButton.background = getDrawable(R.drawable.ripple), но я не уверен, как заполнить ripple.xml. Имеет ли смысл этот метод для изменения цвета и пульсации текста кнопки? Если да, то как мне написать ripple.xml?

Ответы [ 2 ]

1 голос
/ 24 февраля 2020

Чтобы изменить цвета в MaterialButton, вы можете использовать:

  • button.setBackgroundTintList, чтобы изменить оттенок фона. Вы должны использовать селектор.
  • button.setRippleColor, чтобы изменить цвет пульсации. Также в этом случае вы должны использовать селектор (см. Ниже)
  • button.setTextColor, чтобы изменить цвет текста. Также в этом случае вы должны использовать селектор.

Это селектор по умолчанию, используемый в цвете ряби:

<selector xmlns:android="http://schemas.android.com/apk/res/android">

  <item android:alpha="@dimen/mtrl_low_ripple_pressed_alpha" android:color="?attr/colorPrimary" android:state_pressed="true"/>
  <item android:alpha="@dimen/mtrl_low_ripple_focused_alpha" android:color="?attr/colorPrimary" android:state_focused="true" android:state_hovered="true"/>
  <item android:alpha="@dimen/mtrl_low_ripple_focused_alpha" android:color="?attr/colorPrimary" android:state_focused="true"/>
  <item android:alpha="@dimen/mtrl_low_ripple_hovered_alpha" android:color="?attr/colorPrimary" android:state_hovered="true"/>
  <item android:alpha="@dimen/mtrl_low_ripple_default_alpha" android:color="?attr/colorPrimary"/>

</selector>
0 голосов
/ 22 февраля 2020

Вы пробовали RippleDrawable ? Затем просто Button.setBackground () для другого ресурса или даже селектор xml. Если вам не хватит пульсации с селектором, настройку самой маски пульсации можно выполнить

myRipple. xml

<ripple android:color="#ffff0000">
   <item android:id="@android:id/myRippleMask"
         android:drawable="@android:color/white" />
</ripple>

программно:

LayerDrawable myRipple = ContextCompat.getDrawable(context, drawable.myRipple.xml);
myRipple.setDrawableByLayerId(R.id.myRippleMask,Color.rgb(10, 10, 10));

с каждой маской разного цвета

...