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的右侧。

附上布局文件:

 <LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent">
<EditText
android:layout_width="wrap_content"
android:gravity="center"
android:layout_height="wrap_content"
android:text="one"
android:layout_gravity="right"/>
</LinearLayout>

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

依然考虑实现上述效果。

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

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

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

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

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

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

或者这样也可以:

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

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

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

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

最新文章

  1. MySQL [Warning]: IP address &#39;xxxx&#39; could not be resolved: Name or service not known
  2. NodeJS学习:爬虫小探补完计划
  3. 用shader使图片背景透明
  4. 关于IE8以上 不引人css 症状
  5. cocos2dx3.4 保存json文件
  6. 如何用dumpbin.exe检查编译器生成的托管模块所嵌入的信息
  7. NLP —— 图模型(三)pLSA(Probabilistic latent semantic analysis,概率隐性语义分析)模型
  8. 201521123072《java程序设计》第十一周学习总结
  9. srs2录制flv文件metadata不准确
  10. 03 JVM的垃圾回收机制
  11. Struts2 学习之小白开始
  12. 通过Jmeter 代理功能获取postman请求
  13. Month format:number to English abbre
  14. Linux 多线程 - 线程异步与同步机制
  15. springcloud配置需要主要的地方
  16. linux服务samba与ftp篇
  17. Blast
  18. php 微信支付V3 APP支付
  19. 乘风破浪:LeetCode真题_035_Search Insert Position
  20. ABP框架系列之二十三:(EF-MySql-Integration-EF-MySql-集成)

热门文章

  1. catkin详细解释
  2. Ubuntu下安装 Phantomjs
  3. HDU 6081 度度熊的王国战略【并查集/数据弱水题/正解最小割算法】
  4. MySql笔记之数据表
  5. Validate on POST data
  6. Codeforces 855C - Helga Hufflepuff&#39;s Cup
  7. Dfs【bzoj3252】攻略
  8. ret2dir:Rethinking Kernel Isolation(翻译)
  9. [BZOJ3206][APIO2013]道路费用(最小生成树)
  10. 【找规律】URAL - 2069 - Hard Rock