Android動態(tài)加載布局
ListView我們一直都在用,只不過當Adapter中的內容比較多的時候我們有時候沒辦法去設置一些組件,舉個例子:

可以看到京東的故事里面的這樣一個布局,這個布局可以說是我目前見到的內容比較多的了,它的每一項都包含頭像、姓名、分類、內容、圖片、喜歡、評論、分享以及喜歡的頭像。分析了一下布局之后我們不難發(fā)現(xiàn),除了喜歡頭像這部分,其余的都很好實現(xiàn)。
那么下面著重說一下這個頭像這部分怎么實現(xiàn)?
第一種方案:我們可以用GridView來實現(xiàn),GridView和ListView的用法是一樣的,俗稱九宮格排列,那么我們可以將GridView的一行排列九張圖片來顯示這些頭像,只不過ListView嵌套著GridView稍微的有些麻煩,自己做了一個,感覺不太好用,有想要ListView嵌套GridView的可以私密我。
第二種方案:就是本篇文章所講的動態(tài)加載布局了:
很簡單,我們在ListView中定義一個LinerLayout線性布局,用來存放這些頭像,先看一下布局吧:
<?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="受到了房間啊了會計分錄會計法艦隊司令減肥;立刻受到杰弗里斯到付款;老是覺得煩;老卡機的說法;就是看到的就發(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就是放這些頭像的,其他的就不多說了,下面我們看看怎么來給我們的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);
}
我們先定義一個LayoutParams,設置頭像圖片的一些屬性,包括大小,margins以及scaletype等,然后給它設置到我們的ImageView中,最后holder.llReplyIcons.addView(roundedImageView); 添加子布局就ok了。京東這個是固定了頭像的個數(shù),而我寫的則是根據(jù)手機屏幕的寬度添加頭像:
WindowManager wm = (WindowManager) context.getSystemService(Context.WINDOW_SERVICE); int width = wm.getDefaultDisplay().getWidth(); int count = width / 116;
count就是可以添加的頭像,當View中的i等于我們的count的時候,我們可以用最后的省略號的圖片來顯示。
之前在群里有人問我這個頭像點擊跳轉到個人主頁怎么實現(xià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ù)是服務器返回來的,都是真實數(shù)據(jù)。這樣就可以點擊頭像跳轉了。
那么最后看一下我自己實現(xiàn)的界面是不是和京東的一樣呢?

怎么樣是不是差不多?
相關文章
Android okhttputils現(xiàn)在進度顯示實例代碼
本文通過實例代碼給大家詳細介紹了Android okhttputils現(xiàn)在進度顯示,代碼簡答易懂,非常不錯,具有參考借鑒價值,需要的朋友參考下吧2016-12-12
Android組件Glide實現(xiàn)圖片平滑滾動效果
這篇文章主要介紹了Android組件Glide實現(xiàn)圖片平滑滾動效果的相關資料,具有一定的參考價值,需要的朋友可以參考下2016-07-07

