我的编程空间,编程开发者的网络收藏夹
学习永远不晚

Android动态加载布局

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

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:class="lazy" data-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:class="lazy" data-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:class="lazy" data-src="@drawable/zan_icon" 
    android:layout_width="20dp" 
    android:layout_height="20dp"/> 
   <ImageView 
     android:visibility="gone" 
     android:id="@+id/iv_myspace_liked" 
     android:class="lazy" data-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:class="lazy" data-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动态布局小结android动态布局之动态加入TextView和ListView的方法基于Android在布局中动态添加view的两种方法(总结)Android 动态改变布局实例详解Android编程动态加载布局实例详解【附demo源码】android用java动态增添删除修改布局Android动态添加设置布局与控件的方法android动态加载布局文件示例Android动态布局使用详解


免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

Android动态加载布局

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

Android动态加载布局

ListView我们一直都在用,只不过当Adapter中的内容比较多的时候我们有时候没办法去设置一些组件,举个例子:可以看到京东的故事里面的这样一个布局,这个布局可以说是我目前见到的内容比较多的了,它的每一项都包含头像、姓名、分类、内容、图
2022-06-06

android动态加载布局文件示例

一、布局文件part.xml:代码如下:2022-06-06

Android动态布局小结

android动态布局相比静态布局,动态布局不用再将xml转变了布局代码,提高了一定的效率,当然可以忽略不记。动态布局主要是比较灵活,可以很快的在代码中直接修改布局,并直接使用控件进行业务逻辑开发。但代码量通常比较大,维护没有静态布局方便。
2022-06-06

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

本文实例讲述了Android编程动态加载布局的方法。分享给大家供大家参考,具体如下: 由于前段时间项目需要,需要在一个页面上加载根据不同的按钮加载不同的布局页面,当时想到用 tabhot 。不过美工提供的界面图完全用不上tabhot ,所以
2022-06-06

android动态布局之动态加入TextView和ListView的方法

本文实例讲述了android动态布局之动态加入TextView和ListView的方法。分享给大家供大家参考。具体实现方法如下:package org.guoshi; import java.util.ArrayList; import
2022-06-06

Android动态添加设置布局与控件的方法

本文实例讲述了Android动态添加设置布局与控件的方法。分享给大家供大家参考,具体如下: 有时候我们会在代码端,动态的设置,添加布局和控件。下面我们就看来看一下如何处理,直接上代码,代码里面的注解很清楚了。 布局文件:fragment_h
2022-06-06

android预加载布局怎么使用

