gridlayout网格布局 rid

JAVA里面GridLayout的作用

就是把你的组件按你指定的几行几列给分开,你添加其他组件时,会按你添加的顺序挨个添加到该组件上。比如说 contaninername.setLayout(new GridLayout(3,2)) 意思就是把contaninername这个组件设置成三行两列的网格布局

RecyclerView

RecyclerView 是Android一个更强大的控件,其不仅可以实现和ListView同样的效果,还有优化了ListView中的各种不足。其可以实现数据纵向滚动,也可以实现横向滚动(ListView做不到横向滚动)。接下来讲解RecyclerView的用法。

因为 RecyclerView 属于新增的控件,Android将RecyclerView定义在support库里。若要使用RecyclerView,第一步是要在 build.gradle 中添加对应的依赖库。

在 app/build.gradle 中的 dependencies闭包 添加以下内容:

然后点击顶部的Sync Now进行同步

由于 RecyclerView 不是内置在系统SDK中,需要把其完整的包名路径写出来

创建ImageView来显示水果图片,TextView来显示水果名字。

为 RecyclerView 新增适配器 FruitAdapter ,并让其继承于 RecyclerView.Adapter ,把泛型指定为 FruitAdapter.ViewHolder 。

LayoutManager 用于指定RecyclerView的布局方式。 LinearLayoutManager 指的是线性布局。

运行效果:

把LinearLayout改成垂直排列,因为水果名字长度不一样,把宽度改为100dp。
ImageView和TextView都改为水平居中

通过调用 setOrientation() 把布局的排列方向改为水平排列。

得益于RecyclerView的设计,我们可以通过LayoutManager实现各种不同的排列方式的布局。

运行结果:

除了 LinearLayoutManager , RecyclerView 还提供了 GridLayoutManager(网格布局) 和 StaggeredGridLayoutManager(瀑布流布局)

GridLayoutManager(网格布局)

修改 MainActivity.java ,把

换成

GridLayoutManager (Context context, int spanCount)

运行结果:

StaggeredGridLayoutManager(瀑布流布局)

