android gridlayout(layout网格设置)

admin 465 0

各位老铁们,大家好,今天由我来为大家分享android gridlayout,以及layout网格设置的相关问题知识,希望对大家有所帮助。如果可以帮助到大家,还望关注收藏下本站,您的支持是我们最大的动力,谢谢大家了哈,下面我们开始吧!

一、请教:android gridlayout 如何设置列宽和行高

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

2、关于设置列宽和行高,GridView本身只是个视图展示和listview一样,要想把里面的元素缩小放大,把添加到里面的布局缩小放大即可

二、Android开发之layout_gravity属性

layout_gravity是LinearLayout子元素的特有属性。对于layout_gravity,该属性用于设置控件相对于容器的对齐方式,可选项有:top、bottom、left、right、center_vertical、fill_vertical、 center、fill等等。

这些可选项中不是适用于每一种布局。在垂直线性布局中,android:gravity为bottom不起作用;而水平线性布局中,android:gravity为right不起作用。

本属性是android:layout_gravity属性,与 android:gravity属同。android:gravity是LinearLayout的特有属性。android:layout_gravity是LinearLayout子元素的特有属性,不要混淆了。

Android是一种基于Linux的自由及开放源代码的操作系统,主要使用于移动设备,如智能手机和平板电脑,由Google公司和开放手机联盟领导及开发。尚未有统一中文名称,中国大陆地区较多人使用“安卓”或“安致”。Android操作系统最初由Andy Rubin开发,主要支持手机。2005年8月由Google收购注资。

2007年11月,Google与84家硬件制造商、软件开发商及电信营运商组建开放手机联盟共同研发改良Android系统。随后Google以Apache开源许可证的授权方式,发布了Android的源代码。第一部Android智能手机发布于2008年10月。

Android逐渐扩展到平板电脑及其他领域上,如电视、数码相机、游戏机等。2011年第一季度,Android在全球的市场份额首次超过塞班系统,跃居全球第一。 2013年的第四季度,Android平台手机的全球市场份额已经达到78.1%。

三、android gridlayout 无法通过java代码设置控件大小

1、问题就在于你没有为每个item指定宽高

2、bn.setLayoutParams(lp);

实际上是无效的,因为btn的父控件是GridItem而不是RelativeLayout

3、实际上是无效的,因为btn的父控件是GridItem而不是RelativeLayout

4、GridLayout.LayoutParamsparams=newGridLayout.LayoutParams(rowSpec,columnSpec);

这句后面加上设置宽高的语句

5、//宽高实际数值你自己计算,这里取40

6、params.height=40;

这样就行了,顺便附上改后真机上的效果

7、这样就行了,顺便附上改后真机上的效果

四、在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即可,前一个设置表明该控件跨越的行数或列数,后一个设置表明该控件填满所跨越的整行或整列。

五、Android关于 gridlayout的问题

1、rowSpec和columnSpec分别设置了一个按钮的位置是第几行和第几列。

2、(i/ 4+ 2)的意思是String[] chars中id为i的元素,所处行数是i/4+2。因为i是int型,所以i/4向下取整。至于那个+2,无所谓的。

3、i%4的意思是i/4后的余数,因为计算器排版中一行有4个元素,所以比如2这个元素,它在String[] chars中id是9,那么他的位置是9/4的余数,也就是1,列数用0,1,2,3表示,所以它在第二列。

六、高版本android型号手机动态添加GridLayout不显示问题

在7.0版本的手机中,出现了动态添加GridLayout不显示,一直白板的问题。

经过多种LayoutParams的测试,发现GridLayout.LayoutParams并不能显示,LinearLayout.LayoutParams可以,这个时候我就有个灵感,可不可以把GridLayout.LayoutParams换成LinearLayout.LayoutParams,然后我就看GridLayout的源码方法,发现没有直接设置宽高的构造方法,然后找到一个set其他LayoutParams的方法,这个时候我就高兴了,我就直接在构造方法中写入LinearLayout.LayoutParams

七、求助: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三种布局。

(一)、概念:线性布局控制其中的控件或组件横向或纵向排列。不线性布局布局中,每一行或每一列只能放一个控件。并且线性布局不会换行。当控件排列到窗体边缘,后面的控件就被隐藏,而不会显示出来。

线性布局的默认方向是水平方向(Horizontal)。vertical

(二)、LinearLayout的常用属性:

1.android:orientation定义布局内控件或组件的排列方式

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的三原色,即有透明度的三原色。

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特有属性:

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该控件位于父布局控件的水平中心位置吗?

属性说明:设置布局的对齐模式。可以取以下值:

alignMargins--对齐子视图边距。

属性说明:GridLayout的最大列数

属性说明:GridLayout的最大行数

属性说明:GridLayout中子元素的布局方向。有以下取值:

5、android:columnOrderPreserved

属性说明:设置该网格布局是否保留列序号。默认是true。

属性说明:设置该网格布局是否保留行序号。默认是true。

属性说明:设置GridLayout使用默认的边距。默认值是false。

(二)、GridLayout子元素的属性:

属性说明:显示该控件的列。例如,android:layout_column="0",表示在第1列显示该控件;android:layout_column="1",表示在第2列显示该控件。

属性说明:该控件所在行。例如,android:layout_row="0",表示在第1行显示该控件;android:layout_row="1",表示在第2行显示该控件。它和 android:layout_column类似。

属性说明:列合并。即该控件所占的列数。例如,android:layout_columnSpan="2",表示该控件占2列。

属性说明:行合并。即该控件所占的行数。例如,android:layout_rowSpan="2",表示该控件占2行。

属性说明:该控件的布局方式。选项值:

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--控件置于容器的结束处,不改变控件的大小。

好了,文章到这里就结束啦,如果本次分享的android gridlayout和layout网格设置问题对您有所帮助,还望关注下本站哦!