纯java代码写视图添加到布局中(RelativeLayout)

纯java代码写视图添加到布局中(RelativeLayout)

说明:把各种视图例如:TextView等用纯java代码塞进非线性布局RelativeLayout中

public class SpecialCustomView extends RelativeLayout{
  /*
    * 所要添加的视图类型
    * */
    private TextView tv_rotate;
    private View dLine_one;
    private TextView tv_copy;
    private View dLine_two;
    private TextView tv_delete;
    private View dLine_three;
    private TextView tv_edit;
    private View customView;//动态设置的视图

    //子视图的布局参数
    private RelativeLayout.LayoutParams tvRotateLP,tvCopyLP,tvDelLP,tvEditLP
            ,lineOneLP,lineTwoLP,lineThreeLP,customViewLP;
    private static final int DIVIDE_PADDING=15;//padding
    private static final int DIVIDE_TOP=20;//margin的上边间隔
    private static final float TEXT_SIZE=18;//文本的字体大小
    private static final int DIVIDE_CUSTOM=180;//传入的视图和操作布局的间距

    //    private Context mContext;
    public SpecialCustomView(Context context) {
        this(context,null);
    }

    public SpecialCustomView(Context context, AttributeSet attrs) {
        this(context, attrs,0);
    }

    //继承一个组件必须要实现重写自己的构造方法---请无视
    public SpecialCustomView(Context context, AttributeSet attrs, int defStyleAttr) {
        super(context, attrs, defStyleAttr);
//        mContext=context;
        initView(context);
    }

