UI相关
请介绍下 Android 中常用的五种布局。
最常用的布局方式为 LinearLayout、RelativeLayout、FrameLayout、TableLayout、AbsoluteLayout。
其中 LinearLayout 和 RelativeLayout 是最常用的方式,他们可以通过在 xml 配置文件或者代码中进行布局。
FrameLayout 最简单的布局方式,放置的控件都只能罗列到左上角,控件会有重叠,不能
进行复杂的布局。
LinearLayou 可以通过 orientation 属性设置线性排列的方向是垂直(vertical)还是纵向 (horizontal).每行或每列只有一个元素,可以进行复杂的布局。
AbsoluteLayout 可以让子元素指定准确的 x/y 坐标值,并显示在屏幕上。AbsoluteLayout 没有页边框,允许元素之间互相重叠(尽管不推荐)。他是绝对坐标,所以在实际中不提倡使用。
RelativeLayout 允许子元素指定他们相对于其它元素或父元素的位置(通过 ID 指定)。因此,你可以以右对齐,或上下,或置于屏幕中央的形式来排列两个元素。元素按顺序排列,因此如果第一个元素在屏幕的中央,那么相对于这个元素的其它元素将以屏幕中央的相对位置来排列。这个是相对于AbsoluteLayout 的,采用的相对坐标,所以在实际中比较常用。
TableLayout 将子元素的位置分配到行或列中。一个 TableLayout 由许多的 TableRow 组成,每个 TableRow 都会定义一个 row 。TableLayout 容器不会显示 row 、column 或 cell 的边框线。每个 row 拥有 0 个或多个的 cell ;和 html 中的 table 差不多。在实际中也经常使用。
有的时候我们也会用到 GridView,就像我们手机屏幕上摆放的各个图标应该就是用 GridView 排版的。 Padding 是文字相对于边框,而 Margin 是边框相对于父窗体。
谈谈 UI 中, Padding 和 Margin 有什么区别?
Padding 是文字相对于边框,而 Margin 是边框相对于父窗体。
res 目录有默认几项 resource?
6 项,drawable-hdpi,drawable-ldpi,drawable-mdpi,layout,values。
widget 相对位置的完成在 antivity 的哪个生命周期阶段实现。
Android UI 中的 View 如何刷新。
一般只是希望在 View 发生改变时对 UI 进行重绘。你只需在 Activity 中显式地调用 View 对象中的 invalidate()方法即可。系统会自动调用 View 的 onDraw()方法。
NotifactionManager 使用原理
- 通过 getSystemService 方法获得一个 NotificationManager 对象。
- 创建一个 Notification 对象。每一个 Notification 对应一个 Notification 对象。在这一步需要设置显示在屏幕上方状态栏的通知消息、通知消息前方的图像资源 ID 和发出通知的时间。一般为当前时间。
- 由于 Notification 可以与应用程序脱离。也就是说,即使应用程序被关闭,Notification 仍然会显示在状态栏 中。当应用程序再次启动后,又可以重新控制这些Notification。如清除或替换它们。因此,需要创建一个 PendingIntent 对象。该对象由 Android系统负责维护,因此,在应用程序关闭后,该对象仍然不会被释放。
- 使用 Notification 类的 setLatestEventInfo 方法设置 Notification 的详细信息。
- 使用 NotificationManager 类的 notify 方法显示 Notification 消息。在这一步需要指定标识 Notification 的唯一 ID。这个 ID 必须相对于同一个NotificationManager 对象是唯一的,否则就会覆盖相同 ID 的 Notificaiton。
android 中的动画有哪几类,它们的特点和区别是什么?
Tween 动画、Frame 动画、属性动画
Tween 动画:这种实现方式可以使视图组件移动、放大、缩小以及产生透明度的变化;
Frame 动画(帧动画):传统的动画方法,通过顺序的播放排列好的图片来实现,类似电影。
IndexOutOfBoundsException: setSpan (200 … 200) ends beyond length 120
1 | Caused by: java.lang.IndexOutOfBoundsException: setSpan (200 ... 200) ends beyond length 120 |
分析得到的结论:EditText里没有设置内容,或者是EditText设置了maxLength,而start或end大于maxLength导致的
解决:
1 | String word = "这是要设置进去的内容,长度超过editText的maxLength"; |
1 | public class ProjectUtils{ |