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

题记

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

重要消息

例如在 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布局文件

android:layout_width = "match_parent"

android:layout_height = "match_parent"

android:gravity = "center_vertical"

android:id="@+id/ll_prent"

android:orientation = "vertical" >

android:layout_width = "100dp"

android:text="test"

android:gravity="center_vertical"

android:textSize="14sp"

android:textColor="#fff"

android:layout_height = "44dp"

android:background = "#294881" />

完毕

本文同步分享在 博客“早起的年轻人”(CSDN)。

如有侵权,请联系 support@oschina.cn 删除。

本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一起分享。

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