把LinearLayout的宽度设为 match_parent 是因为瀑布流的宽度是 根据布局的列数来自动适配的,而不是固定值 。(GridLayoutManager也是 根据布局的列数来自动适配的

StaggeredGridLayoutManager layoutManager = new StaggeredGridLayoutManager(3,StaggeredGridLayoutManager.VERTICAL);
StaggeredGridLayoutManager传入2个参数,第一个是布局的列数,第二个是布局的排列方向。

random.nextInt(20)+1 产生1-20的随机数
运行效果:

上图是GridLayoutManager,下图是StaggeredGridLayout。
当从显示效果来看,已经一目了然。
GridLayoutManager是会固定高度的,所以会留下很多空白区域。
相反,StaggeredGridLayout并不会固定高度,以至于就算子项的高度不一致,下一行的会自动靠拢上一行。

修改ViewHolder,添加fruitView变量来保存子项最外层布局的实例。

运行效果:

react-grid-layout:可拖拽缩放网格布局插件

react-grid-layout

    React-Grid-Layout 是一个网格布局系统,具有响应性并支持断点(breakpoints)。断点布局可以由用户提供或自动生成。

RGL 仅支持 React,不支持 jQuery。

    使用npm安装 React-Grid-Layout:

    样式表:

    下面的示例将生成一个包含三个项目的网格,其中:

    1.    用户将无法拖动或调整项目大小 a

    2.    b 将被限制为最小宽度为 2 个网格块和最大宽度为 4 个网格块

    3.    用户将能够自由拖动和调整项目大小 c

可以选择直接在子项上设置布局属性:

    《ResponsiveReactGridLayout》和《ReactGridLayout》采取width来计算拖动事件位置。在简单的情况下,WidthProvider可以使用HOC在初始化和窗口调整大小事件时自动确定宽度。

    // 除使用 《WidthProvider》情况外必填

     width: number,

    // 如果为 true,容器高度自适应内容

     autoSize: ?boolean = true ,

    //布局中的列数。

     cols: ?number = 12 ,

    // 取消拖拽时的css选择器

     draggableCancel: ?string = ’’ ,

    // 拖拽时的css选择器

     draggableHandle: ?string = ’’ ,

    // 紧凑排列类型

     compactType: ?( ’vertical’ | ’horizontal’ ) = ’vertical’ ;

    // 布局,格式为数组对象,例如:

    // {x: number, y: number, w: number, h: number}

    // 布局中的索引必须与每个项目组件上使用的键匹配。

    // 如果您选择使用自定义键,则可以在布局中指定该键

    // 数组对象,如下所示:

    // {i: string, x: number, y: number, w: number, h: number}

    //如果父组件没有设置layout,则需要在子组件设置 data-grid

     layout: ?array = null ,

    //  的margin值

     margin: ?,

    //  的padding值

     containerPadding: ? = margin,

    // 行高,可根据 breakpoints 改变

     rowHeight: ?number = 150 ,

    // 放置元素的配置。放置元素是一个从外部拖动某个元素时会出现的虚拟元素。

    //  i – 元素的id

    //  w – 元素的宽

    //  h – 元素的高

     droppingItem?: { i : string, w : number, h : number }

    // 是否可拖拽

     isDraggable: ?boolean = true ,

    //是否可重置大小

     isResizable: ?boolean = true ,

    //是否可设置边界

     isBounded: ?boolean = false ,

    // 使用 CSS3 translate() 替换position 的top/left ,可提升大约6倍性能

     useCSSTransforms: ?boolean = true ,

    //如果 ResponsiveReactGridLayout 或 ReactGridLayout 的父节点具有 “transform: scale(n)“ 属性,应该设置缩放系数以避免拖动时出现渲染伪影。

     transformScale: ?number = 1 ,

    //是否允许重叠

     allowOverlap: ?boolean = false ,

    //如果为 true,则网格项在被拖动时不会改变位置

     preventCollision: ?boolean = false ,

    // 如果为true, 带有`draggable={true}`属性的放置元素可被放置在网格上

    //注意:如果使用 Firefox,应该添加

    // `onDragStart={e =》 e.dataTransfer.setData(’text/plain’, ’ ’)}` 属性

    // 连同 `draggable={true}` 否则此功能将无法正常工作。

    // Firefox 需要 onDragStart 属性来进行拖动初始化

    //

         isBounded: ?boolean = false

    }

GridLayout设置item的间距

安卓4.0以后增加了网格布局,比起之前的tablelayout,这个会更高效一些,关于具体的API之类的网上已经很多了,这里只对开发过程中遇到的一些问题作说明:设置item间距方式。

1、刚开始的实验,为item设置margin,没有作用

2、接着查看其实现发现问题:Gridlayout内部的组件不能直接设置LinearLayout.LayoutParams,否则除了控件大小,其他一概不收,Margin自然也就不生效了;于是改正:

问题解决!

如果希望所有的控件在界面上均匀排列,应使用下列那种布局管理器 A)BoxLayout B)GridLayout C)Borde

对于JFrame和JWindow这样的顶层框架来说默认的布局管理器是边界布局(BorderLayout);JPanel默认的布局管理器为FlowLayout。

java.awt包中大约有:

  1. FlowLayout 流式布局

  2. BorderLayout 边框式布局

  3. GridLayout 网格布局

  4. CardLayout 卡片布局

  5. GridBagLayout 复杂的网格布局 

  6. javax.swing包中大约有如下布局

  7. BoxLayout 盒式布局

  8. OverlayLayout  重叠布局

  9. ScrollPaneLayout  类JScrollPane使用的布局管理器

  10. ViewportLayout   类JViewport使用的布局管理器

java中界面设计的网格布局怎样设计边距

