Android动态添加View

这里以创建一个ImageView为例


1. 首先创建对象

ImageView newImg = new ImageView(getContext());

2. 设置对应的属性

//设置想要的图片,相当于android:src="@drawable/image"
newImg.setImageResource(R.drawable.image);
newImg.setScaleType(ImageView.ScaleType.FIT_CENTER);

3. 创建布局参数

设置子控件在父容器中的位置布局,wrap_content,match_parent

LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(
    ViewGroup.LayoutParams.MATCH_PARENT,
    ViewGroup.LayoutParams.WRAP_CONTENT);

也可以设置自己想要的宽度,参数(int width, int height)均表示px
如果是dp单位,需要先获取屏幕的分辨率再求出密度
根据屏幕ppi=160时,1px=1dp
则公式为 dp * ppi / 160 = px ——> dp * dendity = px
如设置为48dp:1、获取屏幕的分辨率 2、求出density 3、设置

DisplayMetrics displayMetrics = new DisplayMetrics();
getWindowManager().getDefaultDisplay().getMetrics(displayMetrics);
float density = displayMetrics.density;
LinearLayout.LayoutParams params1 = new LinearLayout.LayoutParams(
    (int) (48 * density),
    (int) (48 * density));

4. 设置其他参数

以下代码相当于android:layout_marginLeft="8dp"

params.leftMargin = 8;
params.bottomMargin = 10;

5. 添加布局

  • addView(View child),默认往已有的view后面添加,后插入,如果不设置布局params默认为wrap_content
mLayoutContainer.addView(newImg);
  • addView(View child, LayoutParams params),往已有的view后面添加,后插入,并设置布局
mLayoutContainer.addView(newImg, params1);
  • addView(View view, int index, LayoutParams params),在某个index处插入
mLayoutContainer.addView(newImg, 0, params1);

你可能感兴趣的:(Android动态添加View)