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
@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()));
}
});