Android 布局UI知识点记录

本文链接 http://blog.csdn.net/never_cxb/article/details/47156935 转载请注明出处

一言以蔽之
普遍的说法是这样的
android:gravity 组件的子组件在组件中的位置

android:layout_gravity 组件自身在父组件中的位置

但是《第一行代码里》是这么说的
android:gravity用于指定文字在控件中的对齐方式

android:layout_gravity用于指定控件在布局中的对齐方式

其实个人觉得两种说法并不矛盾,文字也可以理解为TextView的子组件,下面我们会看到android:gravity分别用于设置子组件或者文字。

网上还有一种总结是:

  • 名称不以layout_开头的属性作用于组件本身,组件生成时,会调用某个方法按照属性及属性值进行自我配置。
  • 名称以layout_开头的属性作用于组件的父组件,称这些属性为布局参数,它们会告知父布局如何在内部安排自己的子元素。

android:gravity

android:gravity用于指定文字在控件中的对齐方式(这儿将文字看作是子控件)

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" >    <TextView  android:layout_width = "match_parent" android:layout_height="wrap_content" android:gravity="center" android:textSize="24sp" android:padding = "24dp" android:text="this is text" /></LinearLayout>

效果见下图:

当然 android:gravity=”center”也可以指定控件在LinearLayout中居中,比如:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:gravity="center" android:orientation="vertical" >    <TextView  android:layout_width = "match_parent" android:layout_height="wrap_content" android:gravity="center" android:textSize="24sp" android:padding = "24dp" android:text="this is text" /></LinearLayout>

再看效果图:

Android UI布局之区分 android:gravity 和 android:layout_gravity_第1张图片

TextView就居于LinearLayout的正中了。

LinearLayout 中android:gravity=”center”表示TextView居于LinearLayout的正中间
而TextView的android:gravity=”center”表示文字处于TextView的中间

android:layout_gravity

android:layout_gravity用于指定控件在布局中的对齐方式。注意,当LinearLayout是vertical时,只有水平方向上的对齐才会生效。

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"    android:layout_width="match_parent"    android:layout_height="match_parent"    android:gravity="center"    android:orientation="vertical" >    <TextView        android:layout_width  = "match_parent"        android:layout_height="wrap_content"        android:gravity="center"        android:textSize="24sp"        android:padding = "24dp"        android:text="this is text" />     <TextView        android:layout_width  = "wrap_content"        android:layout_height="wrap_content"        android:gravity="center"        android:textSize="24sp"        android:padding = "24dp"        android:layout_gravity="end"        android:text="another text" /></LinearLayout>

效果图:
Android UI布局之区分 android:gravity 和 android:layout_gravity_第2张图片
第2个TextView中,android:gravity表示这个TextView处于LinearLayout的中间,而android:layout_gravity=”end”表示处于水平end的位置。

最佳实践 完整示例

<?xml version="1.0" encoding="utf-8"?><android.support.v7.widget.CardView xmlns:android="http://schemas.android.com/apk/res/android" xmlns:card_view="http://schemas.android.com/apk/res-auto" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:fresco="http://schemas.android.com/apk/res-auto" android:id="@+id/cv_item" android:layout_width="match_parent" android:layout_height="wrap_content" android:foreground="?android:attr/selectableItemBackground" app:cardCornerRadius="5dp" app:cardElevation="5dp" app:contentPadding="2dp">    <LinearLayout  android:layout_width="match_parent" android:layout_height="wrap_content">        <com.facebook.drawee.view.SimpleDraweeView  android:id="@+id/rcv_article_photo" android:layout_width="100dp" android:layout_height="100dp" android:layout_centerVertical="true" fresco:actualImageScaleType="centerInside" fresco:roundAsCircle="true" fresco:roundingBorderColor="@color/lightslategray" fresco:roundingBorderWidth="1dp" />        <LinearLayout  android:layout_width="0dp" android:layout_height="match_parent" android:layout_weight="1" android:orientation="vertical">            <TextView  android:id="@+id/rcv_article_title" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginLeft="10dp" android:layout_marginTop="2dp" android:gravity="center" android:text="关于举办《经典音乐作品欣赏与人文审美》讲座的通知" android:textColor="@color/primary_text" />            <!-- 新闻 发布时间 来源 阅读次数-->            <LinearLayout  android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginTop="5dp" android:gravity="center" android:orientation="horizontal">                <TextView  android:id="@+id/rcv_article_date" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginLeft="10dp" android:layout_marginRight="2dp" android:text="2015-01-09" />                <TextView  android:id="@+id/rcv_article_source" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginLeft="2dp" android:layout_marginRight="2dp" android:text="科学研究院" />                <TextView  android:id="@+id/rcv_article_readtimes" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginLeft="2dp" android:layout_marginRight="2dp" android:text="1129次" />            </LinearLayout>            <TextView  android:id="@+id/rcv_article_preview" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginLeft="10dp" android:layout_marginTop="5dp" android:ellipsize="end" android:maxLines="2" android:text="讲座主要内容:以中、西方音乐历史中经典音乐作品为基础,通过作曲家及作品创作背景、相关音乐文化史知识及音乐欣赏常识..." />        </LinearLayout>    </LinearLayout></android.support.v7.widget.CardView> 

效果图
Android UI布局之区分 android:gravity 和 android:layout_gravity_第3张图片

思路

这是自己项目中的一个记录,具体可参照这篇文章
Android Material Design学习之RecyclerView代替 ListView http://blog.csdn.net/never_cxb/article/details/50495505

布局思路就是 CardView里面嵌入了一个LinearLayout。图片部分用固定宽度100dp,文字部分利用android:layout_weight=”1”占据了其他部分。

TextView利用android:gravity=”center”使得标题的文字居中。

LinearLayout里面利用android:gravity=”center”使得“2015-01-09 科学研究院 1129次”居中,

新闻详情内容的TextView利用

android:maxLines="2"android:ellipsize="end"

将文章内容限定为2行,超出部分用省略号显示。

更多相关文章

  1. android 布局学习
  2. 简述修改logo以及文字
  3. 【android初级】之android布局属性详解
  4. 布局技巧和列表控件
  5. 关于Android中xml布局文件
  6. android 入门xml布局文件

随机推荐

  1. 【Android】android中Invalidate和postIn
  2. Android盈利模式,哪种更靠谱?
  3. 爱奇艺Android移动客户端app瘦身经验
  4. ANDROID深入研究和学习的课程
  5. Android仿人人客户端(v5.7.1)——欢迎和导
  6. Android软键盘-弹起时布局向上拉-多表单
  7. 关于 Android(安卓)程序员最近的状况
  8. Android的背景
  9. Android实现简易版弹钢琴效果
  10. 如何保证Android设备的安全性