ConstraintLayout的使用可以参考 代码咖啡 的文章,当然也可以看google官方文档。推荐官方文档,最新最全最准确,示例很到位。
这里只讨论常用的适配,不讨论大屏(7英寸以上的)适配问题,想看可以看这里
屏幕的适配来源于android的开源,因此使用的厂商众多,各种型号千奇百怪,布局在不同的手机上显示的效果差异大,不能达到预期效果。
1 密度无关像素 dp
使用dp来设置大小,在不同的屏幕上会显示相对于屏幕的相同比例大小,比如在1080x1920的屏幕上用dp设置某条线段的长度,刚好占屏一半,在其他手机也会占据一半,他会根据不同的像素密度自动调整占用的像素个数。
2 布局的使用ConstraintLayout
使用这个新布局,这个布局吸收了RelativeLayout和LinearLayout等的优点,可以随意设置控件之间的关系和相对位置,非常的好用。还可以设置按比例来确定控件位置,对于屏幕的适配非常的适用,也使得屏幕适配更为简单和便捷。
3 使用.9.png
在需要扩展的按钮,使用.9图片可以使得图片质量不会变差。
4 ImageView图片的scaleType一般设置为center_crop
5 横竖屏切换布局
在res目录下新建一个layout_land文件夹(在project模式下可以看到)

在里面再新建一个同名的布局,在横竖屏切换时就会自动加载
*注意:注意保存参数,因为横竖屏切换经历了activity的销毁和重建,我们做如下操作1:
@Override
protected void onSaveInstanceState(Bundle outState) {
outState.putString("textview", mTextView.getText().toString());
super.onSaveInstanceState(outState);
}
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mTextView=(TextView)findViewById(R.id.textView);
//恢复数据
if (savedInstanceState != null) {
// Restore value of members from saved state
mTextView.setText(savedInstanceState.getString("textview"));
}
}
也可以这样操作2:
protected void onRestoreInstanceState(Bundle savedInstanceState) {
super.onRestoreInstanceState(savedInstanceState);
mTextView.setText(savedInstanceState.getString("textview"));
}
6 使用多布局,使用到布局别名,我们举个栗子吼(需要新建多个布局,对于项目时间紧迫的不适用)。
我们先建好布局:horizontal.layout、vertical.layout
<item name="main_layout" type="layout">@layout/horizontal</item>
<bool name="has_two_panes">false</bool>
</resources>
<item name="main_layout" type="layout">@layout/vertical</item>
<bool name="has_two_panes">true</bool>
</resources>
bool的作用是目前使用的是哪个布局。
网友评论