自定义组合控件(Android)

来源:互联网 发布:紫竹调网络歌手 编辑:程序博客网 时间:2024/06/05 01:00
/** * 自定义标题栏 */public class TopBar extends RelativeLayout {    private String mLeftText;    private String mRightText;    private String mTitle;    private int mLeftTextColor;    private int mRightTextColor;    private int mTitleColor;    private Drawable mLeftDrawable;    private Drawable mRightDrawable;    private float mTitleSize;    private Button mLeftButton;    private Button mRightButton;    private TextView mTitleView;    private LayoutParams mLeftParams;    private LayoutParams mRightParams;    private LayoutParams mTitleParams;    private TopBarClickListener mTopBarClickListener;    private static final int BUTTON_LEFT = 0;    public static final int BUTTON_RIGHT = 1;    public TopBar(Context context) {        super(context, null);    }    public TopBar(Context context, AttributeSet attrs) {        super(context, attrs);        if (attrs != null) {            //通过这个方法,将你在attrs.xml中定义的declare-styleable的所有属性存储到TypedArray中。            TypedArray ta = context.obtainStyledAttributes(attrs, R.styleable.TopBar);            /**             * 左侧按钮的属性             */            mLeftText =  ta.getString(R.styleable.TopBar_leftText);            mLeftTextColor = ta.getColor(R.styleable.TopBar_leftTextColor, Color.BLACK);            mLeftDrawable = ta.getDrawable(R.styleable.TopBar_leftBackground);            /**             * 右侧按钮的属性             */            mRightText = ta.getString(R.styleable.TopBar_rightText);            mRightTextColor = ta.getColor(R.styleable.TopBar_rightTextColor, Color.BLACK);            mRightDrawable = ta.getDrawable(R.styleable.TopBar_rightBackground);            /**             * 标题的属性             */            mTitle = ta.getString(R.styleable.TopBar_title1);            mTitleColor = ta.getColor(R.styleable.TopBar_titleTextColor1,Color.BLACK);            mTitleSize = ta.getDimension(R.styleable.TopBar_titleTextSize, TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_SP, 14, getResources().getDisplayMetrics()));            ta.recycle();        }        initView(context);    }    public void setTopBarClickListener(TopBarClickListener clickListener) {        mTopBarClickListener = clickListener;    }    /**     * 初始化视图     */    private void initView(Context context) {        mLeftButton = new Button(context);        mRightButton = new Button(context);        mTitleView = new TextView(context);        mLeftButton.setTextColor(mLeftTextColor);        mLeftButton.setText(mLeftText);        mLeftButton.setBackground(mLeftDrawable);        mRightButton.setText(mRightText);        mRightButton.setTextColor(mRightTextColor);        mRightButton.setBackground(mRightDrawable);        mTitleView.setText(mTitle);        mTitleView.setTextColor(mTitleColor);        mTitleView.setTextSize(mTitleSize);        mTitleView.setGravity(Gravity.CENTER);        //为组件元素设置相应的布局元素        mLeftParams = new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.MATCH_PARENT);        mLeftParams.addRule(RelativeLayout.ALIGN_PARENT_LEFT, TRUE);        addView(mLeftButton, mLeftParams);        mRightParams = new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.MATCH_PARENT);        mRightParams.addRule(RelativeLayout.ALIGN_PARENT_RIGHT, TRUE);        addView(mRightButton, mRightParams);        mTitleParams = new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.MATCH_PARENT);        mTitleParams.addRule(RelativeLayout.CENTER_IN_PARENT, TRUE);        addView(mTitleView, mTitleParams);        mLeftButton.setOnClickListener(new OnClickListener() {            @Override            public void onClick(View v) {                if (mTopBarClickListener != null) {                    mTopBarClickListener.leftClick();                }            }        });        mRightButton.setOnClickListener(new OnClickListener() {            @Override            public void onClick(View v) {                if (mTopBarClickListener != null) {                    mTopBarClickListener.rightClick();                }            }        });    }    /**     * 设置按钮是否显示     * @param id     * @param flag     */    private void setButtonVisable(int id,boolean flag){        if(flag){            if(id==BUTTON_LEFT){                mLeftButton.setVisibility(View.VISIBLE);            }else{                mRightButton.setVisibility(View.VISIBLE);            }        }else{            if(id==BUTTON_LEFT){                mLeftButton.setVisibility(View.GONE);            }else{                mRightButton.setVisibility(View.GONE);            }        }    }    public interface TopBarClickListener {        //左按钮点击回掉        void leftClick();        //右按钮点击回调        void rightClick();    }}public class MainActivity extends AppCompatActivity implements TopBar.TopBarClickListener {    private TopBar mTopBar;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        requestWindowFeature(Window.FEATURE_NO_TITLE);        setContentView(R.layout.activity_vertical_scroll);       /* mTopBar = ((TopBar) findViewById(R.id.top_bar));        mTopBar.setTopBarClickListener(this);*/    }    @Override    public void leftClick() {        Toast.makeText(getApplicationContext(),"left",Toast.LENGTH_SHORT).show();    }    @Override    public void rightClick() {        Toast.makeText(getApplicationContext(),"right",Toast.LENGTH_SHORT).show();    }}attrs里边<resources>    <declare-styleable name="TopBar">        <attr name="title1" format="string"/>        <attr name="titleTextSize" format="dimension"/>        <attr name="titleTextColor1" format="color"/>        <attr name="leftTextColor" format="color"/>        <attr name="leftBackground" format="reference|color"/>        <attr name="leftText" format="string"/>        <attr name="rightTextColor" format="color"/>        <attr name="rightBackground" format="reference|color"/>        <attr name="rightText" format="string"/>    </declare-styleable></resources>xml<com.example.mdw.scrollertest.TopBar xmlns:android="http://schemas.android.com/apk/res/android"    xmlns:app="http://schemas.android.com/apk/res-auto"    android:id="@+id/top_bar"    android:layout_width="match_parent"    android:layout_height="48dp"    android:orientation="vertical"    app:leftTextColor="#Fff"    app:leftText="BACK"    app:leftBackground="@color/colorAccent"    app:title1="自定义标题"    app:titleTextColor1="#000"    app:titleTextSize="12sp"    app:rightText="MORE"    app:rightBackground="@color/colorAccent"    app:rightTextColor="#fff"    />