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

来源:互联网 发布:linux中vi显示行号 编辑:程序博客网 时间:2024/06/07 12:45

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.0float scaledDensity = display.scaledDensity;

1 设置已添加到布局文件中的控件来设置大小
1.1 设置宽度与高度以及内边距
//缩放比例 480 * 1280 尺寸为 4.7英寸 为2.0//获取TextViewTextView mTvMainShow = (TextView) findViewById(R.id.tv_main_show);//获取TextView对应的LayoutParamsLayoutParams 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 设置宽度与高度、内边距 以及外边距
//获取TextViewTextView mTvMainShow = (TextView) findViewById(R.id.tv_main_show);//获取TextView对应的LayoutParamsLinearLayout.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);}//设置内容的内左边距 为20dpmTvMainShow.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.0LinearLayout mLlPrent = (LinearLayout) findViewById(R.id.ll_prent);//创建TextViewTextView 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 >
阅读全文
0 0