本来是没什么问题的,但是我发现,他在这个界面加了一个Fragment。...我们发现了,这个fragment是对onCreate中的ViewGroup参数进行了操作,把他里面的RecycleView做了处理,然后最后在return 了一个View,而且这个View的引用的布局与我们上面的...return view;复制代码 你有想过这个onCreate方法中的ViewGroup参数到底是什么,为什么这里它可以直接使用findViewById等。然后去对RecycleView做处理。...="我是Fragment" /> 复制代码 然后我们把这个Fragment添加到Activity的最外面的LinearLayout中。...---- 问题二: 我们在自己写的这个Demo中的Fragment的oncreate方法中打印这个ViewGroup。
在android的v4包中有一个控件 Drawerlayout,主要实现了左拉和右拉菜单,类似于之前的“抽屉”功能,此控件使用简单,效果很柔和,操作起来体验非常好,下面是我实现的一个简单效果的部分截图:...是不是在平时开发的应用中很常见?OK,那么接下来我直接上代码: activity_sliding.xml: <?xml version="1.0" encoding="utf-8"?...RelativeLayout </android.support.v4.widget.DrawerLayout 通过上面的布局文件我们发现 drawerlayout中的子布局分为content、...和onDrawerSlide的事件处理,以便于开发者在滑动过程中自定义要处理的一些操作。...最后检查一下你的AS是不是最新版,如果不是的话,则需要在build.gradle中增加以下配置: compile ‘com.android.support:appcompat-v7:24.2.1’
本文为大家分享了Android动态布局的实现代码,供大家参考,具体内容如下 ?...内容如下:介绍多种实现动态布局的方法,以及如何用代码来调整View位置 这里只介绍三种布局情况(注意不是方式) 1、无xml : 一个父类布局包含一个子父类布局,子父类布局中包含ImageView 2、...()找到要进行添加的布局控件 之后的步骤和无xml布局的2、3、4一样 代码如下: 1、无xml : 一个父类布局包含一个子父类布局,子父类布局中包含ImageView RelativeLayout relativeLayout...); rl.setGravity(RelativeLayout.CENTER_IN_PARENT); //设置imageView 在 rl中的位置为居中 rl.addView(imageView,..." </LinearLayout 是不是很简单啊,了解到原理后对以后一些需要动态变化的布局操作起来就十分的方便了。
为什么要先看过度绘制的问题,因为直接直观方便啊,在每一台手机的开发者选项里中打开显示过度绘制区域,通过颜色我们就能辨别我们的App是不是存在过度绘制的问题。...拿到UI Tree之后,我们主要分析以下三个问题:(我用一个简单的Demo来分析) 【问题1】没有用的父布局 使用Hierarchy Viewer查看我们的UI Tree,如发现红框的RelativeLayout...,每一个错误都有非常清晰的描述,你应该如何去改,在右边的箭头,程序帮我们直接定位到错误代码地方,是不是非常方便!...线程策略主要用于检测UI线程中是否存在读写磁盘的操作,是否有网络请求操作,以及检查自定义代码是否在UI线程执行得比较慢的情况 自定义的耗时调用 使用detectCustomSlowCalls()开启 磁盘读取操作...流畅度优化经验总结 最后我来总结一下通篇对流畅度优化上的经验: UI布局优化 使用LinearLayout代替RelativeLayout,因为LinearLayout性能上稍微好一点 如果复杂的布局,
正所谓一通百通,真正掌握一种方法之后,就可以使用这个方法变换出各种不通的效果。 今天仍然还是实现一个自定义控件,然后我们在任意Activity的布局文件中引用一下,即可实现图片滚动器的效果。...*/ private VelocityTracker mVelocityTracker; /** * 重写SlidingSwitcherView的构造函数,用于允许在XML中引用当前的自定义布局。...,我还是重用了很多之前的代码,这里有几个重要点我说一下。...然后看一下布局文件中如何使用我们自定义的这个控件,创建或打开activity_main.xml,里面加入如下代码: <LinearLayout xmlns:android="http://schemas.android.com...没关系,我在后面的一篇文章中补充了自动播放这个功能,而且不仅仅是自动播放功能喔,请参考 Android使用自定义属性实现图片自动播放滚动的功能。 今天的文章就到这里了,有问题的朋友请在下面留言。
正所谓一通百通,真正掌握一种方法之后,就可以使用这个方法变换出各种不通的效果。 今天仍然还是实现一个自定义控件,然后我们在任意Activity的布局文件中引用一下,即可实现图片滚动器的效果。...*/ private VelocityTracker mVelocityTracker; /** * 重写SlidingSwitcherView的构造函数,用于允许在XML中引用当前的自定义布局...,我还是重用了很多之前的代码,这里有几个重要点我说一下。...然后看一下布局文件中如何使用我们自定义的这个控件,创建或打开activity_main.xml,里面加入如下代码: <LinearLayout xmlns:android="http://schemas.android.com...没关系,我在后面的一篇文章中补充了自动播放这个功能,而且不仅仅是自动播放功能喔,请参考 Android图片滚动,加入自动播放功能,使用自定义属性实现,霸气十足!
之前的文章中在最后也提到了,如果是你的应用程序中有很多个Activity都需要加入滑动菜单的功能,那么每个Activity都要写上百行的代码才能实现效果,再简单的滑动菜单实现方案也没用。...没错,基本上这些代码和之前那篇文章的代码大同小异,只不过以前这些代码是写在Activity里的,而现在我们移动到了自定义的View当中。 接着我来说明一下和以前不同的部分。...因此在这里我们也可以看出,使用SlidingLayout这个布局的前提条件,必须为这个布局提供两个子元素,第一个元素会作为左边布局偏移出屏幕,第二个元素会作为右边布局显示在屏幕上。...使用自定义布局的话,就可以用简单的方式在任意Activity中加入滑动菜单功能,即使你有再多的Activity也不用怕了,一分钟引入滑动菜单妥妥的。...在Acitivty的layout中引入我们自定义的布局,并且给这个布局要加入两个直接子元素。 2. 在Activity中通过setScrollEvent方法,给一个View注册touch事件。
我给翻译一下就是: 所有在App中能看到的和做的都是在Activity上。...onCreate 当Activity运行的时候,首先会调用这个方法,在它里面,需要用setContentView()方法来设置UI布局。 另外,布局中的各种控件,都是在这里初始化的。..."wrap_content" android:text="@string/hello_world" /> RelativeLayout用来表示,这个一个相对布局...,有了它,就可以引用Android给我们提供好的控件属性; layout_width表示布局的宽,layout_height表示布局的高,有3种值:match_parent撑满父布局,wrap_content...下课 学习了本节课程,相信一定能够大致懂得第一个App里面不同文件的作用,为自己写出代码作铺垫。 有什么问题请在下面留言评论,我们一起进步!
大家好,又见面了,我是全栈君 自从Fragment出现,曾经有段时间,感觉大家谈什么都能跟Fragment谈上关系,做什么都要问下Fragment能实现不~~~哈哈,是不是有点过~~~ 本篇博客力求为大家说明...步骤: 1、继承Fragment,重写onCreateView决定Fragemnt的布局 2、在Activity中声明此Fragment,就当和普通的View一样 下面展示一个例子(我使用2个Fragment..." android:layout_height="fill_parent" /> 是不是把Fragment当成普通的View一样声明在...Activity的布局文件中,然后所有控件的事件处理等代码都由各自的Fragment去处理,瞬间觉得Activity好干净有木有~~代码的可读性、复用性以及可维护性是不是瞬间提升了~~~下面看下效果图:...a、比如:我在FragmentA中的EditText填了一些数据,当切换到FragmentB时,如果希望会到A还能看到数据,则适合你的就是hide和show;也就是说,希望保留用户操作的面板,你可以使用
本文实例讲述了Android编程实现ListView中item部分区域添加点击事件功能。...分享给大家供大家参考,具体如下: 需求如题目:Android listview中item部分区域添加点击事件,在一个界面显示了listview,但显示的内容分为上下两部分,分别是白色的背景和蓝色的背景,...现在需要只点击蓝色的背景,才能跳转到其他界面,解决方式如下: 一开始想着是不是能在list item的布局给上层布局添加一个: android:clickable="false" android:focusable...="false" 就是禁止点击,但试了试没有效果,后来师傅提醒我,我的这个listview使用的适配器是BaseAdapter可以在适配器里面拿到下层蓝色的Relativelayout的id,然后给这个布局添加点击事件...,就可以实现部分区域响应事件,事实证明是非常可行的,贴出主要的代码如下: // 开仓单适配器 public class OrderAdapter extends BaseAdapter { public
使用场景如下:在一个 Activity 中监听屏幕旋转事件,在Activity主布局文件中有个按钮点击弹出一个 PopupWindow,另外在主布局文件中有个 ListView。...看了上面的效果图,再来看看简单的布局实现和Activity代码实现 Activity主布局文件如下 <RelativeLayout xmlns:android="http://schemas.android.com...当然一开始肯定要不停的尝试新的写法,看看是不是布局文件本身有什么问题。如果怎么尝试都解决不了的时候,这个时候可能已经踩到系统的坑了,可是怎么确定?去看看源码,然后调试一下看看。...但是这个时候还是要坚信代码里面存在真理,它不会骗人。这里其实可以靠猜,是不是可能存在调用了多次update,本来设置好的又被其他地方调用update给覆盖了。...但是猜是靠经验的,一般不好猜,还是笨方法吧,在 update 方法开头打个断点,看看代码怎么执行的。
一般在Android动态加载布局或者添加控件用得较多,本节我们就来学习下他在实际开发中 的一些用法~ 1.LayoutInflater的相关介绍 1)Layout是什么鬼?...又或者设置margin等等,这个由你决定~ 2.纯Java代码加载布局 我们早已习惯了使用XML生成我们需要的布局,但是在一些特定的情况下,我们 需要使用Java代码往我们的布局中动态的添加组件或者布局...但是不建议大家完全地使用Java代码来编写Android页面布局,首先一点就是代码会多, 一多久容易乱,而且不利于业务的分离,我们还是建议使用xml来完成布局,然后通过 Java代码对里面的组件进行修改...3.Java代码动态添加控件或xml布局 第二点我们讲解了使用纯Java代码来加载布局,实际当中用得并不多,更多的时候是动态 的添加View控件以及动态的加载XML布局!...="wrap_content" android:layout_height="wrap_content" android:text="我是Java代码加载的布局"
在 Android开发之那些好用的数据结构与API 一文中提到了Android中一些好用的数据结构和API,这次继续补充几个我在项目中用到的好用的但是不是人人都知道的东东 ~~ 1、android...:digits 在Android开发中,经常要设置EditText为密码显示,但是通常要求密码只能是 **字母和数字 . _ **的组合,此时就可以用该属性进行过滤 <EditText...布局 (需要准备一个背景透明的提示图片) <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"...setEmptyView.png 注意 经过本人测试,如果ListView包含在某些下拉刷新框架中,这样做是没有效果的,应该是冲突了。...常见的使用场景是某个按钮特别小,为了设置点击事件,给其包裹一层Parent布局,将点击事件写到Parent上,如果希望被包裹按钮的点击效果对应的Selector继续生效的话,就可以使用它了,来个有说服力的测试案例
那么本文我同样基于实际案例,针对应用的布局进行优化进而提升App性能。...贴出这个布局的代码(贴出后超过公众号字数限制,可以点击查看原文查看布局代码)。 每一行布局都使用RelativeLayout嵌套来做,而且设置了多重颜色。...同样的UI效果可以使用不同的布局来完成,我们需要考虑使用少的嵌套层次以及控件个数来完成,例如设置界面的普通一行,可以像之前一样使用RelativeLayout嵌套TextView以及ImageView来实现...一旦这里的执行时间过长,就需要检查是不是使用了非官方的动画工具或者是检查动画执行的过程中是不是触发了读写操作等等; Input Handling:表示系统处理输入事件所耗费的时间,粗略等于对事件处理方法所执行的时间...经过这几步的优化之后,一般就不会再有布局的性能问题,同时还是要强调:优化是一个长期的工作,同时也必须结合具体场景:有取有舍! 参考:Android性能优化典范
同事先尝试了下ConstraintLayout优化布局层次,笔者也使用了下,发现确实比较好用。下面我们一起来试着使用布局吧~~ 二 demo 来看下有个简单的布局是这个样子的 ?...image.png 其中文字‘金豆’ 左边金色条是居中对齐文字一栏的。按传统布局,这个简单的布局至少需要三层布局, 垂直方向和 单个水平方向。下面看下使用ConstraintLayout布局。 <?...首先我们看下 要保证垂直方向的顺序布局。 如果没使用ConstraintLayout前,需要使用垂直方向的LinearLayout 或RelativeLayout。...app:layout_constraintTop_toBottomOf="@+id/golden_beans_tips" 一行代码,是不是跟RelativeLayout类似。...相似的还有垂直方向layout_constraintVertical_bias 恩,ui需求又来了,比较常见的如, 水平三个按钮,我想等分水平的,这里不再赘述,ConstraintLayout中类似LinearLayout
是不是差不多实现了微信一样的效果?那么我们怎么来判断以上布局是不是最优的呢?当然,我们是有工具来查看的。相信很多童鞋用过了,第一个就是 Hierarchy View,第二个就是 显示GPU过度绘制。...ContentFrameLayout接点之后就是我们上面XML代码的布局了,从上图可以看到,我们布局最多有 5 层,其实你从代码中也可以看到是 5 层,那么我们是否能减少以上的布局的嵌套层次呢?...答案是肯定的,废话不多说,我们直接上一份我优化过的布局代码吧。...我们自己布局过度绘制的情况比微信本身的情况有很大的改善,是不是感觉很nice~~。...然后你在代码中这么使用即可 findViewById(R.id.et_name).setOnClickListener(new View.OnClickListener() { @Override
我们评判一个UI界面不是认为有多复杂才给力,或者说有多炫才靠谱,一个简约而又不平凡的高效UI界面才是一个灰常牛逼的界面设计。 引入 在android应用中,采用硬编码方式编写界面并不是一个提倡的方法。...小结一个:在我们设计UI布局时,应该从使用尽量少的组件的前提下入手,由于系统组件的封装比较完善,把多个简单的组件交由一个复杂一点的组件来实现,是可以得到比较好的效率的。...我们还记刚开始给的一个图吗?我们在布局中使用的到仅仅是一个TextView,而RelativeLayout貌似啥子活儿都没干的样子。。。。。。 ?...呼呼呼~~是不是从六层降低到了四层结构,好一股小清新的感觉呀,我都感觉飘飘然了,自然效率的提升是毋容置疑滴。。。。。...小结一个:标签能百分百代替这个布局组件,对于不复杂的其他布局组件如线性布局等组合组件中,可以在继承子类中对其属性进行设置后也可以使用标签,<merge
这个嘛,我打算放在下一篇文章再来说明,步步为营,循序渐进。 ① 修改布局 首先要修改这个布局先达到图中的效果。 ? 下面我附上现在的布局代码。...在styles.xml中增加如下代码: <!...现在的确是有播放音乐了,但是我也需要暂停啊。 ④ 暂停音乐 在底部播放按钮btn_play的点击事件中进行处理。...最后在播放完成监听方法里面重置这个动画 ? 好了,功能就写完了,下面直接运行吧。 ⑧ 运行效果图 ? 看这个图片是不是有那么点意思了呢?...结语 写代码的工程中逻辑很重要,最好是一气呵成,当你的思路被打断,无法集中注意力时,是写不好代码的,而文章则是在代码写好之后再写的,如果有什么问题及时提出来,我会尽快解决。
对于 Include 普通布局,逻辑要复杂的多。Include 标签本身有 AttributeSet 信息,包含的布局根节点也有 AttributeSet 信息,应该使用哪个呢?...构建根 View 的时候,使用根节点的 AttributeSet,但是在 View 构建完成后,需要将 Include 标签属性中的 Android:ID 和 Android:visiablity 属性赋值给根...APT 方式的问题 在 XML 生成代码构建的实践过程中,我们一开始也是采用的掌阅 X2C 的方案,在业务代码中插入如下注解,用于标记需要转换成 Java 的 XML 文件,在各业务模块中注册注解处理器...Java 布局代码中使用了很多自定义 View。...在 Androidx 中已经有提供了 AsyncLayoutInflater 用于进行 XML 的异步加载,在这个类基础上可以封装一个异步预加载工具,但是实际使用下来会发现直接使用 AsyncLayoutInflater
领取专属 10元无门槛券
手把手带您无忧上云