android屏幕适配理解

1.使用友盟查看主流屏幕分辨率;
友盟分辨率统计
数据来源:友盟android设备分辨率统计
数据分析:由数据可知,只要满足前六种分辨率即可满足90%以上的手机屏幕;所以主要适配这六种屏幕;
2. 在AndroidManifest.xml中添加兼容性支持;

<supports-screens
                  <!--自动兼容屏幕大小,已过时,应用与1.5过渡到1.6 -->
                  android:resizeable=["true"|"false"]
                  <!-- 是否支持较小外形的屏幕,-->
                  android:smallScreens=["true" | "false"]
                  <!-- 是否支持普通外形屏幕,包括HVGA、WQVGA、WVGA-->
                  android:normalScreens=["true" | "false"]
                  <!--是否支持大屏,应添加true,否则会启用兼容模式 -->
                  android:largeScreens=["true" | "false"]
                  <!--是否支持超大屏 -->
                  android:xlargeScreens=["true" | "false"]
                  <!--支持任何像素密度,默认true -->
                  android:anyDensity=["true" | "false"]
                  <!-- 允许的最小屏幕尺寸,用于过来设备-->
                  android:requiresSmallestWidthDp="integer"
                  <!--屏幕最小边大于该值,启动兼容模式,可选是否关闭 -->
                  android:compatibleWidthLimitDp="integer"
                  <!-- -屏幕最小边大于该值,强制启动兼容模式,不可关闭->
                  android:largestWidthLimitDp="integer"/>

3.使用wrap_content、 match_parent、layout_weight 设置高度或宽度;
wrap_content:将视图压缩到适应视图内容的最小尺寸;
match_parent:将视图拉伸到父视图的最大尺寸;
layout_weight :按照父视图的百分比显示子视图;
4. 使用相对布局;
相对布局,可以很好的控制组件的位置;
5. 使用独立密度dp设置固定的宽高,使用sp设置字体大小;
定义:
屏幕尺寸:对角线长度;s
分辨率:屏幕宽和高,分别拥有的像素点;1920*1080,h*w
ppi:每英寸屏幕拥有的像素点;ppi=(√(w*w +h*h))/s;
dpi: 像素密度,即每英寸屏幕拥有的像点;
dp:即dip,独立像素密度;1dp表示在屏幕点密度为160ppi时
1px长度;1dp=((1px-0.5)*160)/(ppi);
px:像素,1px=(1dp*(ppi)/160+0.5);
注:以屏幕显示,dpi等于ppi,但是原理不同;
参考:
http://blog.csdn.net/wuyao721/article/details/5286753
http://www.zhihu.com/question/21220154

6.使用自动拉伸图片.9.png;
使用sdk中的draw9patch.bat制作.9.png图片;
制作方法
参考:
http://blog.csdn.net/greatstar/article/details/5936177
7. 使用限定符,为不同的屏幕显示不同布局;
限定符分为三种:尺寸限定符,方向限定符,最小宽度限定符;
尺寸限定符:layout-large;
系统会在属于较大屏幕(例如 7 英寸或更大的平板电脑)的设备上选择此布局。系统会在较小的屏幕上选择其他布局(无限定符)。
最小宽度限定符:layout-sw600dp
数字可更改,表示在大于等于600dp的屏幕上,使用该文件夹下的布局;
方向限定符:values-sw600dp-land或values-sw600dp-port
land表示横屏,port表示竖屏;
8. 使用布局的别名,重用布局;

<!-- BEGIN_INCLUDE(all) -->
<resources>
<!-- 显示布局@layout/onepane_with_bar,不显示has_two_panes-->
    <item name="main_layout" type="layout">@layout/onepane_with_bar</item>
    <bool name="has_two_panes">false</bool>
</resources>
<!-- END_INCLUDE(all) -->

9.根据当前显示的布局,进行相应的适配;

public class NewsReaderActivity extends FragmentActivity {
    boolean mIsDualPane;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main_layout);

        View articleView = findViewById(R.id.article);
        mIsDualPane = articleView != null &&
                        articleView.getVisibility() == View.VISIBLE;
    }
}

10.根据当前响应的布局,显示不同的效果;

@Override
public void onHeadlineSelected(int index) {
    mArtIndex = index;
    if (mIsDualPane) {
        /* display article on the right pane */
        mArticleFragment.displayArticle(mCurrentCat.getArticle(index));
    } else {
        /* start a separate activity */
        Intent intent = new Intent(this, ArticleActivity.class);
        intent.putExtra("catIndex", mCatIndex);
        intent.putExtra("artIndex", index);
        startActivity(intent);
    }
}

11.在其他Activity中复用Fragment

参考:
极客学院wiki地址
谷歌官方适配实例源码
AndroidManifest.xml文件详解(supports-screens)
Android屏幕适配全攻略(最权威的官方适配指导)
android 布局

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值