Android5.0新特性

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/weixin_37292229/article/details/71404524

Android 5.0 Lollipop([ˈlɒlipɒp]n. 棒棒糖) 是 Google 于 2014 年 10 月 15 日(美国太平洋时间)发布的全新 Android 操作系统。
一:现在咱们讲解Android开发者常用到的内容。
1.1.全新的Material Design设计风格
因为篇幅太长,会在本文https://blog.csdn.net/weixin_37292229/article/details/71439709中详细讲解
1.2.替换ListView和GridView的RecyclerView
1.3.卡片CardView
1.4.通知三种不同的Notification
1.5.标题栏ToolBar
1.6.Palette:提取颜色,让主题动态适应当前界面的色调—Palette( 英 [ˈpælət]调色板)
二.RecyclerView的使用
2.1.配置build.gradle

 compile 'com.android.support:recyclerview-v7:27.1.1'

2.2.在xml文件中使用recyclerview

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context="com.labo.mvpsample.recyclerviewDemo.RecyclerViewDemoActivity">
<android.support.v7.widget.RecyclerView
    android:id="@+id/recycler_view"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"/>
</LinearLayout>

2.3.在Java代码中使用recyclerview

        mRecyclerView = findViewById(R.id.recycler_view);
        //设置布局管理器
        mRecyclerView.setLayoutManager(new LinearLayoutManager(this));
         //添加分割线
        mRecyclerView.addItemDecoration(new DividerItemDecoration(this,DividerItemDecoration.VERTICAL));
        //初始化数据
        List<String> list=new ArrayList<>();
        for (int i=0;i<12;i++){
            list.add("哈哈"+i);
        }
        //adapter
        MyRecyclerViewAdapter adapter = new MyRecyclerViewAdapter(this, list);
        mRecyclerView.setAdapter(adapter);

RecyclerView需要设置布局管理器,布局管理器用于设置条目的排列样式,可以是垂直排列,也可以是水平排列。
默认是垂直排列,如果想要设置水平排列,如下代码所示:

   /**
     * 设置水平排列布局
     */
    public void setHorizontal(){
        LinearLayoutManager manager = new LinearLayoutManager(this);
        manager.setOrientation(LinearLayoutManager.HORIZONTAL);
        mRecyclerView.setLayoutManager(manager);
    }

2.4.编辑适配器Adapter


public class MyRecyclerViewAdapter extends RecyclerView.Adapter
<MyRecyclerViewAdapter.MyViewHolder> {
    private List<String> mList;
    private Context mContext;

    public MyRecyclerViewAdapter(Context context, List<String> list) {
        this.mContext = context;
        this.mList = list;
    }

    /**
     *加载条目的样式布局
     */
    @NonNull
    @Override
    public MyViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
        View view = LayoutInflater.from(mContext).inflate(R.layout.item_recyclerview, parent);
        MyViewHolder myViewHolder = new MyViewHolder(view);
        return myViewHolder;
    }

    /**
     *将视图与数据进行绑定
     */
    @Override
    public void onBindViewHolder(@NonNull MyViewHolder holder, int position) {
      holder.mTv.setText(mList.get(position));
    }

    @Override
    public int getItemCount() {
        return mList.size();
    }

    class MyViewHolder extends RecyclerView.ViewHolder {
        TextView mTv;
        public MyViewHolder(View itemView) {
            super(itemView);
            mTv=itemView.findViewById(R.id.text_view);
        }
    }
}

2.5.设置自定义分割线
注意:要在setAdapter之前加入设置分割线的代码

R.drawable.custom_divider
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
       android:shape="rectangle">

    <gradient
        android:centerColor="#ff00ff00"
        android:endColor="#ff0000ff"
        android:startColor="#ffff0000"
        android:type="linear"/>
    <size android:height="3dp"/>

</shape>
  /**
     * 自定义分割线,自定义一个Drawable对象
     */
      public void setCustonDecoration(){
          DividerItemDecoration divider = new DividerItemDecoration(this,DividerItemDecoration.VERTICAL);
          divider.setDrawable(ContextCompat.getDrawable(this, ));
          mRecyclerView.addItemDecoration(divider);
      }

