也许很多人会反对这种方法,因为即使是官方也是推荐使用xml的方式写布局。不过我们在这不会像Swing那样写那么多麻烦的布局代码,因为我们只是在代码中重新设定控件的宽高度而已,其他属性依然是交给xml布局文件的。这个方法其实是我跟同事偷学来的,虽然我不赞成这样的方法,但他确确实实也是解决屏幕自适应问题的方案之一,而且它没我想象的那么复杂,其实很简单。
首先我们要做的是获取当前屏幕的宽高度,因为这个在后面要用到
我们可以写两个静态变量用来保存当前屏幕的宽高度:
|
01
02
03
04
|
public
class
Constant {
public
static
int
displayWidth;//屏幕宽度
public
static
int
displayHeight; //屏幕高度
}
|
然后在第一个Activity启动的时候,获取这两个值
|
01
02
03
04
|
DisplayMetrics
displayMetrics = new
DisplayMetrics();
getWindowManager().getDefaultDisplay().getMetrics(displayMetrics);
Constant.displayWidth
= displayMetrics.widthPixels;
Constant.displayHeight
= displayMetrics.heightPixels;
|
布局代码我们可以全都统一写成wrap-content,其实写成什么都无所谓,因为这个值只是暂时的
|
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
|
<?xml
version="1.0"
encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent">
<Button
android:id="@+id/btn1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="#ffcccc"
android:text="aaaaaaaa"/>
<Button
android:id="@+id/btn2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="#ccffcc"
android:text="bbbbbbbbb"/>
<Button
android:id="@+id/btn3"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="#ccccff"
android:text="ccccccccc"/>
<Button
android:id="@+id/btn4"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="#ffffcc"
android:text="dddddddddddddddddd"/>
</LinearLayout>
|
最后我们在Activity的onCreate方法里这么做
|
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
|
//
第一个按钮,宽度100%,高度10%
LinearLayout.LayoutParams
params = new
LinearLayout.LayoutParams(
LayoutParams.FILL_PARENT,
(int)
(Constant.displayHeight * 0.1f
+ 0.5f));
btn1.setLayoutParams(params);
//
第二个按钮,宽度100%,高度30%
LinearLayout.LayoutParams
params2 = new
LinearLayout.LayoutParams(
LayoutParams.FILL_PARENT,
(int)
(Constant.displayHeight * 0.3f
+ 0.5f));
btn2.setLayoutParams(params2);
//
第三个按钮,宽度50%,高度20%
LinearLayout.LayoutParams
params3 = new
LinearLayout.LayoutParams(
(int)
(Constant.displayWidth * 0.5f
+ 0.5f),
(int)
(Constant.displayHeight * 0.2f
+ 0.5f));
btn3.setLayoutParams(params3);
//
第三个按钮,宽度70%,高度填满剩下的空间
LinearLayout.LayoutParams
params4 = new
LinearLayout.LayoutParams(
(int)
(Constant.displayWidth * 0.7f
+ 0.5f),
LayoutParams.FILL_PARENT);
btn4.setLayoutParams(params4);
|
大家可以看到其实代码并不复杂,都能看得懂
下面是效果显示图