在Android中,可以使用以下方法来预加载布局:1. 使用`LayoutInflater`类的`inflate()`方法手动加载布局文件:```javaLayoutInflater inflater = LayoutInflater.fr
2023-10-09

Android RecyclerView加载两种布局的方法

当RecyclerView有下拉刷新时,有时候设计图上,体现出来的列表有头部布局,这可以通过Adapter实现加载多套布局就可以,这里以加载两种布局为例说明。 先看看Adapter的代码:import android.annotation.
2022-06-06

Android ViewPager动态加载问题

今天做项目时,纠结了很久,动态添加view,刚开始按照其他的adapter处理,但是不会刷新view,来回翻几页,还会view覆盖,最后手动调用adapter的destroyItem和instantiateItem方法,还是不行,最后重写n
2022-06-06

Android布局加载之LayoutInflater示例详解

前言 Activity 在界面创建时需要将 XML 布局文件中的内容加载进来,正如我们在 ListView 或者 RecyclerView 中需要将 Item 的布局加载进来一样,都是使用 LayoutInflater 来进行操作的。 La
2022-06-06

Android 动态改变布局实例详解

Android 动态改变布局 最近项目需求,动态的改变布局,为了增加客户体验,尤其是在输入框出现小键盘的时候,为了避免小键盘遮挡APP内容就需要动态改变布局: 先看下实现效果图:
2022-06-06

Android基础——动态加载so库

Android中动态加载so 原因:如果把so文件直接放在libs目录下,在android程序启动的时候会默认加载libs目录下的所有so库,但这些so库可能会在某些地方存在冲突,使用动态加载so库,就可以通过一些条件判断是否要加载这个so
2023-08-17

Android RecyclerView加载不同布局简单实现

前言 关于RecyclerView的使用这里就不在赘述了,相信网上一搜一大把(本人之前的文章也有简单的使用介绍),这次我们讲的是RecyclerView在使用的过程中,有时候会根据不同的位置加载不同的布局的简单实现,这里只是起到抛砖引玉的作
2022-06-06

Android动态布局实现多主题切换

之前做过一个项目(随心壁纸),主要展示过去每期的壁纸主题以及相应的壁纸,而且策划要求,好可以动态变换主题呈现方式,这样用户体验会比较好。嗯,好吧,策划的话,咱们也没法反驳,毕竟这样搞,确实很不错。于是开始去研究这方面的东西。首先,我想到的是
2022-06-06

Android布局性能优化之按需加载View

有时应用程序中会有一些很少用到的复杂布局。在需要它们的时候再加载可以降低内存的消耗,同时也可以加快界面的渲染速度。 定义ViewStub ViewStub是一个轻量级的View,它没有高宽,也不会绘制任何东西。所以它的加载与卸载的成本很低。
2022-06-06

Android应用中如何使用LayoutInflater加载布局

Android应用中如何使用LayoutInflater加载布局?针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。需要从layout中加载View的时候,会调用这个方法Layo
2023-05-31

Android LayoutInflater加载布局详解及实例代码

Android LayoutInflater加载布局详解 对于有一定Android开发经验的同学来说,一定使用过LayoutInflater.inflater()来加载布局文件,但并不一定去深究过它的原理,比如 1.LayoutInfla
2022-06-06

Android中setContentView加载布局的原理是什么

Android中setContentView加载布局的原理是什么?相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。Activiy setContentView源码分析/** * S
2023-05-30

编程热搜

  • Android:VolumeShaper
    VolumeShaper(支持版本改一下,minsdkversion:26,android8.0(api26)进一步学习对声音的编辑,可以让音频的声音有变化的播放 VolumeShaper.Configuration的三个参数 durati
    Android:VolumeShaper
  • Android崩溃异常捕获方法
    开发中最让人头疼的是应用突然爆炸,然后跳回到桌面。而且我们常常不知道这种状况会何时出现,在应用调试阶段还好,还可以通过调试工具的日志查看错误出现在哪里。但平时使用的时候给你闹崩溃,那你就欲哭无泪了。 那么今天主要讲一下如何去捕捉系统出现的U
    Android崩溃异常捕获方法
  • android开发教程之获取power_profile.xml文件的方法(android运行时能耗值)
    系统的设置–>电池–>使用情况中,统计的能耗的使用情况也是以power_profile.xml的value作为基础参数的1、我的手机中power_profile.xml的内容: HTC t328w代码如下:
    android开发教程之获取power_profile.xml文件的方法(android运行时能耗值)
  • Android SQLite数据库基本操作方法
    程序的最主要的功能在于对数据进行操作,通过对数据进行操作来实现某个功能。而数据库就是很重要的一个方面的,Android中内置了小巧轻便,功能却很强的一个数据库–SQLite数据库。那么就来看一下在Android程序中怎么去操作SQLite数
    Android SQLite数据库基本操作方法
  • ubuntu21.04怎么创建桌面快捷图标?ubuntu软件放到桌面的技巧
    工作的时候为了方便直接打开编辑文件,一些常用的软件或者文件我们会放在桌面,但是在ubuntu20.04下直接直接拖拽文件到桌面根本没有效果,在进入桌面后发现软件列表中的软件只能收藏到面板,无法复制到桌面使用,不知道为什么会这样,似乎并不是很
    ubuntu21.04怎么创建桌面快捷图标?ubuntu软件放到桌面的技巧
  • android获取当前手机号示例程序
    代码如下: public String getLocalNumber() { TelephonyManager tManager =
    android获取当前手机号示例程序
  • Android音视频开发(三)TextureView
    简介 TextureView与SurfaceView类似,可用于显示视频或OpenGL场景。 与SurfaceView的区别 SurfaceView不能使用变换和缩放等操作,不能叠加(Overlay)两个SurfaceView。 Textu
    Android音视频开发(三)TextureView
  • android获取屏幕高度和宽度的实现方法
    本文实例讲述了android获取屏幕高度和宽度的实现方法。分享给大家供大家参考。具体分析如下: 我们需要获取Android手机或Pad的屏幕的物理尺寸,以便于界面的设计或是其他功能的实现。下面就介绍讲一讲如何获取屏幕的物理尺寸 下面的代码即
    android获取屏幕高度和宽度的实现方法
  • Android自定义popupwindow实例代码
    先来看看效果图:一、布局
  • Android第一次实验
    一、实验原理 1.1实验目标 编程实现用户名与密码的存储与调用。 1.2实验要求 设计用户登录界面、登录成功界面、用户注册界面,用户注册时,将其用户名、密码保存到SharedPreference中,登录时输入用户名、密码,读取SharedP
    Android第一次实验

目录