這裡只簡單做了兩個按鈕的。
首先是兩個按鈕的背景:
res/drawable/seg_left.xml
res/drawable/seg_text_color_selector.xml
下面對LinearLayout進行改造~~~
其實就是放兩個TextView。
SegmentView.java
package cn.haiwan.app.widget; import org.xmlpull.v1.XmlPullParser; import android.R.integer; import android.content.Context; import android.content.res.ColorStateList; import android.util.AttributeSet; import android.util.TypedValue; import android.view.Gravity; import android.view.View; import android.widget.LinearLayout; import android.widget.TextView; import cn.haiwan.R; public class SegmentView extends LinearLayout { private TextView textView1; private TextView textView2; private onSegmentViewClickListener listener; public SegmentView(Context context, AttributeSet attrs) { super(context, attrs); init(); } public SegmentView(Context context) { super(context); init(); } private void init() { // this.setLayoutParams(new LinearLayout.LayoutParams(dp2Px(getContext(), 60), LinearLayout.LayoutParams.WRAP_CONTENT)); textView1 = new TextView(getContext()); textView2 = new TextView(getContext()); textView1.setLayoutParams(new LayoutParams(0, LayoutParams.WRAP_CONTENT, 1)); textView2.setLayoutParams(new LayoutParams(0, LayoutParams.WRAP_CONTENT, 1)); textView1.setText(SEG1); textView2.setText(SEG2); XmlPullParser xrp = getResources().getXml(R.drawable.seg_text_color_selector); try { ColorStateList csl = ColorStateList.createFromXml(getResources(), xrp); textView1.setTextColor(csl); textView2.setTextColor(csl); } catch (Exception e) { } textView1.setGravity(Gravity.CENTER); textView2.setGravity(Gravity.CENTER); textView1.setPadding(3, 6, 3, 6); textView2.setPadding(3, 6, 3, 6); setSegmentTextSize(16); textView1.setBackgroundResource(R.drawable.seg_left); textView2.setBackgroundResource(R.drawable.seg_right); textView1.setSelected(true); this.removeAllViews(); this.addView(textView1); this.addView(textView2); this.invalidate(); textView1.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { if (textView1.isSelected()) { return; } textView1.setSelected(true); textView2.setSelected(false); if (listener != null) { listener.onSegmentViewClick(textView1, 0); } } }); textView2.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { if (textView2.isSelected()) { return; } textView2.setSelected(true); textView1.setSelected(false); if (listener != null) { listener.onSegmentViewClick(textView2, 1); } } }); } /** * 設置字體大小 單位dip *
2014年7月18日
* @param dp * @author RANDY.ZHANG */ public void setSegmentTextSize(int dp) { textView1.setTextSize(TypedValue.COMPLEX_UNIT_DIP, dp); textView2.setTextSize(TypedValue.COMPLEX_UNIT_DIP, dp); } private static int dp2Px(Context context, float dp) { final float scale = context.getResources().getDisplayMetrics().density; return (int) (dp * scale + 0.5f); } public void setOnSegmentViewClickListener(onSegmentViewClickListener listener) { this.listener = listener; } /** * 設置文字 *2014年7月18日
* @param text * @param position * @author RANDY.ZHANG */ public void setSegmentText(CharSequence text,int position) { if (position == 0) { textView1.setText(text); } if (position == 1) { textView2.setText(text); } } public static interface onSegmentViewClickListener{ /** * *2014年7月18日
* @param v * @param position 0-左邊 1-右邊 * @author RANDY.ZHANG */ public void onSegmentViewClick(View v,int position); } }
布局文件引用