为什么将重力应用于相对布局时不起作用?

12 浏览
0 Comments

为什么将重力应用于相对布局时不起作用?

我已经知道如果我在文本视图上使用layout_gravity="center_horizontal",那么文本将居中显示。但是我不想使用这个,因为我希望尽可能少地使用代码,最好的方法是将gravity="center_horizontal"应用于我的相对布局。我提出这个问题也是因为我担心在相对布局中使用gravitylayout_gravity。当我进行研究时,我看到了这个回答:this

请注意,其中有一部分说:

不要在RelativeLayout中使用gravity/layout_gravity。将它们用于LinearLayouts和FrameLayouts中的视图。

尽管从相对布局的Android文档中,很明显地列出了gravity作为一个有效的属性,这清楚地说明了Google打算将这些属性用于相对布局。

如果那句话是正确的,那么我如何在相对布局中居中视图?

此外,这是我的代码:

请注意标题不是水平居中的



    
    

enter image description here

0
0 Comments

相对布局和文本视图一直是我遇到的问题。我认为这是因为文本视图动态计算其大小,这会阻止其与布局的对齐方式正常工作。这只是我的一个推测。

我通常采用的解决方法是将文本视图的水平大小配置为match_parent。这可能不是最优解,但应该可以正常工作。如果你需要一个固定大小的文本视图,可以设置一个固定大小的尺寸,也应该可以正常工作,只有wrap_content会有问题。



    

编辑:

如 S. 建议的添加

android:layout_centerHorizontal="true"

wrap_content 也应该可以正常工作。原因在于我的理解仍然是相同的:文本视图的大小是稍后计算的。

嘿,感谢你的答案,但是我修改了我的代码,因为我添加的简化代码实际上是可以工作的。当我将AutoCompleteTextView作为相对布局的子项时,代码的对齐方式会混乱。对此你有什么想法吗?

哈哈,真的吗...无论如何,将其作为另一种选择方式,如果不是解决方案的话。

0
0 Comments

相对布局(RelativeLayout)中的重力属性(gravity)不起作用的原因是,当将AutoCompleteTextView作为RelativeLayout的子元素时,重力设置失效。而将TextView作为子元素时,重力设置生效。

解决方法是将AutoCompleteTextView的android:layout_width属性设置为wrap_content,这样重力设置才会生效。这个问题是AutoCompleteTextView特有的问题,其他组件不会出现这个问题。

总结一下,相对布局中的重力属性只对TextView有效,对于其他组件如按钮或开关等则不起作用。而对于AutoCompleteTextView组件,只有在将android:layout_width属性设置为wrap_content时,重力设置才会生效。

需要注意的是,无论是哪个组件,只有宽度最宽的组件会决定其他组件的位置。

以上就是相对布局中重力属性失效的原因和解决方法。

0
0 Comments

相对布局中为什么重力(gravity)不起作用的原因是因为相对布局(RelativeLayout)的子视图中的layout_gravity属性没有效果。而解决方法是使用LinearLayout代替RelativeLayout,并设置gravity属性来实现相同的效果。

在原始答案中指出,gravity和layout_gravity属性适用于ViewGroup(特别是LinearLayout)中的子视图,而不适用于ViewGroup本身。然而,RelativeLayout确实可以设置gravity和layout_gravity属性。layout_gravity属性会影响RelativeLayout在其父视图中的位置,所以在这里不涉及这方面的内容。然而,gravity属性会影响子视图的位置,如下图所示。

可以看到,gravity属性有效,但layout_gravity属性无效。

当将gravity属性添加到LinearLayout中时,它会按照预期排列子视图。例如,可以通过将LinearLayout的gravity设置为center_horizontal来减少代码量,而无需为每个子视图单独设置layout_gravity属性。以下是图像中的不同选项。

可以看到,当视图使用layout_gravity属性时,它会覆盖LinearLayout的gravity属性。

当在RelativeLayout中定位视图时,通常的做法是为每个视图添加以下属性:

- layout_alignParentTop

- layout_centerVertical

- layout_below

- layout_toRightOf

如果想一次设置所有视图,可能更适合使用LinearLayout(或者可能使用Style)。

总结一下:

- layout_gravity属性对RelativeLayout中的子视图不起作用。

- RelativeLayout的gravity属性起作用,但不像预期的那样。

补充XML:

"View gravity and layout_gravity inside a Relative Layout"的XML代码:



    
        
        
        
        
        
        
    
    
        
        
        
        
        
        
    

"Relative Layout with gravity"的XML代码:



    
        
        
        
        
        
        
    
    
        
        
        
        
        
        
    

"Linear Layout with gravity"的XML代码:



    
        
        
        
        
        
    
    
        
        
        
        
        
    

0