Android Material Design之在RecyclerView中嵌套CardView实现
前言:
? 第一眼就愛上了Android的Material Design風格。以前倒對Android的界面風格不那么喜歡,扁平化的界面設計真是好看。
? 其實,這個嵌套操作在實現上并沒有什么難點。可是,我還在Eclipse上沒有試驗成功。后來換到Android Studio上就OK了。以下是實現過程。
筆者開發環境:
系統:Windows 7 旗艦版
IDE:Android Studio v1.0
工具包:cardview-v7-21.0.0.aar
? ? ? ?recyclerview-v7-21.0.0.aar
效果圖展示:
??
關鍵代碼:
? 主界面展示的MainActivity:
public class MainActivity extends FragmentActivity {private int getLayoutResID() {return R.layout.activity_main;}private RecyclerView mRecyclerView = null;private String[] dataset = null;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(getLayoutResID());initEvent();}private void initEvent() {initViews();initData();setViews();}private void initViews() {mRecyclerView = (RecyclerView) findViewById(R.id.activity_main_recyclerView);}private void initData() {// 創建數據集dataset = new String[100];for (int i = 0; i < dataset.length; i++) {dataset[i] = "item " + (i + 1);}}private void setViews() {LinearLayoutManager layoutManager = new LinearLayoutManager(this);layoutManager.setOrientation(LinearLayoutManager.VERTICAL);mRecyclerView.setLayoutManager(layoutManager);RecyclerViewAdapter adapter = new RecyclerViewAdapter(dataset);mRecyclerView.setAdapter(adapter);} }
? List的配置器RecyclerViewAdapter:
public class RecyclerViewAdapter extends RecyclerView.Adapter<RecyclerViewAdapter.ViewHolder> {// 數據集private String[] mDataset;public RecyclerViewAdapter(String[] dataset) {super();mDataset = dataset;}@Overridepublic ViewHolder onCreateViewHolder(ViewGroup viewGroup, int i) {View view = View.inflate(viewGroup.getContext(), R.layout.recyclerview_item, null);// 創建一個ViewHolderViewHolder holder = new ViewHolder(view);holder.mTextView = (TextView) view.findViewById(R.id.activity_card_view_label_textview);return holder;}@Overridepublic void onBindViewHolder(ViewHolder viewHolder, int i) {// 綁定數據到ViewHolder上viewHolder.mTextView.setText(mDataset[i]);}@Overridepublic int getItemCount() {return mDataset.length;}public static class ViewHolder extends RecyclerView.ViewHolder {public TextView mTextView;public ViewHolder(View itemView) {super(itemView);// mTextView = (TextView) itemView;}} }
? 主界面布局文件activity_main.xml:
<?xml version="1.0" encoding="utf-8"?> <LinearLayoutxmlns:android="http://schemas.android.com/apk/res/android"android:layout_width="match_parent"android:layout_height="match_parent"><android.support.v7.widget.RecyclerViewandroid:id="@+id/activity_main_recyclerView"android:layout_width="match_parent"android:layout_height="match_parent" /></LinearLayout>
<RelativeLayout 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"android:layout_width="match_parent"android:layout_height="match_parent"tools:context=".MainActivity"><android.support.v7.widget.CardViewandroid:layout_width="match_parent"android:layout_height="match_parent"android:layout_margin="5dp"android:orientation="horizontal"card_view:cardBackgroundColor="#ffFF8C00"card_view:cardCornerRadius="4dp" ><RelativeLayoutandroid:layout_width="match_parent"android:layout_height="100dp" ><ImageViewandroid:id="@+id/activity_card_view_imageview"android:layout_width="match_parent"android:layout_height="match_parent"android:layout_centerInParent="true"android:scaleType="centerCrop"android:adjustViewBounds="true"android:src="@drawable/notre_dame_de_paris" /><TextViewandroid:id="@+id/activity_card_view_label_textview"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_marginBottom="10dip"android:layout_alignParentBottom="true"android:layout_centerInParent="true"android:textColor="@android:color/white"android:textSize="24sp"android:text="@string/show_label" /></RelativeLayout></android.support.v7.widget.CardView></RelativeLayout>
注意事項:
1.如果可以請使用Android Studio來開發它,我也不知道為什么我的Eclipse在不報錯的情況下,為什么運行不了。我也要再摸索一下,后期再補到文章中來。
2.在看到代碼和程序運行的效果圖來看,可能你會覺得這個跟一個普通的RelativeLayout有什么區別?不過,的確CardView是繼承自FrameLayout,它們都是ViewGroup,即其他控件的容器。所以這一點也就不足為奇了。
3.雖然CardView與RelativeLayout都是ViewGroup,有很多類似的東西,也可以把CardView替換成RelativeLayout。不過,CardView還有一些比較優越的屬性。elevation(CardView的Z軸陰影),cardBackgroundColor(CardView的卡片顏色)和cardConerRadius(CardView卡片的四角圓角矩形程度)。
4.elevation:在API21(Android L)等級以上才擁有此屬性。只能通過xml中的elevation屬性指定;
? cardBackgroundColor:Android2.0以上有效,只能通過xml的cardBackgroundColor屬性進行指定;
? cardConerRadius:Android2.0以上有效,單位dimen(dp,px,sp),可以通過xml指定,也可以通過Java代碼的setRadius指定。
源碼下載:
http://download.csdn.net/detail/u013761665/8959985
總結
以上是生活随笔為你收集整理的Android Material Design之在RecyclerView中嵌套CardView实现的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Python的Crypto模块使用:自动
- 下一篇: Android Studio使用笔记