Android仿IOS的UISegmentedContro分段控制器
来源:互联网 发布:软件安全性 编辑:程序博客网 时间:2024/05/21 14:06
先上效果图
效果如上,可以左右切换,也有监听事件,但缺点就是颜色没法设置,需要到XML中修改,也很简单。
其实原理很简单,重写了一个SegmentedControLayout继承LinearLayout,放两个TextView,添加背景和监听器,实现联动。
首先是样式,总共有四个,分别为左右的选中和不选中状态,我给出一个,其他的可以修改:
<?xml version="1.0" encoding="utf-8"?><shape xmlns:android="http://schemas.android.com/apk/res/android"> <!-- 内部颜色 --> <solid android:color="#1afead" /> <!-- 边缘线条颜色 --> <stroke android:width="1dp" android:color="#1afead" /> <!-- 圆角的幅度 --> <corners android:topLeftRadius="5dp" android:topRightRadius="0dp" android:bottomLeftRadius="5dp" android:bottomRightRadius="0dp" /></shape>
布局:
<?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:orientation="vertical" > <LinearLayout android:id="@+id/top_bar" android:layout_width="match_parent" android:layout_height="wrap_content" android:gravity="center" android:orientation="horizontal" android:minHeight="@dimen/actionbar_height" > <RelativeLayout android:id="@+id/left_parent" android:layout_width="0dp" android:layout_height="@dimen/actionbar_height" android:layout_gravity="left|center_vertical" android:layout_weight="1.4" android:gravity="center_vertical|left" > <LinearLayout android:layout_alignParentLeft="true" android:id="@+id/option_imageview_layout_left" android:layout_width="wrap_content" android:paddingRight="14dp" android:paddingLeft="14dp" android:layout_height="match_parent" android:gravity="center" android:background="@drawable/titlebar_text_bg_selector" > <ImageView android:id="@id/option_imageview_left" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center_vertical" android:visibility="invisible" /> </LinearLayout> </RelativeLayout> <LinearLayout android:id="@id/option_linearlayout_content" android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight="3" android:gravity="center" android:orientation="horizontal" > <TextView android:id="@id/option_textview_title" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center_vertical" android:gravity="center" android:maxLines="1" android:textStyle="normal" /> </LinearLayout> <RelativeLayout android:id="@+id/right_parent" android:layout_width="0dp" android:layout_height="@dimen/actionbar_height" android:layout_gravity="right|center_vertical" android:layout_marginRight="@dimen/actionbar_icon_margin" android:layout_weight="1.4" android:gravity="center_vertical|right" > <LinearLayout android:layout_alignParentRight="true" android:id="@+id/option_imageview_layout_right" android:layout_width="wrap_content" android:paddingRight="14dp" android:paddingLeft="14dp" android:layout_height="match_parent" android:gravity="center" android:background="@drawable/titlebar_text_bg_selector" android:visibility="gone" > <ImageView android:id="@id/option_imageview_right" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center_vertical" /> </LinearLayout> <TextView android:layout_alignParentRight="true" android:layout_marginRight="14dp" android:id="@+id/option_textview_right" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center_vertical" android:textSize="16dp" android:textColor="@color/white_text_color_selector" /> </RelativeLayout> </LinearLayout></LinearLayout>
然后就是代码,我一次性给出:
package com.international.cashou.common.widget;import android.app.Activity;import android.content.Context;import android.content.res.TypedArray;import android.util.AttributeSet;import android.util.TypedValue;import android.view.LayoutInflater;import android.view.View;import android.view.ViewGroup;import android.widget.ImageView;import android.widget.LinearLayout;import android.widget.RelativeLayout;import android.widget.TextView;import com.international.cashou.R;/** * Created by Administrator on 2017/8/7. */public class SimpleOptionView extends LinearLayout { private ImageView mLeftImageView; private ImageView mRightImageView; private LinearLayout mRightImageViewLayout; private LinearLayout mLeftImageViewLayout; private TextView mRightTextView; private RelativeLayout mLeftParent; private RelativeLayout mRightParent; private TextView mTitleText; private View mCustomeView; private LinearLayout mTobBar; private boolean isSetBackOption = false; public SimpleOptionView(Context context, AttributeSet attrs) { this(context, attrs, 0); } public SimpleOptionView(Context context) { this(context, null); } public SimpleOptionView(Context context, AttributeSet attrs, int defStyle) { super(context, attrs, defStyle); TypedArray a = context.obtainStyledAttributes(attrs, R.styleable.SimpleOptionView); String title = a.getString(R.styleable.SimpleOptionView_option_title); int barheight = a.getDimensionPixelSize(R.styleable.SimpleOptionView_option_barheight, -1); int textSize = a.getDimensionPixelSize(R.styleable.SimpleOptionView_option_textsize, -1); int right_textSize = a.getDimensionPixelSize(R.styleable.SimpleOptionView_option_right_textsize, -1); int bgColor = a.getColor(R.styleable.SimpleOptionView_option_backgroundcolor, -1); int textColor = a.getColor(R.styleable.SimpleOptionView_option_textcolor, -1); LayoutInflater inflater = (LayoutInflater) context .getSystemService(Context.LAYOUT_INFLATER_SERVICE); inflater.inflate(R.layout.simple_action_bar, this, true); mTitleText = (TextView) findViewById(R.id.option_textview_title); mLeftParent = (RelativeLayout) findViewById(R.id.left_parent); mRightParent = (RelativeLayout) findViewById(R.id.right_parent); mTobBar = (LinearLayout) findViewById(R.id.top_bar); mLeftImageView = (ImageView) findViewById(R.id.option_imageview_left); mRightTextView = (TextView) findViewById(R.id.option_textview_right); mRightImageView = (ImageView) findViewById(R.id.option_imageview_right); mRightImageViewLayout = (LinearLayout) findViewById(R.id.option_imageview_layout_right); mLeftImageViewLayout = (LinearLayout) findViewById(R.id.option_imageview_layout_left); mTitleText.setText(title); if (barheight != -1) { mTobBar.setMinimumHeight(barheight); } if (textSize != -1) { mTitleText.setTextSize(TypedValue.COMPLEX_UNIT_PX, textSize); } if (right_textSize != -1) { mRightTextView.setTextSize(TypedValue.COMPLEX_UNIT_PX, right_textSize); } if (bgColor != -1) { mTobBar.setBackgroundColor(bgColor); } if (textColor != -1) { mTitleText.setTextColor(textColor); //mRightTextView.setTextColor(textColor); } setBackOption(true); } public void setCenterCustomeView(View v) { if (mCustomeView != v) { mCustomeView = v; ViewGroup vg = (ViewGroup) mTitleText.getParent(); mTitleText.setVisibility(View.GONE); vg.addView(v); } } public void removeCenterCustomeView() { if (mCustomeView != null) { ViewGroup vg = (ViewGroup) mTitleText.getParent(); vg.removeView(mCustomeView); mCustomeView = null; mTitleText.setVisibility(View.VISIBLE); } } public void setLeftOption(int resId, OnClickListener listener) { mLeftImageView.setTag(resId); mLeftImageViewLayout.setVisibility(View.VISIBLE); mLeftImageView.setImageResource(resId); mLeftParent.setOnClickListener(listener); isSetBackOption = false; } public void setLeftGone(boolean isGone) { if (isGone) { mLeftImageView.setVisibility(View.GONE); } else { mLeftImageView.setVisibility(View.VISIBLE); } } public void setRightOption(int resId, OnClickListener listener) { mRightImageViewLayout.setVisibility(View.VISIBLE); mRightTextView.setVisibility(View.GONE); mRightImageView.setImageResource(resId); mRightParent.setOnClickListener(listener); } public void setRightOptionGon(boolean isGone) { if (isGone) { mRightImageView.setVisibility(View.GONE); } else { mRightImageView.setVisibility(View.VISIBLE); } } public void setRightText(int resId, OnClickListener listener) { mRightTextView.setVisibility(View.VISIBLE); mRightImageViewLayout.setVisibility(View.GONE); mRightTextView.setText(resId); mRightParent.setOnClickListener(listener); } public void setRightText(String text, OnClickListener listener) { mRightTextView.setVisibility(View.VISIBLE); mRightImageViewLayout.setVisibility(View.GONE); mRightTextView.setText(text); mRightParent.setOnClickListener(listener); } public void setRightViewVisibility(int visibility) { mRightTextView.setVisibility(visibility); } public void setRightOptionEnabled(boolean b) { mRightParent.setEnabled(b); } private OnClickListener leftClickListener; /** * 设置返回按钮的点击事件 * * @param leftClickListener */ public void setLeftClickListener(OnClickListener leftClickListener) { this.leftClickListener = leftClickListener; } public void setBackOption(boolean b) { if (isSetBackOption != b) { isSetBackOption = b; if (b) { mLeftImageView.setImageResource(R.drawable.back_selector); mLeftParent.setOnClickListener(new OnClickListener() { @Override public void onClick(View view) { if (leftClickListener != null) { leftClickListener.onClick(view); } ((Activity) getContext()).onBackPressed(); } }); mLeftImageView.setContentDescription("back Icon"); } else { mLeftParent.setOnClickListener(null); } } if (b) { mLeftImageView.setVisibility(View.VISIBLE); } else { mLeftImageView.setVisibility(View.INVISIBLE); } } public void setRightCustomeView(View v) { if (mRightParent != null) { mRightParent.removeAllViews(); if (v.getParent() == null) { mRightParent.addView(v); } } } public CharSequence getTitle() { return mTitleText.getText(); } public void setTitle(CharSequence str) { mTitleText.setText(str); mTitleText.setVisibility(View.VISIBLE); if (mCustomeView != null) { ViewGroup vg = (ViewGroup) mTitleText.getParent(); vg.removeView(mCustomeView); mCustomeView = null; } } public void setTitle(int resId) { mTitleText.setText(resId); mTitleText.setVisibility(View.VISIBLE); if (mCustomeView != null) { ViewGroup vg = (ViewGroup) mTitleText.getParent(); vg.removeView(mCustomeView); mCustomeView = null; } }}使用:
segmentedControLayout=(SegmentedControLayout)findViewById(R.id.my_scrollIndicatorDown); segmentedControLayout.setOnTabChangListener(new SegmentedControLayout.OnTabChangListener() { @Override public void onLeftClick() { Toast.makeText(mContext,"左",Toast.LENGTH_SHORT).show(); } @Override public void onRightClick() { Toast.makeText(mContext,"右",Toast.LENGTH_SHORT).show(); } });
最后的最后,完整DEMO,只要1积分哦。
阅读全文
0 0
- Android仿IOS的UISegmentedContro分段控制器
- Android 访IOS 分段选择控制器 SegmentView
- iOS分段控制器
- IOS UISegmentedControl 分段控制器
- ios 分段控制器
- Android仿iOS7的UISegmentedControl 分段
- Android仿iOS7的UISegmentedControl 分段
- Android仿iOS7的UISegmentedControl 分段
- android仿ios实现分段选择控件UISegmentedControl
- iOS开发-分段控制器UISegmentedControl
- iOS-分段控制器大全ZFJSegmentedControl
- 仿IOS分段控件SegmentConrtol
- android仿苹果分段按钮
- iOS经验5:分段控制器之谈
- iOS分段控制器UISegmentedControl和开关UISwitch
- iOS开发 UI UISegmentedControl分段控制器
- 仿ios分段选择器(自定义radiogroup)
- 分段控制器
- Oracle ORA-12638: 身份证明检索失败 一个解决方法
- Android 主题切换/换肤方案 研究(四)
- 使用EventBus
- 抽象类与接口的区别
- 程序员面试、算法研究、编程艺术、红黑树、数据挖掘5大系列集锦
- Android仿IOS的UISegmentedContro分段控制器
- 在搭建Spring框架时,web.xml文件的配置之DispatcherServlet&ContextLoaderListener
- opencv-svm分类
- WebRTC中混音流程分析
- 如何将真彩色图转换为各种灰度图
- OpenCV3-非线性滤波
- struts2自定义拦截器
- WdatePicker日历控件使用方法
- Tyvj1209