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包中大约有:
-
FlowLayout 流式布局
-
BorderLayout 边框式布局
-
GridLayout 网格布局
-
CardLayout 卡片布局
-
GridBagLayout 复杂的网格布局
-
javax.swing包中大约有如下布局
-
BoxLayout 盒式布局
-
OverlayLayout 重叠布局
-
ScrollPaneLayout 类JScrollPane使用的布局管理器
-
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 — 控件置于容器的结束处,不改变控件的大小。