安卓面试Android开发Android开发经验谈

Android 面试题之基础(不断更新)

2017-12-06  本文已影响189人  侯蛋蛋_

布局面试问题

1.1 Android 中常用的布局都有哪些?

1.2 谈谈 UI 中, Padding 和 Margin 有什么区别?

android:padding 和 android:layout_margin 的区别,其实概念很简单,padding 是站在父 view 的角度描述问 题,它规定它里面的内容必须与这个父 view 边界的距离。margin 则是站在自己的角度描述问题,规定自己和其他(上下左右)的 view 之间的距离,如果同一级只有一个 view,那么它的效果基本上就和 padding 一样了。

1.3 使用权重如何让一个控件的宽度为父控件的 1/3?

可以在水平方向的 LinearLayout 中设置 weightSum 为 3,然后让其子控件的 weight 为 1,那么该子控件就是 父控件的 1/3。

1.4 Android 中布局的优化措施都有哪些?

参考文章

这个问题也属于Android 性能优化的一部分。

1.5 android:layout_gravity 和 android:gravity 的区别?

android:gravity:设置的是控件自身上面的内容位置 android:layout_gravity:设置控件本身相对于父控件的显示位置。

1.6 关于LinearLayout 的权重算法?

    <LinearLayout
    android:layout_width="210dp"
    android:layout_height="wrap_content"
    android:orientation="horizontal">

    <Button
        android:layout_width="30dp"
        android:layout_height="40dp"
        android:layout_weight="1"
        android:text="button1" />

    <Button
        android:layout_width="30dp"
        android:layout_height="40dp"
        android:layout_weight="1"
        android:text="button2" />

    <Button
        android:layout_width="30dp"
        android:layout_height="40dp"
        android:layout_weight="2"
        android:text="button3" />
     </LinearLayout>

如上代码,如何计算出每一个Button的宽度?

布局大小=剩余空间大小权重所占比例+设定的宽度

image.png

1.7 scrollView 嵌套 listview 方式除了测量还有什么方法?(了解)

1.8 px、dp、dip、dpi、sp 等到底有什么联系区别

1.9 如何将Acitivity中的Window的背景图设置为空?

getWindow().setBackgroundDrawable(null);android的默认背景是不是为空。

2.0 布局适配(理解)

在明白上面基础问题的一些基本概念后,这里总结了一些布局适配的经验。
在Android 中 有4种普遍尺寸:小(small),普通(normal),大(large),超大(xlarge)
常见的普遍分辨率: 低精度(ldpi), 中精度(mdpi), 高精度(hdpi), 超高精度(xhdpi) 1080P(xxhdpi)

View 初步了解

  1. View是什么?

    简单来说,View是Android系统在屏幕上的视觉呈现,也就是说你在手机屏幕上看到的东西都是View。

  2. View是如何绘制出来的?

    View的绘制流程是从ViewRoot的performTraversals()方法开始,依次经过measure(),layout()和draw()三个过程才最终将一个View绘制出来。

    后面的章节会详细讲View 绘制过程,这里只是基础略带一下。

  3. View是怎么呈现在界面上的?

    Android中的视图都是通过Window来呈现的,不管Activity、Dialog还是Toast它们都有一个Window,然后通过WindowManager来管理View。Window和顶级View——DecorView的通信是依赖ViewRoot完成的。

  4. 关于Android View控件的理解

    Android中控件大致被分为两类ViewGroup,View。ViewGroup作为容器管理View。Android视图,是类似于Dom树的架构。父视图负责测量定位绘制等操作。我们经常在用的findViewById 方法代价昂贵的原因,就是因为他负责至上而下遍历整棵控件树,来寻找View实例,在重复操作中尽量少用。现在在用的很多控件都是直接或者间接继承自View的,为了方便理解可看下图

    这里写图片描述
  5. View和ViewGroup什么区别?

    Android的UI界面都是由View和ViewGroup及其派生类组合而成的。其中,View是所有UI组件的基类,而ViewGroup是容纳这些组件的容器,其本身也是从View派生出来的。AndroidUI界面的一般结构可参见

    这里写图片描述

    需要注意的是嵌套次数最好不要超过10层,否则会降低效率,上图是3层

  6. Android View刷新机制?

    在Android的布局体系中,父View负责刷新、布局显示子View;而当子View需要刷新时,则是通知父View来完成

  7. RelativeLayout和LinearLayout性能比较?

    1.RelativeLayout会让子View调用2次onMeasure,LinearLayout 在有weight时,也会调用子View2次onMeasure

    2.RelativeLayout的子View如果高度和RelativeLayout不同,则会引发效率问题,当子View很复杂时,这个问题会更加严重。如果可以,尽量使用padding代替margin。

    3.在不影响层级深度的情况下,使用LinearLayout和FrameLayout而不是RelativeLayout。

  8. Android UI界面架构理解

    每个Activity,Dialog,Toast都包含一个PhoneWindow对象,PhoneWindow设置DecorView为应用窗口的根视图。在里面就是熟悉的TitleView和ContentView,没错,平时使用的setContentView()就是设置的ContentView。

    这里写图片描述
上一篇 下一篇

猜你喜欢

热点阅读