也许很多人会反对这种方法,因为即使是官方也是推荐使用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);
|
大家可以看到其实代码并不复杂,都能看得懂
下面是效果显示图
2211

被折叠的 条评论
为什么被折叠?



