我爱编程

屏幕适配

2018-04-17  本文已影响23人  没风的地方

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模式下可以看到)


image.png

在里面再新建一个同名的布局,在横竖屏切换时就会自动加载
*注意:注意保存参数,因为横竖屏切换经历了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的作用是目前使用的是哪个布局。

上一篇 下一篇

猜你喜欢

热点阅读