2.6.自定义点击事件
RecyclerView条目的点击事件需要我们自定义。只需要在Adapter中定义接口回调就可以了。

   public interface onItemClickListener{
        void onItemClick(View view,int position);
    }
    public void setOnItemClickListener(onItemClickListener listener){
        this.mListener=listener;
    }
    /**
     *将视图与数据进行绑定
     */
    @Override
    public void onBindViewHolder(@NonNull MyViewHolder holder, final int position) {
      holder.mTv.setText(mList.get(position));
      //设置点击事件
        holder.mTv.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                if (mList!=null){
                    mListener.onItemClick(view,position);
                }
            }
        });
    }

//在Activity中
  adapter.setOnItemClickListener(new MyRecyclerViewAdapter.onItemClickListener() {
            @Override
            public void onItemClick(View view, int position) {
                Toast.makeText(RecyclerViewDemoActivity.this, 
                "点击了" + position, Toast.LENGTH_SHORT).show();
            }
        });

2.7.实现GridView

 public void setGridView() {
        StaggeredGridLayoutManager staggeredGridLayoutManager = new StaggeredGridLayoutManager(4, StaggeredGridLayoutManager.VERTICAL);
        mRecyclerView.addItemDecoration(new DividerItemDecoration(this, DividerItemDecoration.VERTICAL));
        mRecyclerView.setLayoutManager(staggeredGridLayoutManager);
    }

2.8.实现瀑布流
实现瀑布流,在gridView的基础上,给每个item设置一个随机的高度即可。

 ViewGroup.LayoutParams params = holder.mTv.getLayoutParams();
        params.height = mHeights.get(position);
        holder.mTv.setLayoutParams(params);

三.CardView的使用
3.1.配置build.gradle


compile 'com.android.support:cardview-v7:27.1.1'

CardView的使用很简单,就不介绍了。
四.三种不同的通知Notification
Notification可以让我们在获得消息的时候,在状态栏、锁屏界面来显示相应的信息。咱们接下来要介绍3中Notification,分别是普通Notification、折叠式Notification和悬挂式Notification。
4.1.普通Notification

扫描二维码关注公众号,回复: 3002132 查看本文章
  @RequiresApi(api = Build.VERSION_CODES.JELLY_BEAN)
    public void createCommonNotification() {
        Notification.Builder builder = new Notification.Builder(this);
        Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse("https://blog.csdn.net/weixin_37292229/article/details/71404524"));
        PendingIntent pendingIntent = PendingIntent.getActivity(this, 0, intent, 0);
        builder.setContentIntent(pendingIntent);
        builder.setSmallIcon(R.mipmap.ic_launcher);
        builder.setAutoCancel(true);
        builder.setContentTitle("普通通知");
        Notification notification = builder.build();
        NotificationManager manager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
        manager.notify(1,notification);
    }

4.2.折叠式Notification
折叠式Notification是一种自定义视图的.折叠式Notification,用来显示长文本和一些自定义的布局场景。它有两种状态:一种是普通状态下的视图也就是和4.1的普通Notification一样;另一种是展开状态下的视图,我们需要自定义视图,因为这个视图显示的进程和我们创建视图的进程不是同一个进程,所以我们需要使用RemoteViews。
4.3.悬挂式Notification
悬挂式Notification是Android5.0新增加的通知方式,和前两个方式不同的是,前两种都需要下拉通知栏才能看到通知,而悬挂式通知不需要下拉通知栏就直接显示悬挂在屏幕上方,并且焦点不变,仍在用户操作的界面,所以不会打断用户的操作。过几秒钟会自动消失。
4.4.Notification的显示等级
Android5.0新增了一种模式Notification的显示等级,分以下三种:
builder.setVisibility(Notification.VISIBILITY_PUBLIC);//任何情况都会显示通知
VISIBILITY_PRIVATE:只有在没有锁屏时会显示通知
VISIBILITY_SECRET:安全和没有锁屏的时候显示通知
五.ToolBar的使用
六.Palette的使用
我们可以用Palette提取颜色,从而让主题动态的改变色调。

implementation 'com.android.support:palette-v7:27.1.1'
//code
//把toolbar的背景设置为该图片的色调
 Bitmap bitmap = BitmapFactory.decodeResource(getResources(), R.mipmap.ic_launcher);
        Palette.from(bitmap).generate(new Palette.PaletteAsyncListener() {
            @Override
            public void onGenerated(@NonNull Palette palette) {
                Palette.Swatch swatch = palette.getVibrantSwatch();
                getSupportActionBar().setBackgroundDrawable(new ColorDrawable(swatch.getRgb()));
            }
        });

猜你喜欢

转载自blog.csdn.net/weixin_37292229/article/details/71404524