zoukankan      html  css  js  c++  java
  • 【Android布局】在程序中设置android:gravity 和 android:layout_Gravity属性

    在进行UI布局的时候,可能经常会用到 android:gravity  和 android:layout_Gravity 这两个属性。

    关于这两个属性的区别,网上已经有很多人进行了说明,这边再简单说一下。 (资料来自网络)


    LinearLayout有两个非常相似的属性:

    android:gravity与android:layout_gravity。

    他们的区别在于:

    android:gravity 属性是对该view中内容的限定.比如一个button 上面的text. 你可以设置该text 相对于view的靠左,靠右等位置.

    android:layout_gravity是用来设置该view相对与父view 的位置.比如一个button 在linearlayout里,你想把该button放在linearlayout里靠左、靠右等位置就可以通过该属性设置. 

    即android:gravity用于设置View中内容相对于View组件的对齐方式,而android:layout_gravity用于设置View组件相对于Container的对齐方式。

    原理跟android:paddingLeft、android:layout_marginLeft有点类似。如果在按钮上同时设置这两个属性。

    android:paddingLeft="30px"  按钮上设置的内容离按钮左边边界30个像素
    android:layout_marginLeft="30px"  整个按钮离左边设置的内容30个像素


    下面回到正题, 我们可以通过设置android:gravity="center"来让EditText中的文字在EditText组件中居中显示;同时我们设置EditText的android:layout_gravity="right"来让EditText组件在LinearLayout中居右显示。看下效果:

    正如我们所看到的,在EditText中,其中的文字已经居中显示了,而EditText组件自己也对齐到了LinearLayout的右侧。

    附上布局文件:

    1. <LinearLayout  
    2.    xmlns:android="http://schemas.android.com/apk/res/android"  
    3.     android:orientation="vertical"  
    4.     android:layout_width="fill_parent"  
    5.     android:layout_height="fill_parent">  
    6.     <EditText  
    7.         android:layout_width="wrap_content"  
    8.         android:gravity="center"  
    9.         android:layout_height="wrap_content"  
    10.         android:text="one"  
    11.         android:layout_gravity="right"/>  
    12. </LinearLayout>  

     


    那么上面是通过布局文件的方式来设置的。,相信大家都曾写过,那么如何通过Java代码来设置组件的位置呢?

    依然考虑实现上述效果。

    通过查看SDK,发现有一个setGravity方法, 顾名思义, 这个应该就是用来设置Button组件中文字的对齐方式的方法了。

    仔细找了一圈,没有发现setLayoutgravity方法, 有点失望。 不过想想也对, 如果这边有了这个方法, 将Button放在不支持Layout_Gravity属性的Container中如何是好! 

    于是想到, 这个属性有可能在Layout中 , 于是仔细看了看LinearLayout 的 LayoutParams, 果然有所发现, 里面有一个 gravity 属性,相信这个就是用来设置组件相对于容器本身的位置了,没错,应该就是他了。

    实践后发现,如果如此, 附上代码,各位自己看下。

    代码比较简单,但是发现它们还是花了我一点时间的。

    1. Button button  = new Button(this);  
    2. button.setText("One");  
    3. LinearLayout.LayoutParams lp = new LinearLayout.LayoutParams(LayoutParams.WRAP_CONTENT,LayoutParams.WRAP_CONTENT);  
    4. //此处相当于布局文件中的Android:layout_gravity属性  
    5. lp.gravity = Gravity.RIGHT;  
    6. button.setLayoutParams(lp);  
    7. //此处相当于布局文件中的Android:gravity属性  
    8. button.setGravity(Gravity.CENTER);  
    9.   
    10. LinearLayout linear = new LinearLayout(this);  
    11. //注意,对于LinearLayout布局来说,设置横向还是纵向是必须的!否则就看不到效果了。  
    12. linear.setOrientation(LinearLayout.VERTICAL);  
    13. linear.addView(button);  
    14. setContentView(linear);  

     

    或者这样也可以:

    1. Button button  = new Button(this);  
    2. button.setText("One");  
    3. //此处相当于布局文件中的Android:gravity属性  
    4. button.setGravity(Gravity.CENTER);  
    5.   
    6. LinearLayout linear = new LinearLayout(this);  
    7. //注意,对于LinearLayout布局来说,设置横向还是纵向是必须的!否则就看不到效果了。  
    8. linear.setOrientation(LinearLayout.VERTICAL);  
    9.   
    10. LinearLayout.LayoutParams lp = new LinearLayout.LayoutParams(LayoutParams.WRAP_CONTENT,LayoutParams.WRAP_CONTENT);  
    11. //此处相当于布局文件中的Android:layout_gravity属性  
    12. lp.gravity = Gravity.RIGHT;  
    13.   
    14. linear.addView(button, lp);  
    15. setContentView(linear);  

     

    好了,效果图就不上了,跟上面的一样。 就讲这么多。

    另外,要设置在RelativeLayout中的位置时使用addRule方法,如下:

    1. params = new RelativeLayout.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);  
    2.         params.addRule(RelativeLayout.CENTER_IN_PARENT);  
    3.         mContainer.addView(progress,params);  

     转http://blog.csdn.net/feng88724/article/details/6333809

     

  • 相关阅读:
    HDU 5528 Count a * b 欧拉函数
    HDU 5534 Partial Tree 完全背包
    HDU 5536 Chip Factory Trie
    HDU 5510 Bazinga KMP
    HDU 4821 String 字符串哈希
    HDU 4814 Golden Radio Base 模拟
    LA 6538 Dinner Coming Soon DP
    HDU 4781 Assignment For Princess 构造
    LA 7056 Colorful Toy Polya定理
    LA 6540 Fibonacci Tree
  • 原文地址:https://www.cnblogs.com/likwo/p/2891950.html
Copyright © 2011-2022 走看看