MaterialDialogAdapter.java 4.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122
  1. package com.afollestad.materialdialogs;
  2. import android.annotation.SuppressLint;
  3. import android.annotation.TargetApi;
  4. import android.content.res.Configuration;
  5. import android.os.Build;
  6. import android.view.Gravity;
  7. import android.view.View;
  8. import android.view.ViewGroup;
  9. import android.widget.ArrayAdapter;
  10. import android.widget.CompoundButton;
  11. import android.widget.LinearLayout;
  12. import android.widget.TextView;
  13. import com.afollestad.materialdialogs.internal.MDCheckBox;
  14. import com.afollestad.materialdialogs.internal.MDRadioButton;
  15. class MaterialDialogAdapter extends ArrayAdapter<CharSequence> {
  16. private final MaterialDialog dialog;
  17. private final GravityEnum itemGravity;
  18. public MaterialDialogAdapter(MaterialDialog dialog, int resource, int textViewResourceId, CharSequence[] objects) {
  19. super(dialog.mBuilder.context, resource, textViewResourceId, objects);
  20. this.dialog = dialog;
  21. this.itemGravity = dialog.mBuilder.itemsGravity;
  22. }
  23. @Override
  24. public boolean hasStableIds() {
  25. return true;
  26. }
  27. @Override
  28. public long getItemId(int position) {
  29. return position;
  30. }
  31. @SuppressLint("WrongViewCast")
  32. @Override
  33. public View getView(final int index, View convertView, ViewGroup parent) {
  34. final View view = super.getView(index, convertView, parent);
  35. TextView tv = (TextView) view.findViewById(R.id.title);
  36. switch (dialog.listType) {
  37. case SINGLE: {
  38. @SuppressLint("CutPasteId")
  39. MDRadioButton radio = (MDRadioButton) view.findViewById(R.id.control);
  40. boolean selected = dialog.mBuilder.selectedIndex == index;
  41. radio.setColorFilter(dialog.mBuilder.widgetColor);
  42. radio.setChecked(selected);
  43. break;
  44. }
  45. case MULTI: {
  46. @SuppressLint("CutPasteId")
  47. MDCheckBox checkbox = (MDCheckBox) view.findViewById(R.id.control);
  48. boolean selected = dialog.selectedIndicesList.contains(index);
  49. checkbox.setColorFilter(dialog.mBuilder.widgetColor);
  50. checkbox.setChecked(selected);
  51. break;
  52. }
  53. }
  54. tv.setText(dialog.mBuilder.items[index]);
  55. tv.setTextColor(dialog.mBuilder.itemColor);
  56. dialog.setTypeface(tv, dialog.mBuilder.regularFont);
  57. view.setTag(index + ":" + dialog.mBuilder.items[index]);
  58. setupGravity((ViewGroup) view);
  59. if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
  60. ViewGroup group = (ViewGroup) view;
  61. if (group.getChildCount() == 2) {
  62. // Remove circular selector from check boxes and radio buttons on Lollipop
  63. if (group.getChildAt(0) instanceof CompoundButton)
  64. group.getChildAt(0).setBackground(null);
  65. else if (group.getChildAt(1) instanceof CompoundButton)
  66. group.getChildAt(1).setBackground(null);
  67. }
  68. }
  69. return view;
  70. }
  71. @TargetApi(Build.VERSION_CODES.JELLY_BEAN_MR1)
  72. private void setupGravity(ViewGroup view) {
  73. final LinearLayout itemRoot = (LinearLayout) view;
  74. final int gravityInt = itemGravity.getGravityInt();
  75. itemRoot.setGravity(gravityInt | Gravity.CENTER_VERTICAL);
  76. if (view.getChildCount() == 2) {
  77. if (itemGravity == GravityEnum.END && !isRTL() && view.getChildAt(0) instanceof CompoundButton) {
  78. CompoundButton first = (CompoundButton) view.getChildAt(0);
  79. view.removeView(first);
  80. TextView second = (TextView) view.getChildAt(0);
  81. view.removeView(second);
  82. second.setPadding(second.getPaddingRight(), second.getPaddingTop(),
  83. second.getPaddingLeft(), second.getPaddingBottom());
  84. view.addView(second);
  85. view.addView(first);
  86. } else if (itemGravity == GravityEnum.START && isRTL() && view.getChildAt(1) instanceof CompoundButton) {
  87. CompoundButton first = (CompoundButton) view.getChildAt(1);
  88. view.removeView(first);
  89. TextView second = (TextView) view.getChildAt(0);
  90. view.removeView(second);
  91. second.setPadding(second.getPaddingRight(), second.getPaddingTop(),
  92. second.getPaddingRight(), second.getPaddingBottom());
  93. view.addView(first);
  94. view.addView(second);
  95. }
  96. }
  97. }
  98. @TargetApi(Build.VERSION_CODES.JELLY_BEAN_MR1)
  99. private boolean isRTL() {
  100. if (Build.VERSION.SDK_INT < Build.VERSION_CODES.JELLY_BEAN_MR1)
  101. return false;
  102. Configuration config = getContext().getResources().getConfiguration();
  103. return config.getLayoutDirection() == View.LAYOUT_DIRECTION_RTL;
  104. }
  105. }