Android动态加载布局_Android

ListView我们一直都在用,只不过当Adapter中的内容比较多的时候我们有时候没办法去设置一些组件,举个例子:

可以看到京东的故事里面的这样一个布局,这个布局可以说是我目前见到的内容比较多的了,它的每一项都包含头像、姓名、分类、内容、图片、喜欢、评论、分享以及喜欢的头像。分析了一下布局之后我们不难发现,除了喜欢头像这部分,其余的都很好实现。

那么下面着重说一下这个头像这部分怎么实现?

第一种方案:我们可以用GridView来实现,GridView和ListView的用法是一样的,俗称九宫格排列,那么我们可以将GridView的一行排列九张图片来显示这些头像,只不过ListView嵌套着GridView稍微的有些麻烦,自己做了一个,感觉不太好用,有想要ListView嵌套GridView的可以私密我。

第二种方案:就是本篇文章所讲的动态加载布局了:

很简单,我们在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="受到了房间啊了会计分录会计法舰队司令减肥;立刻受到杰弗里斯到付款;老是觉得烦;老卡机的说法;就是看到的就发了卡就"
   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了。京东这个是固定了头像的个数,而我写的则是根据手机屏幕的宽度添加头像:

WindowManager wm = (WindowManager) context.getSystemService(Context.WINDOW_SERVICE);
  int width = wm.getDefaultDisplay().getWidth();
  int count = width / 116;

count就是可以添加的头像,当View中的i等于我们的count的时候,我们可以用最后的省略号的图片来显示。
之前在群里有人问我这个头像点击跳转到个人主页怎么实现的,想了一下,是不是可以用手机触摸的坐标来算一下坐标位于第几个头像之间,觉得那样比较麻烦。我们可以在添加子布局头像的时候,就给这个子布局设置点击事件,就可以了,看一下代码:

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);
     } 

    }

这段代码就全都包括了,其中一些里面的参数是服务器返回来的,都是真实数据。这样就可以点击头像跳转了。
那么最后看一下我自己实现的界面是不是和京东的一样呢?

怎么样是不是差不多?

以上是小编为您精心准备的的内容,在的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索Android动态加载
fragment动态加载布局、安卓动态加载布局、动态加载布局、listview动态加载布局、动态加载布局文件,以便于您获取更多的相关知识。

时间: 2024-10-03 18:46:30

Android动态加载布局_Android的相关文章

Android动态加载布局

ListView我们一直都在用,只不过当Adapter中的内容比较多的时候我们有时候没办法去设置一些组件,举个例子: 可以看到京东的故事里面的这样一个布局,这个布局可以说是我目前见到的内容比较多的了,它的每一项都包含头像.姓名.分类.内容.图片.喜欢.评论.分享以及喜欢的头像.分析了一下布局之后我们不难发现,除了喜欢头像这部分,其余的都很好实现. 那么下面着重说一下这个头像这部分怎么实现? 第一种方案:我们可以用GridView来实现,GridView和ListView的用法是一样的,俗称九宫格

Android 动态加载布局

由于前段时间项目需要,需要在一个页面上加载根据不同的按钮加载不同的布局页面,当时想到用 tabhot .不过美工提供的界面图完全用不上tabhot ,所以想到了动态加载的方法来解决这一需求.在这里我整理了一下,写了一个 DEMO 希望大家以后少走点弯路. 首先,我们先把界面的框架图画出来,示意图如下: 中间白色部门是一个线性布局文件,我喜欢在画图的时候用不同的颜色将一块布局标示出来,方便查看.布局文件代码如下: <?xml version="1.0" encoding="

android动态加载布局文件示例_Android

一.布局文件part.xml: 复制代码 代码如下: <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="

android动态加载布局文件示例

一.布局文件part.xml: 复制代码 代码如下:<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="m

Android编程动态加载布局实例详解【附demo源码】_Android

本文实例讲述了Android编程动态加载布局的方法.分享给大家供大家参考,具体如下: 由于前段时间项目需要,需要在一个页面上加载根据不同的按钮加载不同的布局页面,当时想到用 tabhot .不过美工提供的界面图完全用不上tabhot ,所以想到了动态加载的方法来解决这一需求.在这里我整理了一下,写了一个 DEMO 希望大家以后少走点弯路. 首先,我们先把界面的框架图画出来,示意图如下: 中间白色部门是一个线性布局文件,我喜欢在画图的时候用不同的颜色将一块布局标示出来,方便查看.布局文件代码如下:

android viewpager根据数组的长度动态加载布局,隐藏控件无效。

问题描述 android viewpager根据数组的长度动态加载布局,隐藏控件无效. 布局文件 android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" > <android.support.v4.view.ViewPager android:id="@+id/viewpag

Android应用开发中Fragment的静态加载与动态加载实例_Android

1.Fragment的静态使用Fragment是作为Activity的UI的一部分,它内嵌在Activity中,多个Fragment可以把一个Activity分成多个部分,这在大屏幕手机或者平板电脑中会比较多的用到,这样就不用使用多个Activity来切换这么麻烦了.当然Fragment也可以不显示,只在后台处理一些数据,这篇文章中就暂时不谈到这个.以下来看怎么静态地在Activity的布局文件中添加Fragment. 自定义的Fragment通常要继承Fragment这个类,也有一些特殊的是继

Android应用开发提高系列(5)——Android动态加载(下)——加载已安装APK中的类和资源

前言  Android动态加载(下)--加载已安装APK中的类和资源.   声明 欢迎转载,但请保留文章原始出处:)  博客园:http://www.cnblogs.com 农民伯伯: http://over140.cnblogs.com  Android中文Wiki:http://wikidroid.sinaapp.com     正文 一.目标 注意被调用的APK在Android系统中是已经安装的.    上篇文章:Android应用开发提高系列(4)--Android动态加载(上)--加载

设计简单的Android图片加载框架_Android

目前Android 发展至今优秀的图片加载框架太多,例如: Volley ,Picasso,Imageloader,Glide等等.但是作为程序猿,懂得其中的实现原理还是相当重要的,只有懂得才能更好地使用.于是乎,今天我就简单设计一个网络加载图片框架.主要就是熟悉图片的网络加载机制. 一般来说,一个优秀的 图片加载框架(ImageLoader) 应该具备如下功能: 图片压缩 内存缓存 磁盘缓存 图片的同步加载 图片的异步加载 网络拉取 那我们就从以上几个方面进行介绍: 1.图片压缩(有效的降低O