GridLayout有三种构造方法。第三种方法可以设计边距
构造方法详细信息
1。GridLayout
public GridLayout()
创建具有默认值的网格布局,即每个组件占据一行一列。
从以下版本开始:
JDK1.1
2。GridLayout
public GridLayout(int rows,
int cols)
创建具有指定行数和列数的网格布局。给布局中的所有组件分配相等的大小。
rows 和 cols 中的一个可以为零(但不能两者同时为零),这表示可以将任何数目的对象置于行或列中。
参数:
rows – 该 rows 具有表示任意行数的值零。
cols – 该 cols 具有表示任意列数的值零。
3。GridLayout
public GridLayout(int rows,
int cols,
int hgap,
int vgap)
创建具有指定行数和列数的网格布局。给布局中的所有组件分配相等的大小。
此外,将水平和垂直间距设置为指定值。水平间距将置于列与列之间。将垂直间距将置于行与行之间。
rows 和 cols 中的一个可以为零(但不能两者同时为零),这表示可以将任何数目的对象置于行或列中。
所有 GridLayout 构造方法都服从这一规定。
参数:
rows – 该 rows 具有表示任意行数的值零
cols – 该 cols 具有表示任意列数的值零
hgap – 水平间距
vgap – 垂直间距
抛出:
IllegalArgumentException – 如果将 rows 和 cols 的值都设置为零

在android中没有gridlayout布局文件怎么办

本文重点讲述了自android4.0版本后新增的GridLayout网格布局的一些基本内容,并在此基础上实现了一个简单的计算器布局框架。通过本文,您可以了解到一些android UI开发的新特性,并能够实现相关应用。
在android4.0版本之前,如果想要达到网格布局的效果,首先可以考虑使用最常见的LinearLayout布局,但是这样的排布会产生如下几点问题:
1、不能同时在X,Y轴方向上进行控件的对齐。
2、当多层布局嵌套时会有性能问题。
3、不能稳定地支持一些支持自由布局的工具。
其次考虑使用表格布局TabelLayout,这种方式会把包含的元素以行和列的形式进行排列,每行为一个TableRow对象,也可以是一个View对象,而在TableRow中还可以继续添加其他的控件,每添加一个子控件就成为一列。但是使用这种布局可能会出现不能将控件占据多个行或列的问题,而且渲染速度也不能得到很好的保证。
android4.0以上版本出现的GridLayout布局解决了以上问题。GridLayout布局使用虚细线将布局划分为行、列和单元格,也支持一个控件在行、列上都有交错排列。而GridLayout使用的其实是跟LinearLayout类似的API,只不过是修改了一下相关的标签而已,所以对于开发者来说,掌握GridLayout还是很容易的事情。GridLayout的布局策略简单分为以下三个部分:
首先它与LinearLayout布局一样,也分为水平和垂直两种方式,默认是水平布局,一个控件挨着一个控件从左到右依次排列,但是通过指定android:columnCount设置列数的属性后,控件会自动换行进行排列。另一方面,对于GridLayout布局中的子控件,默认按照wrap_content的方式设置其显示,这只需要在GridLayout布局中显式声明即可。

其次,若要指定某控件显示在固定的行或列,只需设置该子控件的android:layout_row和android:layout_column属性即可,但是需要注意:android:layout_row=”0”表示从第一行开始,android:layout_column=”0”表示从第一列开始,这与编程语言中一维数组的赋值情况类似。
最后,如果需要设置某控件跨越多行或多列,只需将该子控件的android:layout_rowSpan或者layout_columnSpan属性设置为数值,再设置其layout_gravity属性为fill即可,前一个设置表明该控件跨越的行数或列数,后一个设置表明该控件填满所跨越的整行或整列。

swing 的 GridLayout布局,如何控制行列的高度和宽度

GridLayout是网格布局,它会均分你的布局容器,所以行列高度和宽度是统一的,只能通过调整布局容器大小来改变。如果要控制单元网格的大小,那只能用GridBagLayout了

JAVA的gridlayout如何设置不填充满

GridLayout
用public GridLayout(int rows, int cols, int hgap,int vgap)创建具有指定行数和列数的网格布局。给布局中的所有组件分配相等的大小。
此外,将水平和垂直间距设置为指定值。水平间距将置于列与列之间。将垂直间距将置于行与行之间。
参数:
rows – 该 rows 具有表示任意行数的值零
cols – 该 cols 具有表示任意列数的值零
hgap – 水平间距
vgap – 垂直间距
调整每格之间横纵间距可以改变组件大小。

求助:android:layout

