Android動(dòng)態(tài)加載布局
ListView我們一直都在用,只不過(guò)當(dāng)Adapter中的內(nèi)容比較多的時(shí)候我們有時(shí)候沒(méi)辦法去設(shè)置一些組件,舉個(gè)例子:
可以看到京東的故事里面的這樣一個(gè)布局,這個(gè)布局可以說(shuō)是我目前見(jiàn)到的內(nèi)容比較多的了,它的每一項(xiàng)都包含頭像、姓名、分類(lèi)、內(nèi)容、圖片、喜歡、評(píng)論、分享以及喜歡的頭像。分析了一下布局之后我們不難發(fā)現(xiàn),除了喜歡頭像這部分,其余的都很好實(shí)現(xiàn)。
那么下面著重說(shuō)一下這個(gè)頭像這部分怎么實(shí)現(xiàn)?
第一種方案:我們可以用GridView來(lái)實(shí)現(xiàn),GridView和ListView的用法是一樣的,俗稱(chēng)九宮格排列,那么我們可以將GridView的一行排列九張圖片來(lái)顯示這些頭像,只不過(guò)ListView嵌套著GridView稍微的有些麻煩,自己做了一個(gè),感覺(jué)不太好用,有想要ListView嵌套GridView的可以私密我。
第二種方案:就是本篇文章所講的動(dòng)態(tài)加載布局了:
很簡(jiǎn)單,我們?cè)贚istView中定義一個(gè)LinerLayout線(xiàn)性布局,用來(lái)存放這些頭像,先看一下布局吧:
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="match_parent" android:layout_height="match_parent"> <LinearLayout android:padding="@dimen/small_space" android:orientation="horizontal" android:layout_width="match_parent" android:layout_height="wrap_content"> <com.view.RoundedImageView android:id="@+id/iv_myspace_usericon" android:src="@drawable/usericon" android:layout_width="50dp" android:layout_height="50dp"/> <TextView android:id="@+id/tv_myspace_username" android:layout_marginLeft="@dimen/middle_space" android:layout_gravity="center_vertical" android:text="王某某" android:textSize="@dimen/small_textSize" android:layout_weight="1" android:layout_width="wrap_content" android:layout_height="wrap_content"/> <TextView android:id="@+id/tv_myspace_time" android:textColor="@color/normal_bar_futext_color" android:textSize="@dimen/smallest_textSize" android:layout_gravity="center_vertical" android:text="2015-8-26 17.46" android:layout_width="wrap_content" android:layout_height="wrap_content"/> </LinearLayout> <TextView android:id="@+id/tv_myspace_content" android:paddingRight="@dimen/middle_space" android:paddingLeft="@dimen/middle_space" android:paddingBottom="@dimen/middle_space" android:text="受到了房間啊了會(huì)計(jì)分錄會(huì)計(jì)法艦隊(duì)司令減肥;立刻受到杰弗里斯到付款;老是覺(jué)得煩;老卡機(jī)的說(shuō)法;就是看到的就發(fā)了卡就" android:layout_width="match_parent" android:layout_height="wrap_content"/> <ImageView android:id="@+id/iv_myspace_image" android:scaleType="fitXY" android:src="@drawable/moren" android:paddingRight="@dimen/middle_space" android:paddingLeft="@dimen/middle_space" android:layout_width="match_parent" android:layout_height="140dp"/> <LinearLayout android:id="@+id/ll_myspace_reply_icons" android:paddingTop="@dimen/small_space" android:paddingRight="@dimen/middle_space" android:paddingLeft="@dimen/middle_space" android:orientation="horizontal" android:layout_width="match_parent" android:layout_height="wrap_content"> </LinearLayout> <LinearLayout android:layout_marginTop="@dimen/small_space" android:paddingRight="@dimen/middle_space" android:paddingLeft="@dimen/middle_space" android:orientation="horizontal" android:layout_width="match_parent" android:layout_height="wrap_content"> <ImageView android:id="@+id/iv_myspace_like" android:src="@drawable/zan_icon" android:layout_width="20dp" android:layout_height="20dp"/> <ImageView android:visibility="gone" android:id="@+id/iv_myspace_liked" android:src="@drawable/wozaixianchang_dianzanxi" android:layout_width="20dp" android:layout_height="20dp"/> <TextView android:id="@+id/tv_myspace_zan_count" android:layout_gravity="center_vertical" android:text="0" android:textColor="@color/normal_bar_futext_color" android:layout_marginLeft="@dimen/small_space" android:layout_width="wrap_content" android:layout_height="wrap_content"/> <ImageView android:id="@+id/iv_myspace_comment" android:layout_marginLeft="@dimen/middle_space" android:src="@drawable/pinglun_icon" android:layout_width="20dp" android:layout_height="20dp"/> <TextView android:id="@+id/tv_myspace_pinglun_count" android:layout_gravity="center_vertical" android:text="0" android:textColor="@color/normal_bar_futext_color" android:layout_marginLeft="@dimen/small_space" android:layout_width="wrap_content" android:layout_height="wrap_content"/> </LinearLayout> </LinearLayout> <LinearLayout android:id="@+id/ll_myspace_reply_icons" android:paddingTop="@dimen/small_space" android:paddingRight="@dimen/middle_space" android:paddingLeft="@dimen/middle_space" android:orientation="horizontal" android:layout_width="match_parent" android:layout_height="wrap_content"> </LinearLayout>
上面的LinearLayout就是放這些頭像的,其他的就不多說(shuō)了,下面我們看看怎么來(lái)給我們的adapter里面加這些頭像
LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(100, 100); params.setMargins(8, 0, 8, 0); roundedImageView.setLayoutParams(params); roundedImageView.setScaleType(ImageView.ScaleType.FIT_XY); if (!"".equals(replyUrl.get(m)) && replyUrl.get(m) != null) { ImageLoader.getInstance().displayImage(replyUrl.get(m), roundedImageView); } else { roundedImageView.setImageDrawable(context.getResources().getDrawable(R.drawable.usericon)); } if (m == count) { roundedImageView.setImageDrawable(context.getResources().getDrawable(R.drawable.wozaixianchangxiangqing_shenglve)); } else { holder.llReplyIcons.addView(roundedImageView); }
我們先定義一個(gè)LayoutParams,設(shè)置頭像圖片的一些屬性,包括大小,margins以及scaletype等,然后給它設(shè)置到我們的ImageView中,最后holder.llReplyIcons.addView(roundedImageView); 添加子布局就ok了。京東這個(gè)是固定了頭像的個(gè)數(shù),而我寫(xiě)的則是根據(jù)手機(jī)屏幕的寬度添加頭像:
WindowManager wm = (WindowManager) context.getSystemService(Context.WINDOW_SERVICE); int width = wm.getDefaultDisplay().getWidth(); int count = width / 116;
count就是可以添加的頭像,當(dāng)View中的i等于我們的count的時(shí)候,我們可以用最后的省略號(hào)的圖片來(lái)顯示。
之前在群里有人問(wèn)我這個(gè)頭像點(diǎn)擊跳轉(zhuǎn)到個(gè)人主頁(yè)怎么實(shí)現(xiàn)的,想了一下,是不是可以用手機(jī)觸摸的坐標(biāo)來(lái)算一下坐標(biāo)位于第幾個(gè)頭像之間,覺(jué)得那樣比較麻煩。我們可以在添加子布局頭像的時(shí)候,就給這個(gè)子布局設(shè)置點(diǎn)擊事件,就可以了,看一下代碼:
for (int m = 0; m < replyUrl.size(); m++) { RoundedImageView roundedImageView = new RoundedImageView(context); final int finalM = m; roundedImageView.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { if (story.getReply_user_id().get(finalM) != null) { Intent intent = new Intent(context, MyStoryActivity.class); intent.putExtra("userid", story.getReply_user_id().get(finalM)); intent.putExtra("user_iconurl", story.getReply_user_icon_url().get(finalM)); intent.putExtra("username", story.getReply_user_name().get(finalM)); intent.putExtra("flag", "others"); context.startActivity(intent); } else { Intent intent = new Intent(context, StoryFavoriteAcitvity.class); intent.putExtra("storyId", story.getId()); context.startActivity(intent); } } }); LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(100, 100); params.setMargins(8, 0, 8, 0); roundedImageView.setLayoutParams(params); roundedImageView.setScaleType(ImageView.ScaleType.FIT_XY); if (!"".equals(replyUrl.get(m)) && replyUrl.get(m) != null) { ImageLoader.getInstance().displayImage(replyUrl.get(m), roundedImageView); } else { roundedImageView.setImageDrawable(context.getResources().getDrawable(R.drawable.usericon)); } if (m == count) { roundedImageView.setImageDrawable(context.getResources().getDrawable(R.drawable.wozaixianchangxiangqing_shenglve)); } else { holder.llReplyIcons.addView(roundedImageView); } }
這段代碼就全都包括了,其中一些里面的參數(shù)是服務(wù)器返回來(lái)的,都是真實(shí)數(shù)據(jù)。這樣就可以點(diǎn)擊頭像跳轉(zhuǎn)了。
那么最后看一下我自己實(shí)現(xiàn)的界面是不是和京東的一樣呢?
怎么樣是不是差不多?
相關(guān)文章
Android okhttputils現(xiàn)在進(jìn)度顯示實(shí)例代碼
本文通過(guò)實(shí)例代碼給大家詳細(xì)介紹了Android okhttputils現(xiàn)在進(jìn)度顯示,代碼簡(jiǎn)答易懂,非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友參考下吧2016-12-12Android自定義popupwindow實(shí)例代碼
這篇文章主要為大家詳細(xì)介紹了Android自定義popupwindow實(shí)例代碼,popupwindow彈出菜單效果,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2016-11-11Android仿微博首頁(yè)Tab加號(hào)彈窗功能
這篇文章主要為大家詳細(xì)介紹了Android仿微博首頁(yè)Tab加號(hào)彈窗功能,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-05-05Android組件Glide實(shí)現(xiàn)圖片平滑滾動(dòng)效果
這篇文章主要介紹了Android組件Glide實(shí)現(xiàn)圖片平滑滾動(dòng)效果的相關(guān)資料,具有一定的參考價(jià)值,需要的朋友可以參考下2016-07-07詳解關(guān)于MIUI 9沉浸式狀態(tài)欄的最新適配
由于各系統(tǒng)版本的限制,沉浸式狀態(tài)欄對(duì)系統(tǒng)有要求,本篇文章主要介紹了詳解關(guān)于MIUI 9沉浸式狀態(tài)欄的最新適配,非常具有實(shí)用價(jià)值,需要的朋友可以參考下2018-05-05Android搭建本地Tomcat服務(wù)器及相關(guān)配置
這篇文章主要介紹了Android搭建本地Tomcat服務(wù)器及相關(guān)配置,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-07-07