    /**
     *初始化视图的布局
     * */
    private void initView(Context context){
        tv_rotate=new TextView(context);
        tv_copy=new TextView(context);
        tv_delete=new TextView(context);
        tv_edit=new TextView(context);
        dLine_one=new View(context);
        dLine_two=new View(context);
        dLine_three=new View(context);

        tv_rotate.setId(TV_ROTATE);
        tv_copy.setId(TV_COPY);
        tv_delete.setId(TV_DELETE);
        tv_edit.setId(TV_EDIT);
        dLine_one.setId(DIVIDELINE_ONE);
        dLine_two.setId(DIVIDELINE_TWO);
        dLine_three.setId(DIVIDELINE_THEREE);

        tvRotateLP=new RelativeLayout.LayoutParams(LayoutParams.WRAP_CONTENT,LayoutParams.WRAP_CONTENT);
        tvCopyLP=new RelativeLayout.LayoutParams(LayoutParams.WRAP_CONTENT,LayoutParams.WRAP_CONTENT);
        tvDelLP=new RelativeLayout.LayoutParams(LayoutParams.WRAP_CONTENT,LayoutParams.WRAP_CONTENT);
        tvEditLP=new RelativeLayout.LayoutParams(LayoutParams.WRAP_CONTENT,LayoutParams.WRAP_CONTENT);
        lineOneLP=new RelativeLayout.LayoutParams(1,LayoutParams.WRAP_CONTENT);
        lineTwoLP=new RelativeLayout.LayoutParams(1,LayoutParams.WRAP_CONTENT);
        lineThreeLP=new RelativeLayout.LayoutParams(1,LayoutParams.WRAP_CONTENT);
        //传入控件的布局参数
        customViewLP=new RelativeLayout.LayoutParams(iWidth,iHeight);

        //设置子布局全体居中显示
        setGravity(RelativeLayout.CENTER_HORIZONTAL);
        //设置背景色---透明
        setBackgroundColor(Color.TRANSPARENT);

        //布局参数设置
        tvRotateLP.setMargins(0,DIVIDE_TOP,0,0);
        tvRotateLP.addRule(RelativeLayout.ALIGN_PARENT_LEFT,RelativeLayout.TRUE);
        tvRotateLP.addRule(RelativeLayout.ALIGN_PARENT_TOP,RelativeLayout.TRUE);


        lineOneLP.addRule(RelativeLayout.RIGHT_OF,TV_ROTATE);
        lineOneLP.addRule(RelativeLayout.ALIGN_TOP,TV_ROTATE);
        lineOneLP.addRule(RelativeLayout.ALIGN_BOTTOM,TV_ROTATE);

        tvCopyLP.setMargins(0,DIVIDE_TOP,0,0);
        tvCopyLP.addRule(RelativeLayout.RIGHT_OF,DIVIDELINE_ONE);

        lineTwoLP.addRule(RelativeLayout.RIGHT_OF,TV_COPY);
        lineTwoLP.addRule(RelativeLayout.ALIGN_TOP,TV_ROTATE);
        lineTwoLP.addRule(RelativeLayout.ALIGN_BOTTOM,TV_ROTATE);

        tvDelLP.setMargins(0,DIVIDE_TOP,0,0);
        tvDelLP.addRule(RelativeLayout.RIGHT_OF,DIVIDELINE_TWO);

        lineThreeLP.addRule(RelativeLayout.RIGHT_OF,TV_DELETE);
        lineThreeLP.addRule(RelativeLayout.ALIGN_TOP,TV_ROTATE);
        lineThreeLP.addRule(RelativeLayout.ALIGN_BOTTOM,TV_ROTATE);

        tvEditLP.setMargins(0,DIVIDE_TOP,0,0);
        tvEditLP.addRule(RelativeLayout.RIGHT_OF,DIVIDELINE_THEREE);

        customViewLP.setMargins(0,DIVIDE_CUSTOM,0,0);
        customViewLP.addRule(RelativeLayout.BELOW,TV_ROTATE);


        //添加到RelativeLayout布局中
        addView(tv_rotate,tvRotateLP);
        addView(tv_copy,tvCopyLP);
        addView(tv_delete,tvDelLP);
        addView(tv_edit,tvEditLP);
        addView(dLine_one,lineOneLP);
        addView(dLine_two,lineTwoLP);
        addView(dLine_three,lineThreeLP);

        //添加文字背景等---灰色背景和白色文字
        tv_rotate.setText("旋转");//文字
        tv_rotate.setTextColor(Color.WHITE);//文字颜色
        tv_rotate.setTextSize(TEXT_SIZE);//文字大小
        tv_rotate.setPadding(DIVIDE_PADDING,DIVIDE_PADDING,DIVIDE_PADDING,DIVIDE_PADDING);//padding
        tv_rotate.setGravity(Gravity.CENTER);//文字居中
        tv_rotate.setBackgroundColor(Color.GRAY);//背景颜色

        tv_copy.setText("复制");
        tv_copy.setTextColor(Color.WHITE);
        tv_copy.setTextSize(TEXT_SIZE);
        tv_copy.setPadding(DIVIDE_PADDING,DIVIDE_PADDING,DIVIDE_PADDING,DIVIDE_PADDING);
        tv_copy.setGravity(Gravity.CENTER);
        tv_copy.setBackgroundColor(Color.GRAY);

        tv_delete.setText("删除");
        tv_delete.setTextColor(Color.WHITE);
        tv_delete.setTextSize(TEXT_SIZE);
        tv_delete.setPadding(DIVIDE_PADDING,DIVIDE_PADDING,DIVIDE_PADDING,DIVIDE_PADDING);
        tv_delete.setGravity(Gravity.CENTER);
        tv_delete.setBackgroundColor(Color.GRAY);

        tv_edit.setText("编辑");
        tv_edit.setTextColor(Color.WHITE);
        tv_edit.setTextSize(TEXT_SIZE);
        tv_edit.setPadding(DIVIDE_PADDING,DIVIDE_PADDING,DIVIDE_PADDING,DIVIDE_PADDING);
        tv_edit.setGravity(Gravity.CENTER);
        tv_edit.setBackgroundColor(Color.GRAY);

        //分割线的背景---黑色
        dLine_one.setBackgroundColor(Color.BLACK);
        dLine_two.setBackgroundColor(Color.BLACK);
        dLine_three.setBackgroundColor(Color.BLACK);

        //显示和隐藏部分视图

        //添加点击监听
        //tv_rotate.setOnClickListener(this);
        //tv_copy.setOnClickListener(this);
        //tv_delete.setOnClickListener(this);
        //tv_edit.setOnClickListener(this);

        //处理要动态设置的视图
        switch (iType){
            case TEXT_VIEW:
                customView=new TextView(context);
                ((TextView)customView).setText("为什么android studio写布局文件不提示了");
                ((TextView)customView).setBackgroundColor(Color.GRAY);
                addView(customView,customViewLP);
                break;
            case EDIT_VIEW:
//                customView=new EditText(context);
                break;
            case IMAGE_VIEW:
//                customView=new ImageView(context);
                break;
            case AUDIO_VIEW:
                break;
            case VIDEO_VIEW:
                break;
            default:
                //如果不设置默认是-1,即不添加视图
                customView=new TextView(context);
                ((TextView)customView).setText("为什么android studio写布局文件不提示了");
                ((TextView)customView).setTextColor(Color.BLACK);
                ((TextView)customView).setBackgroundColor(Color.GRAY);
                addView(customView,customViewLP);
                break;
        }
   }

}

重点就是:new创建视图对象,然后创建布局参数对象,设置在布局RelativeLayout中的位置,之后添加该视图到布局中即可

猜你喜欢

转载自blog.csdn.net/zb52588/article/details/80253433