布局的介绍:
1、在4.0以前版本中一共有五种布局,都是ViewGroup的子类。分别是AbsoluteLayout、RelativeLayout、LinearLayout、FrameLayout、TableLayout。而TableLayout是LinearLayout的子类。(中文分别是:绝对布局、相对布局、线性布局、帧布局、表格布局)。
2、在2.2操作系统中将AbsoluteLayout过期。而目前TableLayout也逐渐少用。
3、在4.0之后又新增GridLayout。(GridLayout最经典的案例是计算器界面)
总之,Android中一共有六种布局。目前推荐使用RelativeLayout、LinearLayout、GridLayout三种布局。
LinearLayout:
(一)、概念:线性布局控制其中的控件或组件横向或纵向排列。不线性布局布局中,每一行或每一列只能放一个控件。并且线性布局不会换行。当控件排列到窗体边缘,后面的控件就被隐藏,而不会显示出来。
线性布局的默认方向是水平方向(Horizontal)。vertical
(二)、LinearLayout的常用属性:
1.android:orientation 定义布局内控件或组件的排列方式
可选项:vertical 、 horizontal
2.android:layout_width 定义控件的宽度
可选项:fill_parent / match_parent/ wrap_content/绝对数值
备注:fill_parent / match_parent的效果完全一致,都是填充整个父控件。但是自2.2版本开始推荐使用match_parent 。wrap_content指的是该控件的宽度正好包裹内容物。
3.android:layout_height 定义控件的高度
可选项:fill_parent / match_parent/ wrap_content/绝对数值
备注:fill_parent / match_parent的效果完全一致,都是高度填充整个父控件。wrap_content指的是该控件的高度正好包裹内容物。
4.android:id 设置控件的id。这样就可以在R.java中自动生成相应的值,在程序中通过findViewById就可以调用。
设置id的格式为:android:id = “@+id/id的名字“
5.android:background 设置控件的背景颜色或背景图片
例如:android:background=“#ffffff“
android:background=“@drawable/图片名称“
【备注:】
颜色有RGB颜色格式和ARGB格式。RGB是红绿蓝三原色。而ARGB是带alpha的三原色,即有透明度的三原色。
#FFFFFF 代表白色
#000000 黑色
#FFFFFFFF 完全不透明
#00FFFFFF 完全透明
#88FFFFFF 半透明
6.android:layout_weight 设置控件的权重。即各控件在水平或者垂直方向上平均分配。
备注:如果是水平方向设置权重,要将android:layout_width设置为0dp,如果是垂直方向上使用权重,要将android:layout_height设置为0dp。否则权重容易受到高度或宽度的干扰而出现偏差。
7.android:gravity 该属性用来控制该View的内容物的位置。
如果该属性是定义在布局节点中,则该布局中所有控件的位置都受到这个属性的控制。
如果该属性出现在Button、TextView、EditText等控件中,则用来控制这些控件上的文字的位置。
可选项有:top、bottom、left、right、center_vertical、fill_vertical 、 center、fill等等。
【备注:】本属性与android:layout_gravity不同。
8.android:layout_gravity 该属性用于设置控件相对于容器的对齐方式。
可选项有:top、bottom、left、right、center_vertical、center_horizontal 、fill_vertical 、 center、fill等等。
这些可选项中不是适用于每一种布局。在垂直线性布局中,android:gravity为bottom不起作用;而水平线性布局中,android:gravity为right不起作用。
【备注:】而本属性是android:layout_gravity属性,与 android:gravity 属性不同。
(三)、LinearLayout的特有属性:【重新归纳:去除公共属性后的特有属性】
1、android:orientation 布局管理器内组件的排列方式
2、android:gravity 设置布局管理器内组件的对齐方式
(四)、 LinearLayout 子元素的特有属性:
1、android:layout_weight 子元素在 LinearLayout 中所占的权重
2、android:layout_gravity 子元素在 LinearLayout 中的对齐方式
RelativeLayout:
(一)、概念:指按着控件之间的相对位置来进行布局。
(二)、RelativeLayout特有属性:
1、android:gravity 设置布局容器内子控件的对齐方式
2、android:ignoreGravity 设置布局管理器内哪个控件不受gravity属性的影响
(三)、RelativeLayout子元素的特有属性:LayoutParams
A、第一组:指兄弟控件之间的相对位置。该组属性的值是另一个控件的id。
layout_toRightOf 该控件在哪个控件的右侧
layout_toLeftOf 该控件在哪个控件的左侧
layout_above 该控件在哪个控件的上侧
layout_below 该控件在哪个控件的下侧
B、第二组:指兄弟控件之间的对齐关系。该组属性的值是另一个控件的id。
layout_alignRight 该控件与哪个控件的右对齐
layout_alignLeft 该控件与哪个控件的左对齐
layout_alignTop 该控件与哪个控件的顶对齐
layout_alignBottom 该控件与哪个控件的底对齐
C、第三组:指控件与父布局之间的对齐关系。该组属性的值是true或者false。
layout_alignParentRight 该控件与父布局控件的右对齐吗?
layout_alignParentLeft 该控件与父布局控件的左对齐吗?
layout_alignParentTop 该控件与父布局控件的顶端对齐吗?
layout_alignParentBottom 该控件与父布局控件的底部对齐吗?
layout_centerInParent 该控件位于父布局控件的中心位置吗?
layout_centerVertical 该控件位于父布局控件的垂直中心位置吗?
layout_centerHorizontal 该控件位于父布局控件的水平中心位置吗?
GridLayout:网格布局
(一)、GridLayout布局属性:
1、android:alignmentMode
属性说明:设置布局的对齐模式。可以取以下值:
alignBounds — 对齐子视图边界。
alignMargins — 对齐子视图边距。
2、android:columnCount
属性说明:GridLayout的最大列数
3、android:rowCount
属性说明:GridLayout的最大行数
4、android:orientation
属性说明:GridLayout中子元素的布局方向。有以下取值:
horizontal — 水平布局。
vertical — 竖直布局。
5、android:columnOrderPreserved
属性说明: 设置该网格布局是否保留列序号。默认是true。
6、android:rowOrderPreserved
属性说明: 设置该网格布局是否保留行序号。默认是true。
7、android:useDefaultMargins
属性说明: 设置GridLayout使用默认的边距。默认值是false。
(二)、GridLayout子元素的属性:
1、android:layout_column
属性说明: 显示该控件的列。例如,android:layout_column=“0“,表示在第1列显示该控件;android:layout_column=“1“,表示在第2列显示该控件。
2、android:layout_row
属性说明: 该控件所在行。例如,android:layout_row=“0“,表示在第1行显示该控件;android:layout_row=“1“,表示在第2行显示该控件。它和 android:layout_column类似。
3、android:layout_columnSpan
属性说明: 列合并。即该控件所占的列数。例如,android:layout_columnSpan=“2“,表示该控件占2列。

