Android面试常见知识点【二】(不定期更新)

屏幕适配中一些单位的换算:

1. 什么是屏幕尺寸、屏幕分辨率、屏幕像素密度?

  • · 屏幕尺寸是指屏幕对角线的长度。单位是英寸,1英寸=2.54厘米;
  • · 屏幕分辨率是指在横纵向上的像素点数,单位是px,1px=1像素点,一般是纵向像素横向像素,如1280*720;
  • · 屏幕像素密度是指每英寸上的像素点数,单位是dpi,即“dot per inch”的缩写,像素密度和屏幕尺寸和屏幕分辨率有关。

               

  • 例如:计算Nexus5的屏幕像素密度:屏幕尺寸:4.95inch、分辨率:1920*1080,屏幕像素密度:445

                  

和官方给出的一样,说明我们计算正确。

2.什么是dp、dip、dpi、sp、px?之间的关系是什么?

    • dip:Density Independent Pixels(密度无关像素)的缩写。以160dpi为基准,1dp=1px

    • dp:同dip
    • dpi:屏幕像素密度的单位,“dot per inch”的缩写
    • px:像素,物理上的绝对单位
    • sp:Scale-Independent Pixels的缩写,可以根据文字大小首选项自动进行行缩放。Google推荐我们使用12sp以上的大小,通常可以使用12sp、14sp、18sp、22sp,最好不要使用奇数和小数。
    • 说明:如果A设备的参数为480×320,160dpi,B设置的参数为800×480,240dpi。我们要画出一条和屏幕宽度一样长的直线,如果使用px作为单位,必须在A设备上设置为320px,在B设备上设置480px。但是如果我们使用dp作为单位,由于以160dpi为基准,1dp=1px,所以A设备上设置为320dp就等于屏幕宽度(320px),在B设备上设置为320dp就等于320×(240/160)=480px,即B设备的屏幕宽度。这样,使用dp作为单位就可以实现简单的屏幕适配。这知识一种巧合,也有B设备的像素密度不是这样刚刚好的,就需要我们运用别的屏幕适配技术。

3.什么是mdpi、hdpi、xdpi、xxdpi、xxxdpi?如何计算和区分?

用于区分不同的像素密度。

Google官方开发文档中,说明了 mdpi:hdpi:xhdpi:xxhdpi:xxxhdpi=2:3:4:6:8 的尺寸比例进行缩放。例如,一个图标的大小为48×48dp,表示在mdpi上,实际大小为48×48px,在hdpi像素密度上,实际尺寸为mdpi上的1.5倍,即72×72px,以此类推。

4.屏幕分辨率及density 、densityDpi代码:

mText = (TextView) findViewById(R.id.text);

        DisplayMetrics metric = new DisplayMetrics();

        getWindowManager().getDefaultDisplay().getMetrics(metric);

        int width = metric.widthPixels;  // 屏幕宽度(像素)

        int height = metric.heightPixels;  // 屏幕高度(像素)

        float density = metric.density;  // 屏幕密度(0.75 / 1.0 / 1.5)

        int densityDpi = metric.densityDpi;  // 屏幕密度DPI(120 / 160 / 240)

        String info = "手机型号: " + android.os.Build.MODEL + ",\nSDK版本:"   

                + android.os.Build.VERSION.SDK + ",\n系统版本:"   

                + android.os.Build.VERSION.RELEASE  + "\n屏幕宽度(像素): "                       
                +width + "\n屏幕高度(像素): " + height + "\n屏幕密度:  "                             
                +density+"\n屏幕密度DPI: "+densityDpi;

        Log.d("system Enviriment", info);

        mText.setText(info);

Fragment:(上一篇中讲了fragment的生命周期,这里简单介绍下fragment)

fragment概念:

  • Android3.0引入的新特性:Fragment(碎片)
  • Fragment允许将Activity拆分成多个完全独立封装的可重用的组件
  • 每个Fragment都有自己的生命周期和UI布局
  • Fragment必须依赖于Activity,不能单独存在
  • Fragment是一个轻量级的Activity

Fragment的基本使用:

  1. 定义类继承自Fragment类
    1. android.app.Fragment//Android 3.0引入
    2. android.support.v4.app.Fragment//兼容3.0以下版本
  2. 重写Fragment的onCreateView()生命周期方法,并返回一个View
  3. 在布局文件中使用<fragment android:name="自定义Fragment的类路径"/>

Fragment之间的通讯:

  • Fragment之间的通讯必须通过他们所在的Activity来实现
  • Fragment.getActivity():获取Fragment所在的Activity对象
  • Activity.getFragmentManager().findFragmentById(int):在Activity中通过id寻找Fragment

Fragment的管理:

  • 涉及的类:
    • FragmentManager:每一个Activity都包含一个FragmentManager来管理它所包含的Fragment,获取FragmentManager对象:FragmenrtManager fm = getFragmentManager();
    • FragmentTransaction:
      • 事物:保证任务执行的完整性
      • FragmentTransaction可以用来在一个Activity内添加、删除和替换Fragment
      • 使用步骤:开启并提交事物
        1. FragmentTransaction ft = fm.beginTransaction();
        2. 添加、删除和替换Fragment
        3. ft.commit();
  • 添加、删除和替换Fragment
    • 添加Fragment:    ft.add(int,Fragment)
    • 删除Fragment:  ft.remove(Fragment)
    • 替换Fragment:    ft.replace(int,Fragment)
  • 使用FragmentManager查找Fragment
    • findFragmentById(int id)
    • findFragmentByTag(String tag)




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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值