SegmentView.java 4.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174
  1. package com.usai.apex;
  2. import android.content.Context;
  3. import android.content.res.ColorStateList;
  4. import android.util.AttributeSet;
  5. import android.util.TypedValue;
  6. import android.view.Gravity;
  7. import android.view.View;
  8. import android.widget.LinearLayout;
  9. import android.widget.TextView;
  10. /**
  11. * Created by ray on 26/02/2018.
  12. */
  13. public class SegmentView extends LinearLayout {
  14. private TextView leftTextView;
  15. private TextView rightTextView;
  16. private onSegmentViewClickListener segmentListener;
  17. // 这是代码加载ui必须重写的方法
  18. public SegmentView(Context context) {
  19. super(context);
  20. initView();
  21. }
  22. // 这是在xml布局使用必须重写的方法
  23. public SegmentView(Context context, AttributeSet attrs) {
  24. super(context, attrs);
  25. initView();
  26. }
  27. private void initView() {
  28. leftTextView = new TextView(getContext());
  29. rightTextView = new TextView(getContext());
  30. leftTextView.setSingleLine();
  31. rightTextView.setSingleLine();
  32. // leftTextView.setPadding(8,0,8,0);
  33. // rightTextView.setPadding(8,0,8,0);
  34. // 设置textview的布局宽高并设置为weight属性都为1
  35. leftTextView.setLayoutParams(new LayoutParams(0, LayoutParams.WRAP_CONTENT, 1));
  36. rightTextView.setLayoutParams(new LayoutParams(0, LayoutParams.WRAP_CONTENT, 1));
  37. // 初始化的默认文字
  38. leftTextView.setText("H BOL");
  39. rightTextView.setText("Container#");
  40. // 实现不同的按钮状态,不同的颜色
  41. ColorStateList csl = getResources().getColorStateList(R.color.segment_text_color_select);
  42. leftTextView.setTextColor(csl);
  43. rightTextView.setTextColor(csl);
  44. // 设置textview的内容位置居中
  45. leftTextView.setGravity(Gravity.CENTER);
  46. rightTextView.setGravity(Gravity.CENTER);
  47. // 设置textview的内边距
  48. leftTextView.setPadding(20, 10, 20, 10);
  49. rightTextView.setPadding(20, 10, 20, 10);
  50. // 设置文字大小
  51. setSegmentTextSize(17);
  52. // 设置背景资源
  53. leftTextView.setBackgroundResource(R.drawable.segment_left_background);
  54. rightTextView.setBackgroundResource(R.drawable.segment_right_background);
  55. // 默认左侧textview为选中状态
  56. leftTextView.setSelected(true);
  57. // 加入textview
  58. this.removeAllViews();
  59. this.addView(leftTextView);
  60. this.addView(rightTextView);
  61. this.invalidate();//重新draw()
  62. leftTextView.setOnClickListener(new OnClickListener() {
  63. @Override
  64. public void onClick(View v) {
  65. if (leftTextView.isSelected()) {
  66. return;
  67. }
  68. leftTextView.setSelected(true);
  69. rightTextView.setSelected(false);
  70. if (segmentListener != null) {
  71. segmentListener.onSegmentViewClick(leftTextView, 0);
  72. }
  73. }
  74. });
  75. rightTextView.setOnClickListener(new OnClickListener() {
  76. @Override
  77. public void onClick(View v) {
  78. if (rightTextView.isSelected()) {
  79. return;
  80. }
  81. rightTextView.setSelected(true);
  82. leftTextView.setSelected(false);
  83. if (segmentListener != null) {
  84. segmentListener.onSegmentViewClick(rightTextView, 1);
  85. }
  86. }
  87. });
  88. }
  89. /**
  90. * 设置字体大小
  91. *
  92. * @param dp
  93. */
  94. private void setSegmentTextSize(int dp) {
  95. leftTextView.setTextSize(TypedValue.COMPLEX_UNIT_DIP, dp);
  96. rightTextView.setTextSize(TypedValue.COMPLEX_UNIT_DIP, dp);
  97. }
  98. /**
  99. * 手动设置选中的状态
  100. *
  101. * @param i
  102. */
  103. public void setSelect(int i) {
  104. if (i == 0) {
  105. leftTextView.setSelected(true);
  106. rightTextView.setSelected(false);
  107. } else {
  108. leftTextView.setSelected(false);
  109. rightTextView.setSelected(true);
  110. }
  111. }
  112. /**
  113. * 获取当前选中状态 0=left, 1=right
  114. *
  115. * @param i
  116. */
  117. public int getSelect() {
  118. if (leftTextView.isSelected()) {
  119. return 0;
  120. } else {
  121. return 1;
  122. }
  123. }
  124. /**
  125. * 设置控件显示的文字
  126. *
  127. * @param text
  128. * @param position
  129. */
  130. public void setSegmentText(CharSequence text, int position) {
  131. if (position == 0) {
  132. leftTextView.setText(text);
  133. }
  134. if (position == 1) {
  135. rightTextView.setText(text);
  136. }
  137. }
  138. // 定义一个接口接收点击事件
  139. public interface onSegmentViewClickListener {
  140. public void onSegmentViewClick(View view, int postion);
  141. }
  142. public void setOnSegmentViewClickListener(onSegmentViewClickListener segmentListener) {
  143. this.segmentListener = segmentListener;
  144. }
  145. }