4、android:layout_rowSpan
属性说明: 行合并。即该控件所占的行数。例如,android:layout_rowSpan=“2“,表示该控件占2行。
5、android:layout_gravity
属性说明:该控件的布局方式。选项值:
top — 控件置于容器顶部,不改变控件的大小。
bottom — 控件置于容器底部,不改变控件的大小。
left — 控件置于容器左边,不改变控件的大小。
right — 控件置于容器右边,不改变控件的大小。
center_vertical — 控件置于容器竖直方向中间,不改变控件的大小。
fill_vertical — 如果需要,则往竖直方向延伸该控件。
center_horizontal — 控件置于容器水平方向中间,不改变控件的大小。
fill_horizontal — 如果需要,则往水平方向延伸该控件。
center — 控件置于容器中间,不改变控件的大小。
fill — 如果需要,则往水平、竖直方向延伸该控件。
clip_vertical — 垂直剪切,剪切的方向基于该控件的top/bottom布局属性。若该控件的gravity是竖直的:若它的gravity是top的话,则剪切该控件的底部;若该控件的gravity是bottom的,则剪切该控件的顶部。
clip_horizontal — 水平剪切,剪切的方向基于该控件的left/right布局属性。若该控件的gravity是水平的:若它的gravity是left的话,则剪切该控件的右边;若该控件的gravity是 right的,则剪切该控件的左边。
start — 控件置于容器的起始处,不改变控件的大小。
end — 控件置于容器的结束处,不改变控件的大小。