如何解决Android中的分段控件
| 我需要像Android中的分段控件一样使用iPhone。是否有相同的默认控件?最佳和有效的方法是什么?解决方法
您可以通过Radio Group实现分段控制功能
这是此示例和Hello表单的一些示例
, 我已经使用Views中的build实现了它。
MySegmentActivity
public class SegmentActivity extends AppCompatActivity implements View.OnClickListener {
private Context mContext;
private List<Button> buttonList = null;
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.item_segment_layout);
mContext = SegmentActivity.this;
initSegmentButtons();
}
private void initSegmentButtons() {
buttonList = new ArrayList<>();
Button dayBtn = (Button) findViewById(R.id.btn_day);
Button weekBtn = (Button) findViewById(R.id.btn_week);
Button monthBtn = (Button) findViewById(R.id.btn_month);
dayBtn.setOnClickListener(this);
weekBtn.setOnClickListener(this);
monthBtn.setOnClickListener(this);
buttonList.add(dayBtn);
buttonList.add(weekBtn);
buttonList.add(monthBtn);
}
@Override
public void onClick(View view) {
switch (view.getId()) {
case R.id.btn_day:
buttonList.get(0).setBackgroundResource(R.drawable.btn_bg_orange_selected);
buttonList.get(1).setBackgroundResource(R.drawable.btn_bg_orange);
buttonList.get(2).setBackgroundResource(R.drawable.btn_bg_orange);
break;
case R.id.btn_week:
buttonList.get(0).setBackgroundResource(R.drawable.btn_bg_orange);
buttonList.get(1).setBackgroundResource(R.drawable.btn_bg_orange_selected);
buttonList.get(2).setBackgroundResource(R.drawable.btn_bg_orange);
break;
case R.id.btn_month:
buttonList.get(0).setBackgroundResource(R.drawable.btn_bg_orange);
buttonList.get(1).setBackgroundResource(R.drawable.btn_bg_orange);
buttonList.get(2).setBackgroundResource(R.drawable.btn_bg_orange_selected);
break;
default:
break;
}
}
}
布局。
<?xml version=\"1.0\" encoding=\"utf-8\"?>
<LinearLayout
xmlns:android=\"http://schemas.android.com/apk/res/android\"
android:layout_width=\"match_parent\"
android:layout_height=\"wrap_content\"
android:layout_marginLeft=\"@dimen/activity_horizontal_margin\"
android:layout_marginRight=\"@dimen/activity_horizontal_margin\"
android:orientation=\"horizontal\">
<Button
android:id=\"@+id/btn_day\"
android:layout_width=\"0dp\"
android:layout_height=\"wrap_content\"
android:layout_weight=\"1\"
android:background=\"@drawable/btn_bg_orange\"
android:gravity=\"center\"
android:text=\"Day\"
android:textColor=\"@android:color/white\"
android:textSize=\"20sp\" />
<Button
android:id=\"@+id/btn_week\"
android:layout_width=\"0dp\"
android:layout_height=\"wrap_content\"
android:layout_marginLeft=\"-1dp\"
android:layout_marginRight=\"-1dp\"
android:layout_weight=\"1\"
android:background=\"@drawable/btn_bg_orange\"
android:gravity=\"center\"
android:text=\"Week\"
android:textColor=\"@android:color/white\"
android:textSize=\"20sp\" />
<Button
android:id=\"@+id/btn_month\"
android:layout_width=\"0dp\"
android:layout_height=\"wrap_content\"
android:layout_weight=\"1\"
android:background=\"@drawable/btn_bg_orange_selected\"
android:gravity=\"center\"
android:text=\"Month\"
android:textColor=\"@android:color/white\"
android:textSize=\"20sp\" />
</LinearLayout>
btn_bg_orange.xml
<?xml version=\"1.0\" encoding=\"utf-8\"?>
<shape xmlns:android=\"http://schemas.android.com/apk/res/android\"
android:shape=\"rectangle\">
<stroke
android:width=\"1dp\"
android:color=\"@color/orange\" />
<solid android:color=\"@android:color/transparent\" />
</shape>
btn_bg_orange_selected
<?xml version=\"1.0\" encoding=\"utf-8\"?>
<shape xmlns:android=\"http://schemas.android.com/apk/res/android\"
android:shape=\"rectangle\">
<stroke
android:width=\"1dp\"
android:color=\"@color/orange\" />
<solid android:color=\"@color/orange\" />
</shape>
, 我已经为Android创建了SegmentCustomControl。
SegmentTestActivity.class
public class SegmentTestActivity extends AppCompatActivity {
private Context mContext;
private SegmentView segmentView;
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.segment_test_activity);
mContext = SegmentTestActivity.this;
segmentView = (SegmentView) findViewById(R.id.segment_view);
segmentView.setOnSegmentSelectedListener(new OnSegmentSelectedListener() {
@Override
public void onSegmentSelected(int position) {
Toast.makeText(mContext,\"Segment selected at Index : \" + position,Toast.LENGTH_SHORT).show();
}
});
}
}
segment_test_activity.xml
<?xml version=\"1.0\" encoding=\"utf-8\"?>
<RelativeLayout xmlns:android=\"http://schemas.android.com/apk/res/android\"
xmlns:app=\"http://schemas.android.com/apk/res-auto\"
android:layout_width=\"match_parent\"
android:layout_height=\"match_parent\">
<custom.rnd.SegmentView
android:id=\"@+id/segment_view\"
android:layout_width=\"match_parent\"
android:layout_height=\"wrap_content\"
android:gravity=\"center\"
app:numberOfSegment=\"3\"
app:segmentColor=\"@color/colorPrimary\"
app:selectedTextColor=\"@android:color/black\"
app:textSize=\"16sp\"
app:unSelectedTextColor=\"@color/colorPrimary\" />
<custom.rnd.SegmentView
android:id=\"@+id/segment_view2\"
android:layout_width=\"match_parent\"
android:layout_height=\"wrap_content\"
android:layout_alignParentBottom=\"true\"
android:gravity=\"center\"
app:numberOfSegment=\"2\"
app:segmentColor=\"@color/colorAccent\"
app:selectedTextColor=\"@android:color/black\"
app:titlesOfSegment=\"New,OLD\"
app:unSelectedTextColor=\"@android:color/white\" />
</RelativeLayout>
SegmentView
public class SegmentView extends LinearLayout{
public static final String TAG = \"SegmentView\";
private OnSegmentSelectedListener onSegmentSelectedListener;
private SegmentView segmentView;
private int numberOfSegments = 0;
private List<String> titlesOfSegment;
private int selectedTextColor;
private int unSelectedTextColor;
private int segmentColorSelected;
/*private int defaultSelectedColor = Color.parseColor(\"#c13d1f\");
private int defaultUnSelectedColor = Color.parseColor(\"#ea8d21\");*/
public SegmentView(Context context,AttributeSet attrs) {
super(context,attrs);
initLayout(context,attrs);
}
public SegmentView(Context context,AttributeSet attrs,int defStyleAttr) {
super(context,attrs,defStyleAttr);
initLayout(context,attrs);
}
private void initLayout(Context mContext,AttributeSet attrs) {
segmentView = this;
titlesOfSegment = new ArrayList<>();
TypedArray typedArray = mContext.obtainStyledAttributes(attrs,R.styleable.SegmentView);
numberOfSegments = typedArray.getInt(R.styleable.SegmentView_numberOfSegment,0);
String titleWithComma = typedArray.getString(R.styleable.SegmentView_titlesOfSegment);
selectedTextColor = typedArray.getColor(R.styleable.SegmentView_selectedTextColor,Color.WHITE);
unSelectedTextColor = typedArray.getColor(R.styleable.SegmentView_unSelectedTextColor,Color.parseColor(\"#c13d1f\"));
segmentColorSelected = typedArray.getColor(R.styleable.SegmentView_segmentColor,0);
//orientation = typedArray.getInt(R.styleable.SegmentView_orientation,0);
int unitsTextSize = typedArray.getDimensionPixelSize(R.styleable.SegmentView_textSize,0);
if (titleWithComma != null && !titleWithComma.isEmpty()) {
String[] arrayOfTitles = titleWithComma.split(\",\");
for (String x : arrayOfTitles) {
titlesOfSegment.add(x);
}
}
typedArray.recycle();
segmentView.setOrientation(HORIZONTAL);
/*if(orientation == 0){
segmentView.setOrientation(HORIZONTAL);
}
else{
segmentView.setLayoutParams(new LayoutParams(LayoutParams.WRAP_CONTENT,LayoutParams.WRAP_CONTENT));
segmentView.setOrientation(VERTICAL);
}*/
for (int i = 0; i < numberOfSegments; i++) {
LinearLayout.LayoutParams param = new LinearLayout.LayoutParams(LayoutParams.MATCH_PARENT,LayoutParams.WRAP_CONTENT,1.0f);
/*if(orientation != 0)
param = new LinearLayout.LayoutParams(LayoutParams.WRAP_CONTENT,LayoutParams.MATCH_PARENT,1.0f);*/
Button btn = new Button(mContext);
if (titlesOfSegment != null && titlesOfSegment.size() == numberOfSegments)
btn.setText(titlesOfSegment.get(i));
else
btn.setText(\"Segment \" + i);
btn.setTextColor(Color.WHITE);
if(unitsTextSize != 0){
btn.setTextSize(TypedValue.COMPLEX_UNIT_PX,unitsTextSize);
}
else
btn.setTextSize(14.0f);
if (i == 0) {
btn.setBackgroundResource(R.drawable.btn_bg_orange_selected);
btn.setTextColor(selectedTextColor);
updateBorderAndSolidColor(btn);
} else {
btn.setBackgroundResource(R.drawable.btn_bg_orange);
btn.setTextColor(unSelectedTextColor);
if (segmentColorSelected != 0) {
//changeSolidColor(btn,segmentColorUnSelected);
changeStrokeColor(btn,segmentColorSelected);
}
}
final int x = i;
btn.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View view) {
if (onSegmentSelectedListener != null)
onSegmentSelectedListener.onSegmentSelected(x);
handleClick(x,view);
}
});
segmentView.addView(btn,param);
}
}
private void updateBorderAndSolidColor(Button btn) {
if (segmentColorSelected != 0) {
changeStrokeColor(btn,segmentColorSelected);
}
if (segmentColorSelected != 0) {
changeSolidColor(btn,segmentColorSelected);
}
}
public void setOnSegmentSelectedListener(OnSegmentSelectedListener onSegmentSelectedListener) {
this.onSegmentSelectedListener = onSegmentSelectedListener;
}
private void handleClick(int position,View view) {
Button btnView = null;
for (int iter = 0; iter < segmentView.getChildCount(); iter++) {
btnView = (Button) segmentView.getChildAt(iter);
if (iter == position) {
btnView.setBackgroundResource(R.drawable.btn_bg_orange_selected);
btnView.setTextColor(selectedTextColor);
updateBorderAndSolidColor(btnView);
} else {
btnView.setBackgroundResource(R.drawable.btn_bg_orange);
btnView.setTextColor(unSelectedTextColor);
if (segmentColorSelected != 0)
changeStrokeColor(btnView,segmentColorSelected);
}
}
}
private void changeStrokeColor(Button view,int colorCode) {
GradientDrawable drawable = (GradientDrawable) view.getBackground();
//update value 3 according to your need.
drawable.setStroke(3,colorCode); // set stroke width and stroke color
}
private void changeSolidColor(Button view,int colorCode) {
GradientDrawable drawable = (GradientDrawable) view.getBackground();
drawable.setColor(colorCode); // set solid color
}
}
attrs.xml
<?xml version=\"1.0\" encoding=\"utf-8\"?>
<resources>
<declare-styleable name=\"SegmentView\">
<attr name=\"numberOfSegment\" format=\"integer\" />
<attr name=\"titlesOfSegment\" format=\"string\" />
<attr name=\"selectedTextColor\" format=\"color\" />
<attr name=\"unSelectedTextColor\" format=\"color\" />
<attr name=\"segmentColor\" format=\"color\" />
<attr name=\"textSize\" format=\"dimension\" />
<!--<attr name=\"orientation\">
<enum name=\"horizontal\" value=\"0\" />
<enum name=\"vertical\" value=\"1\" />
</attr>-->
</declare-styleable>
</resources>
和听众
public interface OnSegmentSelectedListener {
void onSegmentSelected(int position);
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。