纯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中的位置,之后添加该视图到布局中即可