Android新特性

177 阅读3分钟

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)
    }
}

来看下效果:

image.png

大家发现了,没有分割线。分割线可以使用RecyleView.addItemDecoration()来添加,这个方法就是对一个item进行一个装饰。分割线的定义非常灵活。我们后面再看。