今天在做一个类似于360手机卫士的悬浮窗口时,对于位置这一块稍微多想了一下,下面将自己的一些理解分

享出来,希望会对大家有用。相信很多人在布局的时候对于Android中的layout_gravity和gravity之间的区别不是

很理解吧,我之前对于这两个参数的设置也很混淆,今天正好有点时间,通过查询一些资料,再加上一些小实验,

算是对他们有了一点比较清晰的理解。简单而言,layout_gravity是view告诉自己的parent在布局的时候自己想处

在哪个地方(一般以layout_开头的都是告诉parent自己希望在parent中怎么显示),而gravity则是告诉view中

content应该怎么去布局。下面将通过一些小例子进一步说明。

1、LinearLayout中元素居中

<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"    android:orientation="vertical"    android:layout_width="fill_parent"    android:layout_height="fill_parent" >    <LinearLayout        android:orientation="horizontal"        android:layout_width="wrap_content"        android:layout_height="wrap_content"        android:gravity="center" >    <TextView         android:layout_width="wrap_content"    android:layout_height="wrap_content"        android:text="@string/hello" />    <ImageView        android:layout_width="wrap_content"        android:layout_height="wrap_content"        android:src="@drawable/icon" />    </LinearLayout></LinearLayout>
运行之后,它的效果图如下:

看到这个结果你可能会怀疑我上面说的关于gravity的用法,明明写了居中,但是没有效果。观察仔细的

应该会发其中有点问题,LinearLayout的width是设置成了wrap_content,如此一来LinearLayout没

有足够的空间让中的“content”居中,所以只要改成fill_parent即可,那么可以看到如下效果图:

2、LinearLayout中的元素靠右布局

<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"    android:orientation="vertical"    android:layout_width="fill_parent"    android:layout_height="fill_parent" >    <LinearLayout        android:orientation="horizontal"        android:layout_width="fill_parent"        android:layout_height="wrap_content" >    <TextView         android:layout_width="wrap_content"        android:layout_height="wrap_content"        android:layout_gravity="left"        android:text="@string/hello" />    <ImageView        android:layout_width="wrap_content"        android:layout_height="wrap_content"        android:layout_gravity="right"        android:src="@drawable/icon" />    </LinearLayout></LinearLayout>
运行之后的效果图:


额。。。没有任何效果,ImageView的layout_gravity失效了,这又是怎么回事呢?我们可以发现其父

LinearLayout的orientation是horizontal,需要注意的是layout_gravity只能是和orientation正交时

才有效,Linearlayout设置了orientation之后,也就规定了其中元素在平行方向上是紧邻上一个元素

排列,而在垂直方向才可根据你的需要来设置。那么其中一种解决方案也就有了,在ImageView外包

一层Linearlayout,如下所示:

<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"    android:orientation="vertical"    android:layout_width="fill_parent"    android:layout_height="fill_parent" >    <LinearLayout        android:orientation="horizontal"        android:layout_width="fill_parent"        android:layout_height="wrap_content" >    <TextView         android:layout_width="wrap_content"        android:layout_height="wrap_content"        android:layout_gravity="left"        android:text="@string/hello" />    <LinearLayout        android:orientation="horizontal"        android:layout_width="fill_parent"        android:layout_height="wrap_content"        android:gravity="right" >    <ImageView        android:layout_width="wrap_content"        android:layout_height="wrap_content"        android:src="@drawable/icon" />    </LinearLayout>    </LinearLayout></LinearLayout>

经过修改后,运行结果如下:

注:在RelativeLayout中layout_gravity是会被直接忽略的

更多相关文章

  1. android之Listview的分组实现
  2. Android(安卓)开发之view的几种布局方式及实践
  3. Android开发之天气预报(四)UI界面实现
  4. Android的致命问题——性能优化
  5. 【Android】画廊式的图片浏览器,使用HorizontalScrollView取代Gal
  6. Android开源组件
  7. Android循环滚动控件——ViewFlipper的使用
  8. android布局文件详解
  9. Android(安卓)下拉刷新框架实现、仿新浪微博、QQ好友动态滑到底

随机推荐

  1. [android]android-am命令的使用
  2. Android学习笔记1 android adb启动失败问
  3. Android(安卓)Studio 默认keystore 以及
  4. myeclipse8.5下离线安装android
  5. Android(安卓)AsyncTask的优缺点详解
  6. 理解Android的layout和measure
  7. ArcGIS API for Android(安卓)案例教程 1
  8. Android(安卓)Layout XML属性 及 控件属
  9. Android(安卓)RabbitMQ之Android初探
  10. USB集腋成裘:从Linux PC角度看sys.usb.con