Android 屏幕适配攻略(五)动态创建控件并设置控件的大小

题记

—— 执剑天涯,从你的点滴积累开始,所及之处,必精益求精,即是折腾每一天。

重要消息

  • flutter中网络请求dio使用分析 视频教程在这里
  • Flutter 从入门实践到开发一个APP之UI基础篇 视频
  • Flutter 从入门实践到开发一个APP之开发实战基础篇
  • flutter跨平台开发一点一滴分析系列文章系列文章 在这里了

例如在 320 * 480 尺寸为 3.2 英寸的手机 ,对应的像素密度应该为 160dpi 对应的像素比例应该是 1.0也就是 1dp = 1sp = 1px

而在 480 * 1280 尺寸为 4.7英寸的手机中,对应的像素密度为 320dpi 对应的像素比例应该是2.0 也就是 1dp = 1sp = 2px

所以在设置控件的尺寸相关时,应当动态的根据屏幕的像素密度大小来计算

下面的实例中都是在 480 * 1280 尺寸为 4.7英寸 的手机中的效果

DisplayMetrics display = new DisplayMetrics();
//将当前窗口的一些信息放在DisplayMetrics类中,
this.getWindowManager().getDefaultDisplay().getMetrics(display);

//获取缩放比例 480 * 1280 尺寸为 4.7英寸 为2.0
float scaledDensity = display.scaledDensity;

1 设置已添加到布局文件中的控件来设置大小
1.1 设置宽度与高度以及内边距
//缩放比例 480 * 1280 尺寸为 4.7英寸 为2.0
//获取TextView
TextView mTvMainShow = (TextView) findViewById(R.id.tv_main_show);

//获取TextView对应的LayoutParams
LayoutParams layoutParams = mTvMainShow.getLayoutParams();

if (layoutParams != null) {

//设置宽度
layoutParams.width = (int) (120 * scaledDensity);
//设置高度
layoutParams.height = (int) (40 * scaledDensity);

}

//设置内容的内左边距 为20dp
mTvMainShow.setPadding((int) (20 * scaledDensity),0,0,0);
1.2 设置宽度与高度、内边距 以及外边距
//获取TextView
TextView mTvMainShow = (TextView) findViewById(R.id.tv_main_show);

//获取TextView对应的LayoutParams
LinearLayout.LayoutParams layoutParams = (LinearLayout.LayoutParams) mTvMainShow.getLayoutParams();

if (layoutParams != null) {

//设置宽度
layoutParams.width = (int) (120 * scaledDensity);
//设置高度
layoutParams.height = (int) (40 * scaledDensity);

//设置外左边距
layoutParams.setMargins((int) (20 * scaledDensity),0,0,0);

}

//设置内容的内左边距 为20dp
mTvMainShow.setPadding((int) (20 * scaledDensity),0,0,0);


需要注意的是,在这里,设置控件的外边距就必须指定 它的layoutParams的类型,例如我这里对应LinearLayout.LayoutParams

因为在设置其外边距的时候需要参考父布局,我这里的TextView是在一个线性布局容器中

布局容器名称

对应layoutParams

线性布局 LinearLayout

LinearLayout.LayoutParams

相对布局 LinearLayout

RelativeLayout.LayoutParams

帧布局 LinearLayout

FrameLayout.LayoutParams

表格布局 LinearLayout

TableLayout.LayoutParams


2 动态的创建新的控件并设置尺寸与添加到视图中
//缩放比例 480 * 1280 尺寸为 4.7英寸 为2.0

LinearLayout mLlPrent = (LinearLayout) findViewById(R.id.ll_prent);

//创建TextView
TextView textView = new TextView(this);

//设置TextView的大小
//创建LayoutParams
//参数一 对应的宽度大小
//参数二 对应的高度大小
LinearLayout.LayoutParams layoutParams1 = new LinearLayout.LayoutParams((int) (120 * scaledDensity), (int) (40 * scaledDensity));

//设置外边距
//参数一 设置左外边距
//参数二 设置顶部外边距
//参数三 设置右外边距
//参数四 设置底部外边距
layoutParams1.setMargins((int) (40 * scaledDensity),(int) (40 * scaledDensity),0,0);

//设置内边距
textView.setPadding(0,0,0,0);

//设置大小
textView.setLayoutParams(layoutParams1);
//设置背景
textView.setBackgroundColor(Color.GRAY);
//添加到布局文件中
mLlPrent.addView(textView);


2.1 对应的xml布局文件
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android = "http://schemas.android.com/apk/res/android"
android:layout_width = "match_parent"
android:layout_height = "match_parent"
android:gravity = "center_vertical"
android:id="@+id/ll_prent"
android:orientation = "vertical" >


<TextView android:id = "@+id/tv_main_show"
android:layout_width = "100dp"
android:text="test"
android:gravity="center_vertical"
android:textSize="14sp"
android:textColor="#fff"
android:layout_height = "44dp"
android:background = "#294881" />
</LinearLayout >

完毕


Android 动态创建控件并设置控件的大小之Android屏幕适配攻略(五)_android