linearlayout和relativelayout的区别
LinearLayout(线性布局)
每一个LinearLayout里面又可分为垂直布局(android:orientation="vertical")和水平布局(android:orientation="horizontal" )。当垂直布局时,每一行就只有一个元素,多个元素依次垂直往下;水平布局,只有一行,每一个元素依次向右排列。
RelativeLayout(相对布局)
相对布局可以理解为某一个元素为参照物,来定位的布局方式。主要属性有:相对于某一个元素android:layout_below、 android:layout_toLeftOf相对于父元素的地方android:layout_alignParentLeft、android:layout_alignParentRigh
[create_time]2017-10-26 10:07:22[/create_time]2017-10-26 11:44:16[finished_time]1[reply_count]0[alue_good]Macross_86[uname]https://himg.bdimg.com/sys/portrait/item/wise.1.b569237d.2nxTKxNfoji6A5Nki3Cj1g.jpg?time=4433&tieba_portrait_time=4433[avatar]TA获得超过1680个赞[slogan]这个人很懒,什么都没留下![intro]141[view_count]
android linearlayout 的属性怎么描述
FrameLayout是五大布局中最简单的一个布局,在这个布局中,整个界面被当成一块空白备用区域,所有的子元素都不能被指定放置的位置,它们统统放于这块区域的左上角,并且后面的子元素直接覆盖在前面的子元素之上,将前面的子元素部分和全部遮挡。显示效果如下,第一个TextView被第二个TextView完全遮挡,第三个TextView遮挡了第二个TextView的部分位置。LinearLayout按照垂直或者水平的顺序依次排列子元素,每一个子元素都位于前一个元素之后。如果是垂直排列,那么将是一个N行单列的结构,每一行只会有一个元素,而不论这个元素的宽度为多少;如果是水平排列,那么将是一个单行N列的结构。如果搭建两行两列的结构,通常的方式是先垂直排列两个元素,每一个元素里再包含一个LinearLayout进行水平排列。 LinearLayout中的子元素属性android:layout_weight生效,它用于描述该子元素在剩余空间中占有的大小比例。加入一行只有一个文本框,那么它的默认值就为0,如果一行中有两个等长的文本框,那么他们的android:layout_weight值可以是同为1。如果一行中有两个不等长的文本框,那么他们的android:layout_weight值分别为1和2,那么第一个文本框将占据剩余空间的三分之二,第二个文本框将占据剩余空间中的三分之一。android:layout_weight遵循数值越小,重要度越高的原则。
[create_time]2017-08-26 15:00:23[/create_time]2017-09-10 14:59:47[finished_time]1[reply_count]0[alue_good]匿名用户[uname]https://iknow-base.cdn.bcebos.com/yt/bdsp/icon/anonymous.png?x-bce-process=image/quality,q_80[avatar][slogan]这个人很懒,什么都没留下![intro]111[view_count]
不废话简述RelativeLayout和LinearLayout及FrameLayout性能分析
1.RelativeLayout会让子View调用2次onMeasure,LinearLayout 在有weight时,也会调用子View2次onMeasure
2.RelativeLayout的子View如果高度和RelativeLayout不同,则会引发效率问题,当子View很复杂时,这个问题会更加严重。如果可以,尽量使用padding代替margin。
3.在不影响层级深度的情况下,使用LinearLayout和FrameLayout而不是RelativeLayout。
最后再思考一下文章开头那个矛盾的问题,为什么Google给开发者默认新建了个RelativeLayout,而自己却在DecorView自己是FrameLayout但是它只有一个子元素是属于LinearLayout。因为DecorView的层级深度是已知而且固定的,上面一个标题栏,下面一个内容栏。采用RelativeLayout并不会降低层级深度,所以此时在根节点上用LinearLayout是效率最高的。而之所以给开发者默认新建了个RelativeLayout是希望开发者能采用尽量少的View层级来表达布局以实现性能最优,因为复杂的View嵌套对性能的影响会更大一些。
4.能用两层LinearLayout,尽量用一个RelativeLayout,在时间上此时RelativeLayout耗时更小。另外LinearLayout慎用layout_weight,也将会增加一倍耗时操作。由于使用LinearLayout的layout_weight,大多数时间是不一样的,这会降低测量的速度。这只是一个如何合理使用Layout的案例,必要的时候,你要小心考虑是否用layout weight。总之减少层级结构,才是王道,让onMeasure做延迟加载,用viewStub,include等一些技巧。
[create_time]2022-07-27 12:23:24[/create_time]2022-08-05 21:54:26[finished_time]1[reply_count]0[alue_good]天罗网17[uname]https://himg.bdimg.com/sys/portrait/item/wise.1.b5668a1.MCbbKeRMln4YrBR5C-et5Q.jpg?time=4976&tieba_portrait_time=4976[avatar]TA获得超过5115个赞[slogan]这个人很懒,什么都没留下![intro]21[view_count]
relativelayout 是什么
Android 五大布局: FrameLayout(框架布局),LinearLayout (线性布局),AbsoluteLayout(绝对布局),RelativeLayout(相对布局),TableLayout(表格布局)。
FrameLayout
所有东西依次都放在左上角,会重叠,这个布局比较简单,也只能放一点比较简单的东西。
LinearLayout
每一个LinearLayout里面又可分为垂直布局(android:orientation="vertical")和水平布局(android:orientation="horizontal" )。当垂直布局时,每一行就只有一个元素,多个元素依次垂直往下;水平布局时,只有一行,每一个元素依次向右排列。
AbsoluteLayout
绝对布局用X,Y坐标来指定元素的位置,这种布局方式也比较简单,但是在屏幕旋转时,往往会出问题,而且多个元素的时候,计算比较麻烦。
RelativeLayout
相对布局可以理解为某一个元素为参照物,来定位的布局方式。主要属性有:相对于某一个元素android:layout_below、 android:layout_toLeftOf相对于父元素的地方android:layout_alignParentLeft、android:layout_alignParentRigh
TableLayout
每一个TableLayout里面有表格行TableRow,TableRow里面可以具体定义每一个元素。
每一个布局都有自己适合的方式,这五个布局元素可以相互嵌套应用,做出美观的界面。
[create_time]2017-09-05 14:03:56[/create_time]2014-02-20 09:20:06[finished_time]2[reply_count]34[alue_good]灬煞风景灬[uname]https://himg.bdimg.com/sys/portrait/item/wise.1.8fd76d9f.c3tZCiKhO7UZG3KTHAzVTA.jpg?time=4515&tieba_portrait_time=4515[avatar]TA获得超过146个赞[slogan]这个人很懒,什么都没留下![intro]6023[view_count]
android布局控件之LinearLayout详解
Android布局控件之LinearLayout详解
LinearLayout是线性布局控件,它包含的子控件将以横向或竖向的方式排列,按照相对位置来排列所有的widgets或者其他的containers,超过边界时,某些控件将缺失或消失。因此一个垂直列表的每一行只会有一个widget或者是container,而不管他们有多宽,而一个水平列表将会只有一个行高(高度为最高子控件的高度加上边框高度)。LinearLayout保持其所包含的widget或者是container之间的间隔以及互相对齐(相对一个控件的右对齐、中间对齐或者左对齐)。
xml属性
android:baselineAligned:是否允许用户调整它内容的基线。
android:baselineAlignedChildIndex:当一个线性布局与另一个布局是按基线对齐的一部分,它可以指定其内容的基线对齐方式。
android:gravity:指定如何在该对象中放置此对象的内容(x/y坐标值)。
android:orientation:设置它内容的对其方向(横向/竖向)。
gravity 这个英文单词是重心的意思,在这里就表示停靠位置的意思。
android:layout_gravity 和 android:gravity 的区别
从名字上可以看到,android:gravity是对元素本身说的,元素本身的文本显示在什么地方靠着换个属性设置,不过不设置默认是在左侧的。
android:layout_gravity是相对与它的父元素说的,说明元素显示在父元素的什么位置。
比如说button:android:layout_gravity 表示按钮在界面上的位置。 android:gravity表示button上的字在button上的位置。
可选值
这两个属性可选的值有:top、bottom、left、right、center_vertical、fill_vertical、center_horizontal、fill_horizontal、center、fill、clip_vertical。
而且这些属性是可以多选的,用“|”分开。
默认这个的值是:Gravity.LEFT
LinearLayout还支持为其包含的widget或者是container指定填充权值。好处就是允许其包含的widget或者是container可以填充屏幕上的剩余空间。这也避免了在一个大屏幕中,一串widgets或者是containers挤成一堆的情况,而是允许他们放大填充空白。剩余的空间会按这些widgets或者是containers指定的权值比例分配屏幕。默认的 weight 值为0,表示按照widgets或者是containers实际大小来显示,若高于0的值,则将Container剩余可用空间分割,分割大小具体取决于每一个widget或者是container的layout_weight及该权值在所有widgets或者是containers中的比例。例如,如果有三个文本框,其中两个指定的权值为1,那么,这两个文本框将等比例地放大,并填满剩余的空间,而第三个文本框不会放大,按实际大小来显示。如果前两个文本框的取值一个为2,一个为1,显示第三个文本框后剩余的空间的2/3给权值为2的,1/3大小给权值为1的。也就是权值越大,重要度越大。
如果LinearLayout包含子LinearLayout,子LinearLayout之间的权值越大的,重要度则越小。如果有LinearLayout A包含LinearLayout C,D,C的权值为2,D的权值为1,则屏幕的2/3空间分给权值为1的D,1/3分给权值为2的C。在LinearLayout嵌套的情况下,子LinearLayout必须要设置权值,否则默认的情况是未设置权值的子LinearLayout占据整个屏幕
[create_time]2022-07-01 11:52:30[/create_time]2022-07-16 11:52:29[finished_time]1[reply_count]0[alue_good]匿名用户[uname]https://iknow-base.cdn.bcebos.com/yt/bdsp/icon/anonymous.png?x-bce-process=image/quality,q_80[avatar][slogan]这个人很懒,什么都没留下![intro]25[view_count]
Android 如何把一个自定义的LinearLayout放入指定的fragment中
Fragment中的onCreateView的时候 要求返回一个创建好的视图View,你只需要将你的LinearLayout,定义在这个view中即可关于Fragment介绍及生命同期:1、Fragment的产生与介绍Android运行在各种各样的设备中,有小屏幕的手机,超大屏的平板甚至电视。针对屏幕尺寸的差距,很多情况下,都是先针对手机开发一套App,然后拷贝一份,修改布局以适应平板神马超级大屏的。难道无法做到一个App可以同时适应手机和平板么,当然了,必须有啊。Fragment的出现就是为了解决这样的问题。你可以把Fragment当成Activity的一个界面的一个组成部分,甚至Activity的界面可以完全有不同的Fragment组成,更帅气的是Fragment拥有自己的生命周期和接收、处理用户的事件,这样就不必在Activity写一堆控件的事件处理的代码了。更为重要的是,你可以动态的添加、替换和移除某个Fragment。2、Fragment的生命周期Fragment必须是依存与Activity而存在的,因此Activity的生命周期会直接影响到Fragment的生命周期。官网这张图很好的说明了两者生命周期的关系:可以看到Fragment比Activity多了几个额外的生命周期回调方法:onAttach(Activity)当Fragment与Activity发生关联时调用。onCreateView(LayoutInflater, ViewGroup,Bundle)创建该Fragment的视图onActivityCreated(Bundle)当Activity的onCreate方法返回时调用onDestoryView()与onCreateView想对应,当该Fragment的视图被移除时调用onDetach()与onAttach相对应,当Fragment与Activity关联被取消时调用.注意:除了onCreateView,其他的所有方法如果你重写了,必须先调用父类的该方法
[create_time]2016-06-20 12:36:29[/create_time]2014-07-09 13:32:29[finished_time]2[reply_count]0[alue_good]QQMSD8[uname]https://himg.bdimg.com/sys/portrait/item/public.1.860414ab.BYH9zNfN9Aep7lEvDIfBdg.jpg[avatar]知道合伙人软件行家[slogan]没有做不到,只有想不到,帮助别人的同时也是对自己的提升[intro]2936[view_count]如何让popupwindow显示在整个屏幕的中央?
通过设置Dialog的样式实现public static void showShareWindow(Activity activity, View parentView, String pageName){View mContentView = null;V5ShareView mShareView = null;if(mContentView == null){mContentView = LayoutInflater.from(activity).inflate(R.layout.v5_share_layout, null);}if(mPopUpWindow == null){mPopUpWindow = new PopupWindow(mContentView, LayoutParams.MATCH_PARENT,LayoutParams.MATCH_PARENT);mPopUpWindow.setBackgroundDrawable(new BitmapDrawable());mPopUpWindow.setOutsideTouchable(true);mPopUpWindow.setFocusable(true);}if(mShareView == null){mShareView = new V5ShareView(mContentView,pageName,activity);}mShareView.setOnShareViewDismiss(new ShareViewDismiss() {@Overridepublic void dismiss() {mPopUpWindow.dismiss();}});mPopUpWindow.showAtLocation(activity.getWindow().getDecorView(), Gravity.CENTER, 0, 0);}希望可以帮到你。参考资料百度知道.百度知道[引用时间2018-1-26]
[create_time]2019-09-28 02:54:21[/create_time]2017-12-16 01:57:56[finished_time]1[reply_count]0[alue_good]526jhgyug[uname]https://himg.bdimg.com/sys/portrait/item/wise.1.c13d10bb.GcNg44GV3hKppEkqHVjCTQ.jpg?time=5758&tieba_portrait_time=5758[avatar]TA获得超过124个赞[slogan]这个人很懒,什么都没留下![intro]186[view_count]android开发xml中如何设置背景图才能填充整个屏幕?代码如下
1. android:background="@drawable/background2"
这句话里面定义的背景图片太小了吧?建议使用纯颜色试试,或者改用.9.png图片做背景。
2. 说句题外话,不要使用AbsoluteLayout了,使用RelativeLayout,LinearLayout,FrameLayout等。
[create_time]2013-12-18 14:02:09[/create_time]2014-01-02 13:42:18[finished_time]4[reply_count]6[alue_good]scuping[uname]https://himg.bdimg.com/sys/portrait/item/wise.1.9046e355.fOCHbAuuV1s-ueWnRKglaA.jpg?time=3259&tieba_portrait_time=3259[avatar][slogan]这个人很懒,什么都没留下![intro]10462[view_count]
Android中的五种布局方式
分别是:FrameLayout(框架布局),LinearLayout (线性布局),AbsoluteLayout(绝对布局),RelativeLayout(相对布局),TableLayout(表格布局)。
一、FrameLayout:所有东西依次都放在左上角,会重叠,这个布局比较简单,也只能放一点比较简单的东西。二、LinearLayout:线性布局,每一个LinearLayout里面又可分为垂直布局(android:orientation="vertical")和水平布局(android:orientation="horizontal" )。当垂直布局时,每一行就只有一个元素,多个元素依次垂直往下;水平布局时,只有一行,每一个元素依次向右排列。三、AbsoluteLayout:绝对布局用X,Y坐标来指定元素的位置,这种布局方式也比较简单,但是在屏幕旋转时,往往会出问题,而且多个元素的时候,计算比较麻烦。四、RelativeLayout:相对布局可以理解为某一个元素为参照物,来定位的布局方式。主要属性有:相对于某一个元素android:layout_below、 android:layout_toLeftOf相对于父元素的地方android:layout_alignParentLeft、android:layout_alignParentRigh;五、TableLayout:表格布局,每一个TableLayout里面有表格行TableRow,TableRow里面可以具体定义每一个元素。每一个布局都有自己适合的方式,这五个布局元素可以相互嵌套应用,做出美观的界面。
[create_time]2022-06-20 00:53:50[/create_time]2022-07-02 08:51:17[finished_time]1[reply_count]0[alue_good]世纪网络17[uname]https://himg.bdimg.com/sys/portrait/item/wise.1.486ca09d.jZ691Jzdj5pkPiv7Z8Tryg.jpg?time=710&tieba_portrait_time=710[avatar]TA获得超过4820个赞[slogan]这个人很懒,什么都没留下![intro]34[view_count]
简述在Android中如何使用布局?
亲亲[开心],很高兴为您解答,在 Android 中,布局是指定义 UI 元素相对位置的一种方式。可以使用 XML 文件来创建布局,并与 Java 代码结合使用。以下是在 Android 中使用布局的步骤:1.定义布局文件:打开 Android Studio 并创建一个新项目。在 res/layout 目录下创建一个新的 XML 文件。此文件将用于定义 UI 元素的位置。2.添加视图元素:使用布局文件中的各种标记添加视图元素(例如 TextView、Button、ImageView 等)。您可以在布局文件中设置这些元素的大小、位置等属xing。3.设置宽度和高度:要设置视图元素的宽度和高度,请使用 android:layout_width 和 android:layout_height 属xing。常见的值包括 match_parent(填充整个父视图), wrap_content(根据内容自适应大小)和具体数值(如 100dp)。4.设置布局方向:使用 android:orientation 属设置线布局的方向(水平或垂直)。5.设置背景颜色等属:使用 android:background 属设置视图元素的背景颜色或图像。6.嵌套布局:您可以将不同的布局嵌套在彼此内部,以创建更复杂的 UI。例如,您可以在 LinearLayout 中嵌套 RelativeLayout 或使用其他类型的容器布局。7.在代码中使用布局:您可以通过在 Java 代码中使用 findViewById() 方法来获取布局中的视图。您可以根据需要更改它们的属xing。【摘要】
简述在Android中如何使用布局?【提问】
1. 什么是Android中的UI设计?2. 简述在Android中如何使用布局?3. 请说明Android中常用的布局类型以及它们的特点。4. 如何在Android中使用LinearLayout?请举例说明。5. 什么是Relativelayout?请说明它的优势和使用方法。【提问】
👀五分钟过了 上面那个既然还没回 你不会是假的吧👀【提问】
亲亲[开心],很高兴为您解答,在 Android 中,布局是指定义 UI 元素相对位置的一种方式。可以使用 XML 文件来创建布局,并与 Java 代码结合使用。以下是在 Android 中使用布局的步骤:1.定义布局文件:打开 Android Studio 并创建一个新项目。在 res/layout 目录下创建一个新的 XML 文件。此文件将用于定义 UI 元素的位置。2.添加视图元素:使用布局文件中的各种标记添加视图元素(例如 TextView、Button、ImageView 等)。您可以在布局文件中设置这些元素的大小、位置等属xing。3.设置宽度和高度:要设置视图元素的宽度和高度,请使用 android:layout_width 和 android:layout_height 属xing。常见的值包括 match_parent(填充整个父视图), wrap_content(根据内容自适应大小)和具体数值(如 100dp)。4.设置布局方向:使用 android:orientation 属设置线布局的方向(水平或垂直)。5.设置背景颜色等属:使用 android:background 属设置视图元素的背景颜色或图像。6.嵌套布局:您可以将不同的布局嵌套在彼此内部,以创建更复杂的 UI。例如,您可以在 LinearLayout 中嵌套 RelativeLayout 或使用其他类型的容器布局。7.在代码中使用布局:您可以通过在 Java 代码中使用 findViewById() 方法来获取布局中的视图。您可以根据需要更改它们的属xing。【回答】
👀👀👀好家伙 这不是坑人嘛【提问】
亲亲[开心], Android中的UI设计是指在Android移动设备上创建用户界面(User Interface,UI)的过程。UI设计包括选择合适的颜色、字体和图标,以及布局和组织应用程序的各个部分,以便用户可以轻松地使用它们。在Android开发中,UI设计非常重要,因为它直接影响用户体验。一个好的UI设计能够提高应用程序的易用xing和吸引力,从而增加用户的满意度和留存率。Android提供了丰富的UI组件和工具,帮助开发人员创建高质量的应用程序。其中包括视图(View)、布局(Layout)、片段(Fragment)和样式(Style)等。开发人员必须根据应用程序的需求和目标受众来选择合适的UI组件和工具,并遵循Android的设计规范,以确保应用程序的一致xing和易用xing。【回答】
亲亲[开心],在Android中,布局用于将UI元素排列在屏幕上。您可以使用XML文件定义布局,使用Java代码或数据绑定库填充布局。以下是在Android中使用布局的步骤:1.定义布局:使用XML文件定义布局。 Android提供了许多预定义的布局类型,例如LinearLayout,RelativeLayout和ConstraintLayout等。2.添加视图:在布局文件中添加视图。这些视图可以是按钮,文本框,图像等。3.设置属xing:为每个视图设置属xing,例如大小,位置和外观。可以在XML文件中设置这些属xing。4.填充布局:使用Java代码或数据绑定库填充布局。在Activity类中,您可以使用inflate()方法加载布局并显示它们。5.运行应用程序:构建并运行应用程序以查看布局效果。【回答】
亲亲[开心],在Android中,常用的布局类型主要有以下几种:线xing布局,相对布局,帧布局,约束布局,网格布局,这几种常用的布局类型在Android应用程序的开发中都有自己的特点和适用场景,开发者需要根据具体的需求选择合适的布局方式来实现UI设计。【回答】
亲亲[开心],咱们这边是正规平台不是接的。【回答】
如何在Android中使用LinearLayout?能举例说明嘛👀【提问】
在 Android 开发中,LinearLayout 是一种布局管理器,可以按照水平或竖直方向排列子视图,可以很好地帮助我们实现简单布局。这里我给你举个例子,演示如何使用LinearLayout 实现简单布局:在一个 LinearLayout 中可以嵌套 LinearLayout(水平方向的或竖直方向的),可以通过 android:orientation 属性设置它的显示方向为水平或竖直。具体实现步骤如下:1. 首先,打开你的 Android Studio,创建一个新的项目,或打开一个已有的项目。2. 在 XML 布局文件中使用 LinearLayout 标签```xml ```3. 在 LinearLayout 中添加子视图比如,我们可以添加一个 TextView 和一个 Button 控件,其中 Button 控件设置了 android:layout_gravity 属性,用于控制显示位置。```xml <Button【回答】
[create_time]2023-05-04 16:34:19[/create_time]2023-05-19 16:27:04[finished_time]1[reply_count]0[alue_good]Forest名小林[uname]https://himg.bdimg.com/sys/portrait/item/wise.1.36c97886.Ht9ygcN9De7Ni0PVohOPlA.jpg?time=12608&tieba_portrait_time=12608[avatar][slogan]这个人很懒,什么都没留下![intro]53[view_count]
android LinearLayout 里面的东西怎么换行
由于前段时间项目中使用到了自动换行的线性布局,本来打算用表格布局在里面一个个的用Java代码添加ImageView的,但是添加的View控件是不确定的,因为得靠服务器的数据返回,就这样手动用Java代码画布局的方式就这样夭折了,因为在表哥布局中我无法确定一行显示多少个ImageView的数目,所以无法动态添加,最后自能自己去看看那种能够换行的线性布局了,线性布局比较不好的是不能自动换行,也就是当设置LinearLayout的orentation 设置为vertical 为竖直方向也就是只有一列,每行只能显示一个View或者View的子类,当设置LinearLayout的orentitation为Horizontal,LinearLayout的只能显示为一行,横向显示,当屏幕满了的时候,View控件并不会自动换行,所以我们要做的就是在LinearLayout满的时候自动换行。
需要了解的是怎么样绘制根据子控件的长宽绘制父控件的宽度与高度,所以需要传入的参数控件的高度,视图分为两种一种是View类型的,代表控件有TextView,Button,EditText 等等,还有一种是装视图的容器控件继承自ViewGroup的控件,如LinearLayout,RelativeLayout,TabHost等等控件,需要自动换行的线性布局的话,就需要根据子控件的高度与宽度,来动态加载父控件的高度与宽度,所以需要在构造函数中传入每一个子控件的固定的高度,或者是动态设置子控件的高度与宽度。
将自定义的LinearLayout 也继承自ViewGroup 并且重写抽象类ViewGrouop的几个方法:onMeasure(),onLayout(),dispathDraw() 三个方法的意思分别是:第一个onMeasure()是用来计算控件以及子控件所占用的区域,第二个onLayout()是控制子控件的换行,第三个可写可不写,主要是用来绘制控件的边框,
自定义LinearLayout的代码如下:
[java] view plaincopyprint?
package com.huanglong.mylinearlayout;
import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.graphics.Rect;
import android.util.AttributeSet;
import android.view.View;
import android.view.ViewGroup;
/**
* @author huanglong 2013-5-28 自定义自动换行LinearLayout
*/
public class FixGridLayout extends ViewGroup {
private int mCellWidth;
private int mCellHeight;
public FixGridLayout(Context context) {
super(context);
}
public FixGridLayout(Context context, AttributeSet attrs) {
super(context, attrs);
}
public FixGridLayout(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
}
public void setmCellWidth(int w) {
mCellWidth = w;
requestLayout();
}
public void setmCellHeight(int h) {
mCellHeight = h;
requestLayout();
}
/**
* 控制子控件的换行
*/
@Override
protected void onLayout(boolean changed, int l, int t, int r, int b) {
int cellWidth = mCellWidth;
int cellHeight = mCellHeight;
int columns = (r - l) / cellWidth;
if (columns < 0) {
columns = 1;
}
int x = 0;
int y = 0;
int i = 0;
int count = getChildCount();
for (int j = 0; j < count; j++) {
final View childView = getChildAt(j);
// 获取子控件Child的宽高
int w = childView.getMeasuredWidth();
int h = childView.getMeasuredHeight();
// 计算子控件的顶点坐标
int left = x + ((cellWidth - w) / 2);
int top = y + ((cellHeight - h) / 2);
// int left = x;
// int top = y;
// 布局子控件
childView.layout(left, top, left + w, top + h);
if (i >= (columns - 1)) {
i = 0;
x = 0;
y += cellHeight;
} else {
i++;
x += cellWidth;
}
}
}
/**
* 计算控件及子控件所占区域
*/
@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
// 创建测量参数
int cellWidthSpec = MeasureSpec.makeMeasureSpec(mCellWidth, MeasureSpec.AT_MOST);
int cellHeightSpec = MeasureSpec.makeMeasureSpec(mCellHeight, MeasureSpec.AT_MOST);
// 记录ViewGroup中Child的总个数
int count = getChildCount();
// 设置子空间Child的宽高
for (int i = 0; i < count; i++) {
View childView = getChildAt(i);
/*
* 090 This is called to find out how big a view should be. 091 The
* parent supplies constraint information in the width and height
* parameters. 092 The actual mesurement work of a view is performed
* in onMeasure(int, int), 093 called by this method. 094 Therefore,
* only onMeasure(int, int) can and must be overriden by subclasses.
* 095
*/
childView.measure(cellWidthSpec, cellHeightSpec);
}
// 设置容器控件所占区域大小
// 注意setMeasuredDimension和resolveSize的用法
setMeasuredDimension(resolveSize(mCellWidth * count, widthMeasureSpec),
resolveSize(mCellHeight * count, heightMeasureSpec));
// setMeasuredDimension(widthMeasureSpec, heightMeasureSpec);
// 不需要调用父类的方法
// super.onMeasure(widthMeasureSpec, heightMeasureSpec);
}
/**
* 为控件添加边框
*/
@Override
protected void dispatchDraw(Canvas canvas) {
// 获取布局控件宽高
int width = getWidth();
int height = getHeight();
// 创建画笔
Paint mPaint = new Paint();
// 设置画笔的各个属性
mPaint.setColor(Color.BLUE);
mPaint.setStyle(Paint.Style.STROKE);
mPaint.setStrokeWidth(10);
mPaint.setAntiAlias(true);
// 创建矩形框
Rect mRect = new Rect(0, 0, width, height);
// 绘制边框
canvas.drawRect(mRect, mPaint);
// 最后必须调用父类的方法
super.dispatchDraw(canvas);
}
}
然后在Xml文件中引用自己定义的控件,在Java代码中调用:
[java] view plaincopyprint?
package com.huanglong.mylinearlayout;
import android.os.Bundle;
import android.app.Activity;
import android.view.Menu;
import android.view.MenuItem;
import android.widget.CheckBox;
import android.widget.SimpleAdapter;
import android.support.v4.app.NavUtils;
public class MainActivity extends Activity {
private SimpleAdapter adapter;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
FixGridLayout fixGridLayout = (FixGridLayout) findViewById(R.id.ll);
fixGridLayout.setmCellHeight(30);
fixGridLayout.setmCellWidth(100);
for (int i = 0; i < 7; i++) {
CheckBox box = new CheckBox(MainActivity.this);
box.setText("第"+i+"个");
fixGridLayout.addView(box);
}
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.activity_main, menu);
return true;
}
}
[create_time]2018-02-27 17:57:12[/create_time]2013-05-04 14:49:54[finished_time]3[reply_count]6[alue_good]百度网友44f46165c2[uname]https://himg.bdimg.com/sys/portrait/item/wise.1.d803d12e.xPxTGFHu4clQjJ-GyqTlLg.jpg?time=3825&tieba_portrait_time=3825[avatar]TA获得超过872个赞[slogan]这个人很懒,什么都没留下![intro]9614[view_count]
Android Application中线性布局的特点
LinearLayout按照垂直或者水平的顺序依次排列子元素
每一个子元素都位于前一个元素之后。
如果是垂直排列,那么将是一个N行单列的结构,每一行只会有一个元素,而不论这个元素的宽度为多少;如果是水平排列,那么将是一个单行N列的结构。
如果搭建两行两列的结构,通常的方式是先垂直排列两个元素,每一个元素里再包含一个LinearLayout进行水平排列。
线性布局可以分为水平和垂直方向的布局
可以通过android:orientation来定义方向
android:orientation=“horizontal”表示水平方向,android:orientation=“vertical”表示垂直方向。
[create_time]2014-09-29 22:13:42[/create_time]2014-10-14 19:31:40[finished_time]1[reply_count]4[alue_good]QQMSD8[uname]https://himg.bdimg.com/sys/portrait/item/public.1.860414ab.BYH9zNfN9Aep7lEvDIfBdg.jpg[avatar]知道合伙人软件行家[slogan]没有做不到,只有想不到,帮助别人的同时也是对自己的提升[intro]2503[view_count]
android 怎么让父布局和子布局一起滑动
把你所有想一起动的控件放到一个scrollview下,然后listview用这个
public void onMeasure(int widthMeasureSpec, int heightMeasureSpec){
int mExpandSpec = MeasureSpec.makeMeasureSpec(Integer.MAX_VALUE >> 2, MeasureSpec.AT_MOST);
super.onMeasure(widthMeasureSpec, mExpandSpec);
}
}
scrollview用这个
/**
* 解决ScrollView嵌套ViewPager出现的滑动冲突问题
*/
public class MyScrollView extends ScrollView {
View.OnTouchListener mGestureListener;
// 滑动距离及坐标
private float xDistance, yDistance, xLast, yLast;
public MyScrollView(Context context, AttributeSet attrs) {
super(context, attrs);
}
@Override
public boolean onInterceptTouchEvent(MotionEvent ev) {
switch (ev.getAction()) {
case MotionEvent.ACTION_DOWN:
xDistance = yDistance = 0f;
xLast = ev.getX();
yLast = ev.getY();
break;
case MotionEvent.ACTION_MOVE:
final float curX = ev.getX();
final float curY = ev.getY();
xDistance += Math.abs(curX - xLast);
yDistance += Math.abs(curY - yLast);
xLast = curX;
yLast = curY;
if(xDistance > yDistance){
return false;
}
}
return super.onInterceptTouchEvent(ev);
}
}
[create_time]2016-10-27 07:55:54[/create_time]2016-10-27 10:48:20[finished_time]1[reply_count]0[alue_good]八维教育[uname]https://iknow-pic.cdn.bcebos.com/d0c8a786c9177f3e99c57f2078cf3bc79f3d562e?x-bce-process=image/resize,m_lfit,w_900,h_1200,limit_1/quality,q_85[avatar]学高端技术就来八维教育[slogan]北京八维教育是位于首都中关村上地信息产业园区的一所民办非学历高等教育机构。课程设置以市场需求为导向、以岗位要求为标准、为企业量身打造符合企业和市场需求的专业型人才。[intro]412[view_count]