我知道我们可以为android设置以下值:gravity和android:layout_gravity财产:
居中中心_垂直center_horizontal等。
但我对这两者都感到困惑。
android:gravity和android:layout_gravity的用法有什么区别?
我知道我们可以为android设置以下值:gravity和android:layout_gravity财产:
居中中心_垂直center_horizontal等。
但我对这两者都感到困惑。
android:gravity和android:layout_gravity的用法有什么区别?
当前回答
简短回答:使用android:gravity或setGravity()控制容器所有子视图的重力;使用android:layout_gravity或setLayoutParams()控制容器中单个视图的重力。
长话短说:要控制线性布局容器(如LinearLayout或RadioGroup)中的重力,有两种方法:
要控制LinearLayout容器的所有子视图的重力(正如您在书中所做的那样),请在布局XML文件中使用android:gravity(而不是android:layout_gravity)或代码中使用setGravity()方法。要控制子视图在其容器中的重力,请使用android:layout_gravity XML属性。在代码中,需要获取视图的LinearLayout.LayoutParams并设置其重力。下面是一个代码示例,它在水平方向的容器中将按钮设置为底部:import android.widget.LinearLayout.LayoutParams;import android.view.Gravity;...Button Button=(Button)findViewById(R.id.MyButtonId);//需要转换为LinearLayout.LayoutParams才能访问重力场LayoutParams params=(LayoutParams)按钮.getLayoutParams();params.gravity=重力.BOTTOM;button.setLayoutParams(params);
对于水平LinearLayout容器,其子视图的水平重力一个接一个地左对齐,不能更改。将android:layout_gravity设置为center_horizontal没有效果。默认垂直重力为中心(或center_vertical),可以更改为顶部或底部。实际上,默认layout_gravity值为-1,但Android将其垂直居中。
要更改水平线性容器中子视图的水平位置,可以使用子视图的layout_weight、margin和padding。
同样,对于垂直视图组容器,其子视图的垂直重力是上下对齐的,不能更改。默认水平重力为center(或center_horizontal),可以更改为向左或向右。
实际上,像按钮这样的子视图还具有android:gravity XML属性和setGravity()方法来控制其子视图——其中的文本。button.setGravity(int)链接到此developer.android.com条目。
其他回答
我只是想在这里添加我自己的解释-来自iOS的背景,这是我如何在iOS术语中内化两者的:
布局重力会影响您在超级视图中的位置。重力会影响子视图在您体内的位置。
另一种说法是,布局重力定位你自己,而重力定位你的孩子。
重力——应用于其自身的视图。
布局重力---应用于与其父级相关的视图。
从我可以收集到的layout_gravity是该视图在其父视图中的重力,而重力是该视图中的子视图的重力。
我认为这是正确的,但找到答案的最佳方法是四处游玩。
记住这一点的一个简单技巧是,地心引力适用于地球内部的我们。所以,安卓:重力是指内部视图。
记住layout_gravity中的out,这将帮助您记住android:layout_ggravity将指视图外部
查看图像以了解重力