Android L中的RecyclerView 、CardView 、Palette的使用,androidcardview
- RecyclerView
- CardView
- Palette
《Material Design》提到,Android L版本中新增了RecyclerView、CardView 、Palette。RecyclerView、CardView為用於顯示複雜視圖的新增Widget。Palette作為調色盤類,可以讓你從映像中提取突出的顏色。
RecyclerView
RecyclerView作為替代ListView使用,RecyclerView標準化了ViewHolder,ListView中convertView是複用的,在RecyclerView中,是把ViewHolder作為緩衝的單位了,然後convertView作為ViewHolder的成員變數保持在ViewHolder中,也就是說,假設沒有螢幕顯示10個條目,則會建立10個ViewHolder緩衝起來,每次複用的是ViewHolder,所以他把getView這個方法變為了onCreateViewHolder。ViewHolder更適合多種子布局的列表,尤其IM的對話列表。RecyclerView不提供setOnItemClickListener方法,你可以在ViewHolder中添加事件。RecyclerView的使用可以參考《Material Design UI Widgets》。
RecyclerView可以實現橫向、縱向滑動視圖:
RecyclerView 1 RecyclerView 2
設定橫向:
[java] view plaincopyprint?
- @Override
- protected void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- setContentView(R.layout.activity_recycler_view_horizontal);
-
- // specify an adapter (see also next example)
- List<MyAdapter.Item> itemList = new ArrayList<MyAdapter.Item>();
- for (int i =0; i < 100; i++)
- itemList.add(new MyAdapter.Item("Item " + i,"world"));
- mAdapter = new MyAdapter(itemList);
-
-
- mRecyclerViewHorizontal = (RecyclerView) findViewById(R.id.my_recycler_view_horizontal);
- mRecyclerViewHorizontal.setHasFixedSize(true);
-
- // use a linear layout manager
- LinearLayoutManager mLayoutManager = new LinearLayoutManager(this);
- mLayoutManager.setOrientation(LinearLayoutManager.HORIZONTAL);
- mRecyclerViewHorizontal.setLayoutManager(mLayoutManager);
- mRecyclerViewHorizontal.setAdapter(mAdapter);
-
-
- }
@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_recycler_view_horizontal); // specify an adapter (see also next example) List<MyAdapter.Item> itemList = new ArrayList<MyAdapter.Item>(); for (int i = 0; i < 100; i++) itemList.add(new MyAdapter.Item("Item " + i, "world")); mAdapter = new MyAdapter(itemList); mRecyclerViewHorizontal = (RecyclerView) findViewById(R.id.my_recycler_view_horizontal); mRecyclerViewHorizontal.setHasFixedSize(true); // use a linear layout manager LinearLayoutManager mLayoutManager = new LinearLayoutManager(this); mLayoutManager.setOrientation(LinearLayoutManager.HORIZONTAL); mRecyclerViewHorizontal.setLayoutManager(mLayoutManager); mRecyclerViewHorizontal.setAdapter(mAdapter); }
CardView
CardView繼承自FrameLayout類,可以在一個卡片布局中一致性的顯示內容,卡片可以包含圓角和陰影。CardView是一個Layout,可以布局其他View。CardView的使用可以參考《Material Design UI Widgets》。文章最後會給出這篇文章範例程式碼。
CardView Palette
Palette
Palette從映像中提取突出的顏色,這樣可以把色值賦給ActionBar、或者其他,可以讓介面整個色調統一,效果見(Palette)。
Palette這個類中提取以下突出的顏色:
Vibrant (有活力)
Vibrant dark(有活力 暗色)
Vibrant light(有活力 亮色)
Muted (柔和)
Muted dark(柔和 暗色)
Muted light(柔和 亮色)
提取色值代碼如下:
[java] view plaincopyprint?
- Bitmap bm = BitmapFactory.decodeResource(getResources(), item.image);
- Palette palette = Palette.generate(bm);
- if (palette.getLightVibrantColor() !=null) {
- name.setBackgroundColor(palette.getLightVibrantColor().getRgb());
- getSupportActionBar().setBackgroundDrawable(new ColorDrawable(palette.getLightVibrantColor().getRgb()));
- // getSupportActionBar().
-
- }