react-native-navigation的迁移库

ButtonOptionsPresenter.java 2.7KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586
  1. package com.reactnativenavigation.utils;
  2. import android.graphics.Color;
  3. import android.graphics.PorterDuff;
  4. import android.graphics.PorterDuffColorFilter;
  5. import android.graphics.Typeface;
  6. import android.graphics.drawable.Drawable;
  7. import android.support.annotation.NonNull;
  8. import android.support.v7.widget.Toolbar;
  9. import android.text.Spannable;
  10. import android.text.SpannableString;
  11. import android.text.style.AbsoluteSizeSpan;
  12. import android.view.MenuItem;
  13. import android.view.View;
  14. import android.widget.TextView;
  15. import com.reactnativenavigation.parse.params.Button;
  16. import java.util.ArrayList;
  17. public class ButtonOptionsPresenter {
  18. private final Toolbar toolbar;
  19. private Button button;
  20. public ButtonOptionsPresenter(Toolbar toolbar, Button button) {
  21. this.toolbar = toolbar;
  22. this.button = button;
  23. }
  24. public void tint(Drawable drawable, int tint) {
  25. drawable.setColorFilter(new PorterDuffColorFilter(tint, PorterDuff.Mode.SRC_IN));
  26. }
  27. public void setTypeFace(Typeface typeface) {
  28. UiUtils.runOnPreDrawOnce(toolbar, () -> {
  29. ArrayList<View> buttons = findActualTextViewInMenu();
  30. for (View btn : buttons) {
  31. ((TextView) btn).setTypeface(typeface);
  32. }
  33. });
  34. }
  35. public void setFontSize(MenuItem menuItem) {
  36. SpannableString spanString = new SpannableString(button.text.get());
  37. if (this.button.fontSize.hasValue())
  38. spanString.setSpan(
  39. new AbsoluteSizeSpan(button.fontSize.get(), true),
  40. 0,
  41. button.text.get().length(),
  42. Spannable.SPAN_INCLUSIVE_INCLUSIVE
  43. );
  44. menuItem.setTitleCondensed(spanString);
  45. }
  46. public void setTextColor() {
  47. UiUtils.runOnPreDrawOnce(toolbar, () -> {
  48. ArrayList<View> buttons = findActualTextViewInMenu();
  49. for (View btn : buttons) {
  50. if (button.enabled.isTrueOrUndefined() && button.color.hasValue()) {
  51. setEnabledColor((TextView) btn);
  52. } else if (button.enabled.isFalse()) {
  53. setDisabledColor((TextView) btn, button.disabledColor.get(Color.LTGRAY));
  54. }
  55. }
  56. });
  57. }
  58. public void setDisabledColor(TextView btn, int color) {
  59. btn.setTextColor(color);
  60. }
  61. public void setEnabledColor(TextView btn) {
  62. btn.setTextColor(button.color.get());
  63. }
  64. @NonNull
  65. private ArrayList<View> findActualTextViewInMenu() {
  66. ArrayList<View> outViews = new ArrayList<>();
  67. if (button.text.hasValue()) {
  68. toolbar.findViewsWithText(outViews, button.text.get(), View.FIND_VIEWS_WITH_TEXT);
  69. }
  70. return outViews;
  71. }
  72. }