国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁(yè) > 學(xué)院 > 開(kāi)發(fā)設(shè)計(jì) > 正文

RecyclerView與CardView的使用

2019-11-09 16:01:03
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友
<p>對(duì)于博文標(biāo)題的兩個(gè)View,其并沒(méi)有引入默認(rèn)的SDK中,需要自己手動(dòng)導(dǎo)入使用,下面將介紹導(dǎo)入的方式與使用的細(xì)節(jié)問(wèn)題。</p>

1.將RecyclerView與CardView導(dǎo)入Android Studio

對(duì)于Android Studio導(dǎo)入比較簡(jiǎn)單,在build.gradle(Module:app)中添加如下代碼:

dependencies { compile fileTree(include: ['*.jar'], dir: 'libs') compile 'com.android.support:appcompat-v7:23.0.1' compile 'com.android.support:recyclerview-v7:21.0.0' compile 'com.android.support:cardview-v7:21.0.0' }

紅色標(biāo)記為添加的代碼,添加好后,我們就可以使用其控件。

2.單獨(dú)使用RecyclerView

布局文件中導(dǎo)入其控件:

<android.support.v7.widget.RecyclerView    android:id="@+id/lyj_recycler"    android:scrollbars="vertical"    android:layout_below="@+id/activity_main_toolbar"    android:layout_width="match_parent"    android:padding="5dp"    android:layout_height="wrap_content"/>

都是一些基本的屬性,與ListView并無(wú)不同。

因?yàn)楣雀鑼?shí)現(xiàn)RecyclerView是擴(kuò)展ListView功能,使其功能更加的豐富,所以,使用RecylerView也需要一個(gè)適配器Adapter,RecyclerView適配器為RecyclerView.Adapter,代碼基本格式如下:

public class LYJAdapter extends RecyclerView.Adapter&lt;LYJAdapter.ViewHolder&gt; {    @Override    public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {        return null;    }    @Override    public void onBindViewHolder(ViewHolder holder, int position) {    }    @Override    public int getItemCount() {        return 0;    }    class ViewHolder extends RecyclerView.ViewHolder {        public ViewHolder(View view){            super(view);        }    }}

其適配器強(qiáng)制我們使用ViewHolder模式優(yōu)化ListView。當(dāng)然優(yōu)點(diǎn)就應(yīng)該強(qiáng)制使用。其使用方式與BaseAdapter大同小異。

下面我們來(lái)實(shí)現(xiàn)自身的適配器,代碼如下:

public class MyAdapter extends RecyclerView.Adapter&lt;MyAdapter.ViewHolder&gt; {    PRivate List&lt;MusicItem&gt; data;    public MyAdapter(List&lt;MusicItem&gt; data) {        this.data = data;    }    @Override    public MyAdapter.ViewHolder onCreateViewHolder(ViewGroup viewGroup, int i) {        //綁定布局        View itemLayoutView = LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.cv_main, null);        //創(chuàng)建ViewHolder        ViewHolder viewHolder = new ViewHolder(itemLayoutView);        return viewHolder;    }    @Override    public void onBindViewHolder(MyAdapter.ViewHolder viewHolder, int i) {        viewHolder.info.setText(data.get(i).getTitle());        viewHolder.image.setImageResource(data.get(i).getResId());    }    @Override    public int getItemCount() {        return data.size();    }    public static class ViewHolder extends RecyclerView.ViewHolder {        public TextView info;        public ImageView image;        public ViewHolder(View itemLayoutView) {            super(itemLayoutView);            info = (TextView) itemLayoutView.findViewById(R.id.lyj_txt);            image=(ImageView)itemLayoutView.findViewById(R.id.lyj_image);        }    }}

布局cv_main代碼如下:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"    android:layout_width="match_parent"    android:layout_height="match_parent"    android:layout_margin="5dp">    <ImageView        android:id="@+id/lyj_image"        android:layout_width="wrap_content"        android:layout_centerInParent="true"        android:layout_marginRight="5dp"        android:layout_height="wrap_content" />    <TextView        android:id="@+id/lyj_txt"        android:layout_width="match_parent"        android:layout_height="wrap_content"        android:layout_below="@+id/lyj_image"        android:layout_gravity="center" /></RelativeLayout>

RecyclerView的實(shí)體類(lèi)如下:

public class MusicItem {    private String title;    private int resId;    public String getTitle() {        return title;    }    public void setTitle(String title) {        this.title = title;    }    public int getResId() {        return resId;    }    public void setResId(int resId) {        this.resId = resId;    }}

其實(shí)RecyclerView的優(yōu)點(diǎn)就是將ListView的items布局分離出來(lái),好讓我們實(shí)現(xiàn)如下三種效果。

GridLayoutManager(網(wǎng)格布局)

下面的代碼我們將Activity界面初始化分離出來(lái):

public void initView() {    initActionBar();    String[] strTitle = {"慵懶慢時(shí)光,爵士中文", "【華語(yǔ)】曾經(jīng)的你已杳無(wú)音信", "粵語(yǔ)歌中的華語(yǔ)鏡像", "凡走過(guò)必留下痕跡", "搖滾Live也可以溫柔到骨子里", "人生中的舍得與難舍"};    int[] resId={R.drawable.one,R.drawable.two,R.drawable.three,R.drawable.four,R.drawable.five,R.drawable.six};    for(int i=0;i&lt;6;i++){        MusicItem item=new MusicItem();        item.setTitle(strTitle[i]);        item.setResId(resId[i]);        musicItems.add(item);    }    recyclerView = (RecyclerView) findViewById(R.id.lyj_recycler);    RecyclerView.LayoutManager layout = new GridLayoutManager(this,3);//網(wǎng)格布局,每行為3    recyclerView.setLayoutManager(layout);    recyclerView.setHasFixedSize(true);//適配器內(nèi)容改變,不會(huì)改變RecyclerView的大小    adapter = new MyAdapter(musicItems);    recyclerView.setAdapter(adapter);}

對(duì)于設(shè)置ListView的適配器代碼不需要過(guò)多解釋?zhuān)渌拇a都有注釋。運(yùn)行后界面如下(是不是有網(wǎng)易云音樂(lè)首首頁(yè)選項(xiàng)列表的感覺(jué)):

LinearLayoutManager(垂直布局、水平布局)

只需要更改上面代碼中網(wǎng)格布局的那行代碼,如下:

RecyclerView.LayoutManager layout=new LinearLayoutManager(this,LinearLayoutManager.HORIZONTAL,false);

參數(shù)1:上下文

參數(shù)2:水平還是垂直

參數(shù)3:為false表示數(shù)據(jù)按輸入的順序顯示,為true表示數(shù)據(jù)逆向顯示。

運(yùn)行程序當(dāng)?shù)玫饺缦陆缑妫?/p>

當(dāng)你將參數(shù)2更改成垂直,那么運(yùn)行后的界面就如listView一樣了。這里就不截圖了。

StaggeredGridLayoutManager(瀑布流布局)

如2(二)所示,也只需要更改一條代碼即可:

StaggeredGridLayoutManager layout=new StaggeredGridLayoutManager(2,StaggeredGridLayoutManager.VERTICAL);

參數(shù)1:為每行幾個(gè)元素。

參數(shù)2:為垂直瀑布還是水平瀑布

運(yùn)行后界面如下:

這里不好看的原因是沒(méi)有結(jié)合CardView一起使用,下面將介紹如何整合RecyclerView與CardView。

3.當(dāng)RecyclerView遇上CardView

CardView繼承自Framelayout,所以FrameLayout所有屬性CardView均可以直接拿來(lái)用,不過(guò)CardView還有自己獨(dú)有的屬性。下面我們將item布局的父標(biāo)簽換成CardView。并且用RelativeLayout包裹兩個(gè)子控件。代碼如下:

<android.support.v7.widget.CardView xmlns:android="http://schemas.android.com/apk/res/android"    android:layout_width="match_parent"    android:layout_height="match_parent"    android:layout_margin="5dp">    <RelativeLayout        android:layout_width="match_parent"        android:layout_height="match_parent">        <ImageView            android:id="@+id/lyj_image"            android:layout_width="wrap_content"            android:layout_centerInParent="true"            android:layout_marginRight="5dp"            android:layout_height="wrap_content" />        <TextView            android:id="@+id/lyj_txt"            android:layout_width="match_parent"            android:layout_height="wrap_content"            android:layout_below="@+id/lyj_image"            android:layout_marginTop="40dp" />    </RelativeLayout></android.support.v7.widget.CardView>

運(yùn)行效果圖如下:

其每個(gè)item變成了一個(gè)卡片的樣式,如果色彩搭配的好,那么界面將如上線的APP一樣酷炫。

下面來(lái)介紹CardView獨(dú)有的屬性:

app:cardElevation 陰影的大小 app:cardMaxElevation 陰影最大高度 app:cardBackgroundColor 卡片的背景色 app:cardCornerRadius 卡片的圓角大小 app:contentPadding 卡片內(nèi)容于邊距的間隔?card_view:contentPaddingBottom app:contentPaddingTop app:contentPaddingLeft app:contentPaddingRight app:contentPaddingStart app:contentPaddingEnd app:cardUseCompatPadding 設(shè)置內(nèi)邊距,V21+的版本和之前的版本仍舊具有一樣的計(jì)算方式 app:cardPreventConrerOverlap 在V20和之前的版本中添加內(nèi)邊距,這個(gè)屬性為了防止內(nèi)容和邊角的重疊

下面簡(jiǎn)單設(shè)置幾個(gè)屬性:

app:cardBackgroundColor=”#EEC900″:卡片背景為黃色。app:cardCornerRadius=”10dp”:卡片圓角半徑為10dp。app:cardPreventCornerOverlap=”true”:防止內(nèi)容與邊角重疊app:cardUseCompatPadding=”true”:設(shè)置邊距app:contentPadding=”10dp”:邊距的間隔大小為10dp

運(yùn)行一下效果圖如下所示:

轉(zhuǎn)載請(qǐng)注明:Android開(kāi)發(fā)中文站 ? RecyclerView與CardView的使用


發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 布拖县| 平遥县| 潜江市| 梅河口市| 鄄城县| 方城县| 长治市| 恩施市| 云龙县| 云梦县| 微山县| 甘泉县| 荃湾区| 登封市| 石棉县| 中江县| 漳州市| 息烽县| 怀化市| 莱芜市| 伊宁市| 嘉峪关市| 两当县| 乡城县| 霍山县| 长子县| 商丘市| 静海县| 池州市| 来宾市| 如东县| 镇巴县| 德保县| 通河县| 平定县| 万州区| 安乡县| 兴海县| 绥滨县| 泰顺县| 平果县|