5.0新特性
5.0(DK21)主要带来了以下几个方面的改变:
1.全新的Material Design 设计风格。这个风格最主要的特点就是带来质感,在显示上推崇实体隐喻。在动效上符合物理规律。
2.支持多种设备
3.全新的通知中心。优先显示对用户重要的信息,不太紧急的隐藏起来。用户向下滑动,就可以看到全部的通知内容。
4.支持64位ART虚拟机。 放弃了之前一直使用的delvik虚拟机,改用了ART虚拟机。实现了真正的跨平台编译。在ARM,X86,MIPS等中无处不在。
5.OverView 也就是最近程序。在界面中,每个APP都是一张独立的卡片。拥有层叠的效果。
6.特定设备解锁 比如戴着绑定了的手表的时候,手机就能解锁。
7.Ok Google指令 当手机处于待机的时候,对手机说出Ok google就能唤醒。之后可以用语音继续操控。
8.面部解锁 在5.0中,google大幅优化了面部解锁。就是拿起手机看通知的时候,就完成了解锁。
重大UI的改进: 使用RecycleView 来替换ListView 和GridView
为什么要推出这个东西?因为RecycleView提供了一种插拔式的体验。具有高度解耦,非常的灵活多变,非常高的效率。通过设置不同的layoutManager,ItemDecoration,ItemAnimator可以实现非常丰富的效果。但是RV有两个最让人头疼的地方:1.分割线需要自己自定义。 2.列表的点击事件需要自己去实现。
来看下如何使用RV: 1.一般现在新建的项目都会自动把需要的依赖添加在build.gradle里。不过你想自己添加也可以。 2.使用RV
步骤有这么几个:
1.rv要设置layoutManager
2.rv 设置adpter
3.adapter设置数据
RecyeView最大的改进就是对ViewHolder进行封装定义。大家回想下以前使用listview,在adapter里直接继承baseAdapter,然后直接重写getView方法,在里面进行layoutInflate.inflate布局,然后写数据。效率比较差。我们现在只需要自定义一个ViewHolder继承RecyleView.ViewHolder就可以了。另外,adapter也是继承RecyleView.Adapter就可以了。在onCreateView里加载布局条目。 下面我们来看下adapter是怎么来创建。
class HomeAdapter(private val mList:Array<String>) : RecyclerView.Adapter<HomeAdapter.MyViewHolder>() {
class MyViewHolder(view:View) : RecyclerView.ViewHolder(
view
) {
val tv:TextView
init {
tv = view.findViewById(R.id.tv_item)
}
}
//创建新的view(layoutManager调用这个方法)
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): MyViewHolder {
//创建一个view,用来定义列表的item
val view = LayoutInflater.from(parent.context).inflate(R.layout.item_recycle,parent,false)
return MyViewHolder(view)
}
//替换View的内容(layoutManager调用这个方法)
override fun onBindViewHolder(holder: MyViewHolder, position: Int) {
holder.tv.text = mList[position]
}
override fun getItemCount(): Int {
return mList.size
}
}
这里看下RV使用时候的代码:
class RvActivity: AppCompatActivity() {
val myList = arrayOf("you","me","her")
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_rv)
val myRv = findViewById<RecyclerView>(R.id.recycle_view)
//设置布局管理器
myRv.layoutManager = LinearLayoutManager(this)
//如果需要使用横向的则可以使用 LinerLayoutManager.setOrientation(LinearLayoutManager.HORIZONTAL)
//设置item增加和删除时候的动画
myRv.itemAnimator = DefaultItemAnimator()
//设置适配器
myRv.adapter = HomeAdapter(myList)
}
}
来看下效果:
大家发现了,没有分割线。分割线可以使用RecyleView.addItemDecoration()来添加,这个方法就是对一个item进行一个装饰。分割线的定义非常灵活。我们后面再看。