創建Lists和Cards

http://developer.android.com/training/material/lists-cards.html

可以使用RecycleView或者CardView在app中創建複雜的且具有material design風格的lists或者是cards。

使用RecycleView創建Lists

  1. 介紹
    RecycleView是ListView的升級版,更爲靈活,且效率給高。同時爲item項提供了一些動畫效果,如加入、移除等,並且可自定義。

  2. 使用:
    使用RecycleView必須爲其指定一個適配器(繼承自RecycleView.Adapter)和layout manager,如果需要,還可以爲item的變化設置合適的動畫效果
    layout manager 處理items視圖的回收和複用,RecycleView提供了三種layout manager,分別爲:
    1>.LinearLayoutManager: 設置List爲橫向
    (mLayoutManager.setOrientation(LinearLayoutManager.HORIZONTAL);或縱向(vertical )滾動
    2>.GridLayoutManager: item爲網格狀排列(類似GridView效果)
    3>.StaggeredGridLayoutManager : item爲不規則網格狀排列
    (如果需要自定義layout manager可通過繼承RecycleView.LayoutManager)

  3. 動畫
    RecycleView已經提供有添加、移除等item動畫效果,如果需要自定義可以繼承RecycleView.ItemAnimator類進行處理,並調用RecycleView.setItemAnimator()進行設置。
  4. 示例
    1>. 在gradle中添加依賴
dependencies {
    ...
    compile 'com.android.support:recyclerview-v7:21.0.+'
}

2>.在佈局中添加RecycleView(和普通控件的用法基本一致):

<android.support.v7.widget.RecyclerView
    android:id="@+id/my_recycler_view"
    android:scrollbars="vertical"
    android:layout_width="match_parent"
    android:layout_height="match_parent"/>

3>.在代碼中關聯RecycleView ,併爲其設置layout manager和適配器

public class MyActivity extends Activity {
    private RecyclerView mRecyclerView;
    private RecyclerView.Adapter mAdapter;
    private RecyclerView.LayoutManager mLayoutManager;    private String[] myDataset = new String[]{"1","2","3","4","5","......."};// 列表中顯示的數據
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.my_activity);
        mRecyclerView = (RecyclerView) findViewById(R.id.my_recycler_view);

        // 當確定List內容(數據)的變化不會影響RecycleView佈局的大小時,以下設置可以提高性能
        mRecyclerView.setHasFixedSize(true);

        // 使用linear layout manager
        mLayoutManager = new LinearLayoutManager(this);
        mRecyclerView.setLayoutManager(mLayoutManager);

        // 設置設配器 (MyAdapter見步驟4)
        mAdapter = new MyAdapter(myDataset);
        mRecyclerView.setAdapter(mAdapter);
    }
    ...
}

4>.適配器(MyAdapter)代碼

 public class MyAdapter extends RecyclerView.Adapter<MyAdapter.ViewHolder> {
    private String[] mDataset;

    //自定義的ViewHolder,持有Item中的所有View
    public static class ViewHolder extends RecyclerView.ViewHolder {
        // 當前item佈局中僅有的一個TextView
        public TextView mTextView;
        public ViewHolder(TextView v) {
            super(v);
            mTextView = (TextView)v.findViewById(R.id.my_text_view);
        }
    }

    // Provide a suitable constructor (depends on the kind of dataset)
    public MyAdapter(String[] myDataset) {
        mDataset = myDataset;
    }

    // 創建一個新的 views (被layout manager回調)
    @Override
    public MyAdapter.ViewHolder onCreateViewHolder(ViewGroup parent,
                                                   int viewType) {
        // 關聯item佈局,item.xml見步驟5
        View v = LayoutInflater.from(parent.getContext())
                               .inflate(R.layout.item, parent, false);
        // 創建並放回一個ViewHolder對象
        ViewHolder vh = new ViewHolder(v);
        return vh;
    }

    // 在這方法中對item中的數據(View)進行修改(被layout manager回調)
    @Override
    public void onBindViewHolder(ViewHolder holder, int position) {
        // 對holder(即對應item)的TextView進行修改
        holder.mTextView.setText(mDataset[position]);

    }

    // 返回數據(dataset)的大小 (被layout manager回調)    @Override
    public int getItemCount() {
        return mDataset.length;
    }
}

5>.item.xml(當前示例的item僅爲一個TextView)

 <?xml version="1.0" encoding="utf-8"?>
<TextView xmlns: android="http://schemas.android.com/apk/res/android"
    android :id="@+id/my_text_view"
    android :layout_width="match_parent"
    android :layout_height="48dp"
   >
</TextView>

經過以上5個步驟,一個簡單的由RecycleView創建的List即已經完成。
這裏寫圖片描述

使用CardView 創建 Cards(卡片效果)

  1. 介紹:
    CardView繼承自FrameLayout,其創建的卡片(Cards)可以具有陰影和圓角效果。
    陰影效果:可以通過card_view:cardElevation屬性設置(如果需要在低版本(5.0以下)中使用陰影效果,需要使用兼容包v7 appcompat library。詳情: Maintaining Compatibility.)
    圓角效果:可以通過card_view:cardCornerRadius屬性設置(在代碼中可以通過CardView.setRadius方法進行設置)
    背景顏色:可以通過card_view:cardBackgroundColor屬性設置
  2. 示例
    1>. 在gradle中添加依賴
dependencies {
    ...
    compile 'com.android.support:cardview-v7:21.0.+'
}
 2>.在佈局中添加CardView(這裏需要注意的就是card_view這個屬性域的使用):
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    xmlns:card_view="http://schemas.android.com/apk/res-auto"
    ... >
    <!-- “卡片”中僅包含一個TextView -->
    <android.support.v7.widget.CardView
        xmlns:card_view="http://schemas.android.com/apk/res-auto"
        android:id="@+id/card_view"
        android:layout_gravity="center"
        android:layout_width="200dp"
        android:layout_height="200dp"
        card_view:cardCornerRadius="4dp">

        <TextView
            android:id="@+id/info_text"
            android:layout_width="match_parent"
            android:layout_height="match_parent" />
    </android.support.v7.widget.CardView>
</LinearLayout>

經過以上2個步驟,一個簡單的由CardView創建的Cards(卡片)即已經完成。
這裏寫圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章