Android 5.0開始就推薦使用Material Design這個設計語言,本文開始就逐一解說Material Design中控件的使用。本章主要解說RecyclerView,期中會帶有ToolBar的代碼,也是一個Android5.x推薦使用ToolBar替代ActionBar的控件。RecyclerView 是 android-support-v7包中的一個控件,使用該控件時需要加入com.android.support:recyclerview-v7:22.2.0包依賴,該包可在咱們下載的sdk文件夾下D:\Program Files\Android\sdk\extras\android\support\v7\recyclerview\libs找到。html
如下說說使用RecyclerView的長處和能作什麼事:java
固然也可以繼承LayoutManager來本身定義。android
<RelativeLayout 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=".MainActivity"> <android.support.v7.widget.Toolbar android:id="@+id/toolbar" android:layout_width="match_parent" android:layout_height="wrap_content" android:background="?attr/colorPrimary" android:minHeight="?attr/actionBarSize" /> <android.support.v7.widget.RecyclerView android:id="@+id/recyclerView" android:layout_width="match_parent" android:layout_height="match_parent" android:layout_below="@+id/toolbar" android:scrollbars="none" /> </RelativeLayout>
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:background="@drawable/recyclerview_item" android:layout_margin="10dp" android:orientation="vertical" android:layout_height="72dp"> <TextView android:id="@+id/textView" android:layout_width="match_parent" android:padding="20dp" android:layout_height="72dp" android:textAppearance="?android:attr/textAppearanceLarge" /> </LinearLayout>編程
public class MainActivity extends AppCompatActivity { private Toolbar mToolbar; private RecyclerView mRecyclerView; private List<String> lists; private MyAdapter adapter; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); mToolbar = (Toolbar)this.findViewById(R.id.toolbar); setSupportActionBar(mToolbar); initData(); mRecyclerView = (RecyclerView) this.findViewById(R.id.recyclerView); // mRecyclerView.setHasFixedSize(true);//假設可以肯定每個item的高度是固定的。設置這個選項可以提升性能 mRecyclerView.setLayoutManager(new LinearLayoutManager(this));//設置RecyclerView的佈局管理 // mRecyclerView.addItemDecoration();//設置RecyclerView中item的切割線,用的少。通常都用在item中設置margin分隔兩個item mRecyclerView.setItemAnimator(new DefaultItemAnimator());//設置item的加入刪除動畫,採用默認的動畫效果 adapter = new MyAdapter(this,lists); mRecyclerView.setAdapter(adapter);//設置Adapter adapter.setOnItemClickListener(new MyAdapter.OnItemClickListener() {//加入監聽器 @Override public void onItemClick(View view, int postion) { Toast.makeText(MainActivity.this,"點擊的是:"+postion,Toast.LENGTH_SHORT).show(); } @Override public void onItemLongClick(View view, int postion) { Toast.makeText(MainActivity.this, "長按的是:" + postion, Toast.LENGTH_SHORT).show(); } }); } private void initData(){ lists = new ArrayList<String>(); for (int i = 'A'; i < 'z'; i++) { lists.add(""+(char)i); } } @Override public boolean onCreateOptionsMenu(Menu menu) { // Inflate the menu; this adds items to the action bar if it is present. getMenuInflater().inflate(R.menu.menu_main, menu); return true; } @Override public boolean onOptionsItemSelected(MenuItem item) { int id = item.getItemId(); switch (id){ case R.id.action_add: lists.add(1, "add"); // adapter.notifyDataSetChanged();//用這個則可以更新數據。但是沒有動畫效果 adapter.notifyItemInserted(1);//注意:RecyclerView中加入用notifyItemInserted()。纔有動畫效果 break; case R.id.action_delete: lists.remove(1); adapter.notifyItemRemoved(1);//RecyclerView中刪除用notifyItemRemoved();纔有動畫效果 break; case R.id.action_linear: mRecyclerView.setLayoutManager(new LinearLayoutManager(this));//設置RecyclerView的GridLayoutManager佈局管理,默認垂直,另外一個設置水平排列的構造方法 break; case R.id.action_grid: mRecyclerView.setLayoutManager(new GridLayoutManager(this,3));//設置RecyclerView的GridLayoutManager佈局管理,默以爲垂直 break; case R.id.action_grid_horizontal: mRecyclerView.setLayoutManager(new GridLayoutManager(this,3,GridLayoutManager.HORIZONTAL,false));//設置RecyclerView的GridLayoutManager的水平佈局管理,參數分別爲context,列數或行數,排列方式,是否反轉佈局的內容 break; case R.id.action_staggeredgrid: mRecyclerView.setLayoutManager(new StaggeredGridLayoutManager(2,StaggeredGridLayoutManager.VERTICAL));//設置RecyclerView的StaggeredGridLayoutManager的佈局管理,它是GridLayout升級版,可以顯示交錯式網格佈局。參數分別爲列數或行數,排列方式 break; } return super.onOptionsItemSelected(item); } }【注意】:使用ToolBar時。必須在styles.xml中設置當前Activity使用的style風格爲NoActionBar。假設想改變狀態欄的背景色,則需要在style中定義item。name="colorPrimaryDark",僅支持Android5.x。
MyAdapter.javaide
/** * 繼承RecyclerView的Adapter,它會強制開發人員使用ViewHolder模式,因此繼承適配器的時候傳入的泛型是一個繼承自ViewHolder的實現類 * 只是RecyclerView中沒有提供給咱們Click和onLongClick監聽器,需要咱們本身實現 */ public class MyAdapter extends RecyclerView.Adapter<MyViewHolder> { private Context context; private List<String> lists; private OnItemClickListener mOnItemClickListener; public interface OnItemClickListener { void onItemClick(View view, int postion); void onItemLongClick(View view, int postion); } public void setOnItemClickListener(OnItemClickListener listener) {//對外提供的一個監聽方法 this.mOnItemClickListener = listener; } public MyAdapter(Context context, List<String> lists) { this.context = context; this.lists = lists; } @Override public MyViewHolder onCreateViewHolder(ViewGroup viewGroup, int i) {//建立一個ViewHolder View itemView = LayoutInflater.from(context).inflate(R.layout.item, viewGroup, false);//填充這個item佈局 MyViewHolder viewHolder = new MyViewHolder(itemView);//建立ViewHolder return viewHolder; } @Override public void onBindViewHolder(final MyViewHolder myViewHolder, int pos) {//綁定ViewHolder myViewHolder.mTextView.setText(lists.get(pos));//爲ViewHolder裏的控件設置值 if (mOnItemClickListener != null) {//假設設置了監聽那麼它就不爲空,而後回調對應的方法 myViewHolder.itemView.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { int postion = myViewHolder.getLayoutPosition();//獲得當前點擊item的位置postion mOnItemClickListener.onItemClick(myViewHolder.itemView, postion); } }); myViewHolder.itemView.setOnLongClickListener(new View.OnLongClickListener() { @Override public boolean onLongClick(View v) { int postion = myViewHolder.getLayoutPosition(); mOnItemClickListener.onItemLongClick(myViewHolder.itemView, postion); return true; } }); } } @Override public int getItemCount() { return lists.size(); } } class MyViewHolder extends RecyclerView.ViewHolder { TextView mTextView; public MyViewHolder(View itemView) { super(itemView); mTextView = (TextView) itemView.findViewById(R.id.textView); } }至此RecyclerView使用方法就是這些了。當中需要注意的是在RecyclerView中加入和刪除item時。要想有動畫效果,則需要使用adapter.notifyItemInserted();和adapter.notifyItemRemoved();
轉載請註明出處:http://blog.csdn.net/u010687392佈局
下一篇將講用RecyclerView實現瀑布流效果!post