创建控件

1.创建一个类继承与Relativelayout

QQ截图20191020104519.png

2.

1.png
 //定义一个变量保存外部设置的背景颜色  默认灰色
    private int lwk_background=Color.DKGRAY;

3.用java代码创建控件

//记录是否需要返回按钮
    private boolean show_back=false;

    //返回按钮
    private Button back;
    //返回按钮的布局属性
    private LayoutParams params;

    //1.使用java代码创建控件
    public LWKNavitionBar(Context context) {
//        super(context);
//        init();
        this(context,null);
    }

4.使用xml创建控件

 //2.使用xml创建控件
    public LWKNavitionBar(Context context, AttributeSet attrs){
        super(context,attrs);
        init(context,attrs);
    }

5.

    <!--2.xml方式创建控件-->
    <swu.lwk.a12_navigationbar.LWKNavitionBar
        android:id="@+id/na"
        android:layout_width="match_parent"
        android:layout_height="64dp"
        app:lwk_background="#F32322"
        app:show_back="true"
        app:back_title="返回到主页"
        />

6.初始化控件

 //初始化控件
    private void init(Context context,AttributeSet attrs){
        //设置横向布局
        //setOrientation(LinearLayout.HORIZONTAL);
        //设置背景
        setBackgroundColor(Color.GRAY);
        //设置内容垂直居中
        setGravity(Gravity.CENTER_VERTICAL);
        //判断是不是xml配置的
        if (attrs!=null){
            //从attrs里面提取xml里面配置的所有属性
            TypedArray typedArray=context.obtainStyledAttributes(attrs,
                    R.styleable.LWKNavitionBar);
            //提取自己需要的属性
            int color=typedArray.getColor(R.styleable.LWKNavitionBar_lwk_background,
                    Color.MAGENTA);
            //是否需要返回按钮
            boolean show=typedArray.getBoolean(R.styleable.LWKNavitionBar_show_back,false);
            //取返回按钮的标题
            String title=typedArray.getString(R.styleable.LWKNavitionBar_back_title);
            //使用数据
            setLwk_background(color);
            setShow_back(show,title);
        }
    }

7.创建按钮,按钮布局属性和返回按钮

public void setShow_back(boolean show_back,String title) {
        this.show_back = show_back;
        if(show_back==true){
            //创建返回按钮
            back=new Button(getContext());
            //点击事件

            //设置按钮布局属性
            params=new LayoutParams(
                    ViewGroup.LayoutParams.WRAP_CONTENT
            ,ViewGroup.LayoutParams.WRAP_CONTENT);
            params.leftMargin=(int)(10*getResources().getDisplayMetrics().density);
            //设置标题
            if (title!=null){
                back.setText(title);
            }else {
                back.setText("Back");
            }

            //添加控件
            addView(back,params);
        }
    }

8.用于区别按钮的左右

 //用于区别左右
    public interface LWKPosition{
        int LEFT=0;
        int RIGHT=1;
    }

9.设置按钮显示的位置

 //设置按钮显示的位置
    public void setPostion(int position){
        //判断是否有back按钮
        if (back!=null) {
            if (position == LWKPosition.LEFT) {
                params.addRule(RelativeLayout.ALIGN_PARENT_LEFT);
            }else {
                params.addRule(RelativeLayout.ALIGN_PARENT_RIGHT);
            }
        }
    }

10.创建按钮的方法

 public int getLwk_background() {
        return lwk_background;
    }

    public void setLwk_background(int lwk_background) {
        this.lwk_background = lwk_background;

        //将外部传递过来的颜色  设置为背景颜色
        setBackgroundColor(lwk_background);
    }

    public boolean isShow_back() {
        return show_back;
    }

11.在mainactivity里面进行操作,如果用xml来操作的时候要把 ”//setContentView(R.layout.activity_main);”这个的双斜杠打开而将“test();”这个用双斜杠注释

2.png
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容