Android布局方面的问题归纳地方

来源:互联网 发布:围墙设计图纸含数据 编辑:程序博客网 时间:2024/06/05 19:20

目录:

  LinearLayout布局中layout_gravity失效的原因

TextView里面用drawableLeft的问题

设置view控件可见不可见

  相对布局RelaLayout很重要的属性


详细内容:


LinearLayout布局中layout_gravity失效的原因


我们经常做标题栏的时候,想要字体居中显示,比如下图中字体居中:

我很自然的想到用水平方向显示的LinearLayout,里面嵌套一个ImageView(Button也可以)和TextView,

<TextView
                android:id="@+id/textView2"
                android:layout_width="0dp"
                android:layout_height="wrap_content"
                android:layout_gravity="center"
                android:layout_weight="1"
                android:gravity="center_horizontal"
                android:text="职位信息"
                android:textSize="24sp" />

我的想法是TextView控件相对父控件内容居中用android:layout_gravity="center",可是怎么设置都不管用。


原因layout_gravity表示自己在父控件的位置,但是它有失效的情况,比如在LinearLayout:

LinearLayout如果表示垂直方向那么他是没有“下(底)”的概念,因为它不知道它那个孩子是最后一个,我们随时可能添加进来替代最后一个,所以这种情况下,垂直方向的居中是无效的,及:android:layout_gravity="center_vertical"是无效的。layout_gravity="bottom" 也是无效的

LinearLayout如果表示水平方向,那么他是没有“右”的概念,因为它不知道它那个孩子是最右一个,我们随时可能添加进来替代最后一个,所以这种情况下,水平方向的居中是无效的,及:android:layout_gravity="center_horizontal"是无效的。

所以android:layout_gravity="center"在LinearLayout里面总是有一方失效,所以我做的这种情况下设置的layout_gravity为center并不能得到我想要的TextView在父控件中居中显示。


解决办法:

有相对布局,TextView里面添加的属性是android:layout_centerInParent="true"//在父控件中居中显示





TextView里面用drawableLeft的问题


这张图片中圈出来的部分,很简单的做法就是一个TextView,设置属性android:drawableTop="@drawable/apply"

在布局上面这张图的时候,我想到的也是TextView设置android:drawableLeft="@drawable/money",然后android:gravity="center"内容相对空间居中显示,结果就变成下面的情况了,设置什么drawablePadding也不管用。

这种情况也是LinearLayout水平方向的居中是无效的,解决办法就是再去找个父LinearLayout,让父LinearLayout是垂直的。让两个LinearLayout去分爷的权重

<LinearLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_marginTop="10dp"
            android:layout_weight="2"
            android:orientation="horizontal" >


            <LinearLayout
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_gravity="center_vertical"
                android:layout_weight="1"
                android:orientation="vertical" >


                <TextView
                    android:id="@+id/money"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:layout_gravity="center"
                    android:drawableLeft="@drawable/money"
                    android:gravity="center"
                    android:text="钱包" />
            </LinearLayout>


            <View
                android:layout_width="2dp"
                android:layout_height="match_parent"
                android:background="#e0e0e0" />


            <LinearLayout
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_gravity="center_vertical"
                android:layout_weight="1"
                android:orientation="vertical" >


                <TextView
                    android:id="@+id/resume"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:layout_gravity="center"
                    android:drawableLeft="@drawable/resume"
                    android:gravity="center"
                    android:text="个人简历" />
            </LinearLayout>
        </LinearLayout>

效果和预想的一模一样。



设置view控件可见不可见





相对布局RelaLayout很重要的属性


不常见但好用的属性

TableLayout中:

合并单元格使 用android:layout_span="2"表示占据两列的空间

TableRow中 我 们 无 法 指 定 控 件 的 宽 度 。 这 时 使 用android:stretchColumns属性就可以很好地解决这个问题,它允许将TableLayout中的某一列进行拉伸,以达到自动适应屏幕宽度的作用。这里将android:stretchColumns的值指定为1,表示如果表格不能完全占满屏幕宽度,1将第二列进行拉伸。没错!指定成1就是拉伸第二列,指定成0 就是拉伸第一列,

设置后变成---->




ImageView:

<ImageView    android:id="@+id/image_item"    android:layout_width="600dp"    android:layout_height="wrap_content"    android:layout_gravity="center_horizontal"     android:scaleType="centerCrop"/>

常量

CENTER

在视图中使图像居中,不执行缩放。

 CENTER_CROP

均衡的缩放图像(保持图像原始比例),使图片的两个坐标(宽、高)都大于等于 相应的视图坐标(负的内边距)。图像则位于视图的中央。  简单点就是,长宽都缩放,知道最短边达到控件的长度,这样会有一部分不能显示出来。


CENTER_INSIDE

衡的缩放图像(保持图像原始比例),使图片的两个坐标(宽、高)都小于等于 相应的视图坐标(负的内边距)。图像则位于视图的中央。

(红色为ImageView的控件宽高)

 FIT_CENTER

使用 CENTER 方式缩放图像。

FIT_END

使用 END 方式缩放图像。

FIT_START

使用 START 方式缩放图像。

FIT_XY

使用 FILL 方式缩放图像。

MATRIX

绘制时,使用图像矩阵方式缩放。图像矩阵可以通过 setImageMatrix(Matrix) 设置。




0 0