本示例显示一系列的字符串,实现的方法是在代码中完成的,没有使用布局文件。...在实际的使用过程中,可以使用 ListActivity 这种更简单的方式。...ListActivity 类实际上集成了 Activity 和 ListView 的功能,其内部包含了一个 ListView,使用这个类可以直接构造界面中的列表视图。...其中 mAdapter 是自定义的一个 BaseAdapter 类型,也是在这个类中实现的。...省略部分内容 } 这里的 getView()函数所返回的是 ImageView 类型,这样在列表中显示的内容就可以是一组图片了。
布局管理器 ViewGroup 常用三大布局 帧布局 FrameLayout - 用于单个子视图。 线性布局 LinearLayout - 用于横向或竖向依次摆放视图的布局。...android.widget.FrameLayout android.widget.ScrollView 它是 FrameLayout 类的子类(这意味着您应该只放入一个子视图,该子项包含要滚动的完整内容...ListView 是为显示较多项列表而优化的特殊控件。它能非常高效地创建、回收和显示视图,而且经过优化,能非常顺畅地滚动。...在自定义 listview 的 item 的布局的时候, 通常加上最小高度的属性, 防止高度过小导致用户点击不到。 android:minHeight="?...中getWidth()和getMeasuredWidth()之间的区别 getMeasuredWidth()获取的是 view 原始的大小,也就是这个 view 在XML文件中配置或者是代码中设置的大小
cloud.tencent.com/developer/user/1148436/activities) 先上张效果图: 1,思路简述 这个肯定是要重写 baseAdapter的了,这里我分了两个数据适配器,一个是自定义的...然后我们需要两个数据辅助类,类似上述,一个是专门来保存在GridView中要显示的每张图片的信息,例如它的url、name、id等等,暂称该辅助类为 UserImgs,大家可以随便增删,另一个是总的专门保存...listView中的item的数据,我们称它为UserInfo,这里,说明下,因为每条 item 都有一个自己的GridView,也就是说,UserInfo中必须要有一个UserImgs类实例,用来存储图片信息...name; //图片的名称 10 public String urls; //图片的 url 11 12 public int getId() { 13 return...} 94 });*/ 95 }else{ // 一定要加 else 防止GridView 的数据重复显示,在不同的
这个代码在网上有, 横向ListView的功能,参考Android 自定义RecyclerView 实现真正的Gallery效果 首先说布局文件: RecyclerView视图中的item的布局: <?..." android:layout_height="match_parent" android:orientation="vertical" > FrameLayout...视图 接下来是就是视图的自定义:com.example.zhy_horizontalscrollview03.MyRecyclerView public class MyRecyclerView extends...的适配器时候的写法,基本一致,只是在我们自己定义的适配器中加入了 自定义的点击事件,回调接口 接下来就是对应的activity类了: public class MainActivity extends...需要学习的第二个知识点就是:在对应的activity中关于RecyclerView 的使用 RecyclerView的使用代码: //找到对应的视图控件 mRecyclerView = (MyRecyclerView
标记和清除两个过程的效率都不高,清除之后会产生大量不连续的内存碎片,空间碎片太多可能会导致以后在程序运行过程中需要分配较大对象时,无法找到足够的连续内存而不得不提前触发另一次垃圾收集动作。...黑白屏产生原因:当我们在启动一个应用时,系统会去检查是否已经存在这样一个进程,如果不存在,系统的服务会先检查 startActivity 中的 intent 的信息,然后在去创建进程,最后启动 Acitivy...(); 但是 ListView 并没有实现动画效果,但我们可以在 Adapter 自己实现 item 的动画效果; 刷新区别: ListView 中通常刷新数据是用全局刷新 notifyDataSetChanged...MVC: 视图层 (View) 对应于 xml 布局文件和 java 代码动态 view 部分 控制层 (Controller) MVC 中 Android 的控制层是由 Activity 来承担的,Activity...android 中无法做到彻底分离,但在代码逻辑层面一定要分清业务逻辑被放置在 model 层,能够更好的复用和修改增加业务。
性能优化 1、图片的三级缓存中,图片加载到内存中,如果内存快爆了,会发生什么?怎么处理? 参考回答:首先我们要清楚图片的三级缓存是如何的: 如果内存足够时不回收。...标记和清除两个过程的效率都不高,清除之后会产生大量不连续的内存碎片,空间碎片太多可能会导致以后在程序运行过程中需要分配较大对象时,无法找到足够的连续内存而不得不提前触发另一次垃圾收集动作。...黑白屏产生原因:当我们在启动一个应用时,系统会去检查是否已经存在这样一个进程,如果不存在,系统的服务会先检查 startActivity 中的 intent 的信息,然后在去创建进程,最后启动 Acitivy...(); 但是 ListView 并没有实现动画效果,但我们可以在 Adapter 自己实现 item 的动画效果; 刷新区别: ListView 中通常刷新数据是用全局刷新 notifyDataSetChanged...MVC: 视图层 (View) 对应于 xml 布局文件和 java 代码动态 view 部分 控制层 (Controller) MVC 中 Android 的控制层是由 Activity 来承担的,Activity
逐行解析 XML 文件,创建相应的视图对象,并设置视图对象的属性。 将所有视图对象组织成一个视图层次结构。 在解析布局文件时,Android 系统会使用反射机制来动态地创建视图对象。...这意味着,每当系统遇到一个新的视图元素时,它会使用 Java 反射来创建该元素的实例。这种机制可以帮助系统在运行时动态地加载和创建视图对象,从而提高应用程序的性能和灵活性。...ViewStub 是一个轻量级的视图容器,可以在需要时动态地加载布局。...ConstraintLayout 是 Android 中的一种新型视图容器,可以帮助我们更轻松地创建复杂的布局。...在应用程序中,列表布局是最常用的视图之一。传统的列表布局一般使用 ListView 或 GridView,但这些视图容器在性能和灵活性方面存在一定的问题。
Fragment 加载方法 加载方法有两种 在xml文件中注册 在Java代码中加载 xml中注册: 例如在 fragment_demo.xml 中定义 android:layout_height="0dp" android:layout_weight="4" > FrameLayout> 在 MainActivity.java...个人较为喜欢动态加载。...稳妥的做法是,在onCreateView中初始化必要的变量。比如重置一些状态值。在多个 Fragment中切换时需要特别注意。...Fragment中定义一个接口,接口中声明你的方法 在onAttach方法中要求Activity实现该接口 在Activity中实现该方法 例如一个 activity 中布置了 2 个 Fragment
第2到9行可以看出,首先判断mDecor对象是否为空,如果为空则调用generateDecor()创建一个DecorView(该类是 FrameLayout子类,即一个ViewGroup视图),然后设置一些属性...组件的过程中,还会为该Activity组件创建窗口对象和视图对象;接着Activity组件创建完成之后,通过调用ActivityThread类的handleResumeActivity将它激活。...android:background="#ffa0a00c"/> ListView的自定义Adapter文件: public class InflateAdapter...使用merge的场合主要有两处:自定义View中使用,父元素尽量是FrameLayout,当然如果父元素是其他布局,而且不是太复杂的情况下也是可以使用的;Activity中的整体布局,根元素需要是FrameLayout...当我们自定义View时在构造函数inflate一个xml后可以实现onFinishInflate这个方法一些自定义的逻辑。
为ImageButton指定android:text属性没用,不会显示文字 可以指定android:background为按钮增加背景图片,但这图片是固定的 可以指定android:src为图片按钮增加图片属性...重要的是,background是底层的图片资源,src是覆盖在background上面的资源,他们可以叠加使用,实现选中的效果。...在界面中定义TabHost组件,并为该组件定义该选项卡的内容 B. Activity应该继承TabActivity C....通过TabHost对象的方法来创建选项卡、添加选项卡 选项卡主要由TabHost、TabWidget、FrameLayout3个组件组成,三者缺一不可,想象一下选项卡的特点,多个卡重叠在一起,所以用FrameLayout...可以通过OnItemSelectedListener监听选择项的改变 14.列表试图(ListView和ListActivity) 创建ListView由两种方式: 直接使用ListView进行创建
font> 在BaseActivity/BaseFragment的子类中可通过上一步的封装比较方便地使用加载状态显示功能 这种封装的好处是通过封装动态地创建LoadingView并添加到指定的父容器中,...确定思路 说到View的解耦,很容易联想到Android系统中的AdapterView(我们常用的GridView和ListView都是它的子类)及support包里提供的ViewPager、RecyclerView...时,动态新建一个FrameLayout布局 将原View从ParentView中移除,并用它的LayoutParams将FrameLayout添加到ParentView中替代原View在ParentView...中的位置 再将原View添加到FrameLayout中 在Fragment.onCreateView/RecyclerView.Adapter.onCreateViewHolder等方法中创建的View...:1.0.0' 2、 创建Adapter,在getView方法中实现创建各种状态视图(加载中、加载失败、空数据等)的逻辑 Gloading不侵入UI布局,完全由用户自定义。
列表项的常见规划设计 u在实际应用中,列表项显示设计往往是多种多样的 u一些常见的设计效果如下: 创建自定义适配器...u所谓动态显示就是在运行过程中通过程序增删改列表项 u在自定义适配器中添加增删改数据的方法 Ø在改变数据完成后一定要通知视图 public void addMail...="match_parent" android:layout_height="wrap_content" /> u在Activity中获取Spinner对象..., data); s.setAdapter(adapter); 实现带图片的Spinner u需要自定义Spinner的列表项视图 u使用自定义列表项视图的办法有多种...Ø通过自定义适配器来使用 Ø通过继承ArrayAdapter,覆盖getDropDownView()方法 实现带图片的Spinner,通过覆盖
适配器在列表控件中的用途 u适配器就是列表控件的模型 Ø为列表控件提供数据 Ø为列表项提供了显示视图 适配器的基类是android.widget.Adapter u定义了数据提供者的标准...u一些常见的设计效果如下: 创建自定义适配器 u编写自定义适配器,选择继承android.widget.BaseAdapter u通常为适配器关联一个list,用于数据的提供...u所谓动态显示就是在运行过程中通过程序增删改列表项 u在自定义适配器中添加增删改数据的方法 Ø在改变数据完成后一定要通知视图 public void addMail(Mail m) {dataList.add..., data);s.setAdapter(adapter); 实现带图片的Spinner u需要自定义Spinner的列表项视图 u使用自定义列表项视图的办法有多种 Ø通过自定义适配器来使用 Ø通过继承...ArrayAdapter,覆盖getDropDownView()方法 实现带图片的Spinner,通过覆盖getDropDownView()方法实现自定义视图 ArrayAdapter<CharSequence
,点击重试的回调方法 abstract int getContainerId(); //子类中实现,LoadingUtil动态创建LoadingView并添加到该方法返回id对应的控件中 在BaseActivity...确定思路 说到View的解耦,很容易联想到Android系统中的AdapterView(我们常用的GridView和ListView都是它的子类)及support包里提供的ViewPager、RecyclerView...,动态新建一个FrameLayout布局 将原View从ParentView中移除,并用它的LayoutParams将FrameLayout添加到ParentView中替代原View在ParentView...中的位置 再将原View添加到FrameLayout中 在Fragment.onCreateView/RecyclerView.Adapter.onCreateViewHolder等方法中创建的View...:1.0.0' 2、 创建Adapter,在getView方法中实现创建各种状态视图(加载中、加载失败、空数据等)的逻辑 Gloading不侵入UI布局,完全由用户自定义。
使用注意点 1、DrawerLayout的第一个子元素必须是默认内容,即抽屉没有打开时显示的布局(如FrameLayout),后面紧跟的子元素是抽屉内容,即抽屉布局(如ListView)。...--可以在程序中根据抽屉菜单 切换Fragment--> FrameLayout android:id="@+id/fragment_layout" android..."> FrameLayout> <!...遇到的问题 1、在点击DrawerLayout中的空白处的时候,底部的content会获得事件。...解决办法:在include进的那个布局里面,添加clickable=true 2、除了抽屉的布局视图之外的视图究竟放哪里 左、右抽屉和中间内容视图默认是不显示的,其他布局视图都会直接显示出来,但是需要将其放在
布局:ListView的每个列表项通常由一个布局文件定义,用于指定列表项的外观和内容。可以在布局文件中添加控件来显示列表项中的各个元素。...定制化:通过定制适配器和列表项布局文件,可以实现对ListView的定制化。可以根据需求,自定义每个列表项的外观和内容,包括添加图片、文字、按钮等。...二 ListView使用方法 在XML布局文件中添加ListView控件: ListView android:id="@+id/listview" android:layout_width...addHeaderView(View v):添加头部视图,可以在ListView顶部插入一个视图。 addFooterView(View v):添加尾部视图,可以在ListView底部添加一个视图。...同时,你还可以添加点击事件监听器来处理ListView中列表项的交互操作。 五 总结 istView是Android开发中常用的列表视图控件,用于展示大量数据并实现用户的垂直滚动浏览。
先看下效果:需求是 滑动列表 ,其中一部分视图(粉丝数,关注数这一部分)在滑动到顶端的时候不消失,而是停留在整个界面头部。...我们先分析要解决的问题: 1、如何实现列表ListView顶部视图跟随ListView一起滑动 2、如何实现滑动过程中需要停留在顶部的视图 解决: 第一个问题,实现ListView与顶部视图一起滑动,ListView...提供一个方法,addHeadView(View); 意思就是在ListView顶部添加一个View。...那么这个View就能和ListView一起滚动。 第二个问题,怎么保证界面中间的某一部分视图滑动到顶部的时候停留在顶部呢?...> FrameLayout> java代码: 1 private LinearLayout invis; 2 private ListView
其实LayoutInflater技术广泛应用于需要动态添加View的时候,通过addview方法, 添加某一个子View 比如在ScrollView和ListView中,经常都可以看到LayoutInflater...在Activity布局中, 最外层的其实是FrameLayout,这并不是我们自己去写的, 而是系统给我们 LayoutInflater其实就是使用Android提供的pull解析方式来解析布局文件的,...那么我相信到这里很多哥们都是心存疑虑的, 我们平常用的布局也是 不在任何布局当中阿, 其实不然,在setContentView()方法中,Android会自动在布局文件的最外层再嵌套一个FrameLayout...,标题栏就是在很多界面顶部显示的那部分内容,比如我们刚刚的那个例子当中就有标题栏, 可以在代码中控制让他是否显示, 内容布局就是一个FrameLayout,这个布局的id就叫做content,我们调用SetContentView...这种自定义控件的特点就是不仅能够按照我们的需求加入相应的功能,还可以保留原生控件的所有功能,比如 Android PowerImageView实现,可以播放动画的强大ImageView 这篇文章中介绍的
) at android.widget.ListView.makeAndAddView(ListView.java:1864) at android.widget.ListView.fillSpecific...(ListView.java:1344) at android.widget.ListView.layoutChildren(ListView.java:1663) at...5038) at android.widget.FrameLayout.layoutChildren(FrameLayout.java:579) at android.widget.FrameLayout.onLayout...还没添加依赖之前,项目中也是使用的Glide进行图片的加载,会不会是项目中的Glide与容联Demo中的Glide有冲突呢。 我们可以根据报错的地方into方法,点进入看源码: ?...果然将容联Demo中的Glide版本改成4.5.0之后,编译运行进入客服界面后,没有报错了,完美解决
答案当然是否,那我想要实现自己非常酷酷的ListView时候,只有自己动手实现。不过,谷歌在2015在v4开发包加入 豪华套餐SwipeRefreshLayout供你享用。...如果子视图为自定义视图那么必须重写该方法。...同理,当你的子视图用布局包裹的时候,其就是你自定义的,除非你的子视图只有ListView,当有多个控件时候,其默认找不到ListView监听其滑动事件,必须重写该方法。...㈡重写SwipeRefreshLayout 既然找不到该子视图,那么就必须传入子视图的控件,以监听其滑动状态,也就是自定义一个属性: FrameLayout android:layout_width="match_parent" android:layout_height
领取专属 10元无门槛券
手把手带您无忧上云