您的位置:首页 > 移动开发 > Android开发

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

2015-10-30 17:27 519 查看
目录:

  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

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




[u](红色为ImageView的控件宽高)
[/u]

 FIT_CENTER

使用 CENTER 方式缩放图像。


FIT_END

使用 END 方式缩放图像。

FIT_START

使用 START 方式缩放图像。

FIT_XY

使用 FILL 方式缩放图像。

MATRIX

绘制时,使用图像矩阵方式缩放。图像矩阵可以通过 setImageMatrix(Matrix) 设置。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  android