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

解决Android使用ActivityGroup打开Activity后控件无法居中问题

2012-08-29 14:25 861 查看
我们先看一下ActivityGroup的layout

html代码



<!-- 此处为ActivityGroup的layout -->

<?xml version="1.0" encoding="utf-8"?>

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"

xmlns:tools="http://schemas.android.com/tools"

android:layout_width="fill_parent"

android:layout_height="fill_parent"

android:orientation="vertical" >

<!-- 顶部标题栏 -->

<LinearLayout

android:id="@+id/mainHeadView"

android:layout_width="fill_parent"

android:layout_height="50dp"

android:background="@drawable/main_head_bg"

android:gravity="center_vertical"

android:orientation="vertical"

android:layout_gravity="top" >

<TextView

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:layout_marginLeft="10dp"

android:text="标题"

android:textSize="20dp" />

</LinearLayout>

<!-- 中间显示区域 -->

<!-- 这里便是用于显示其他Activity的View的RelativeLayout -->

<RelativeLayout

android:id="@+id/mainBodyView"

android:layout_width="fill_parent"

android:layout_height="fill_parent"

android:layout_weight="1" >

</RelativeLayout>

<!-- 下端选择指示区域 -->

<LinearLayout

android:id="@+id/mainBottomView"

android:layout_width="fill_parent"

android:layout_height="55dp"

android:background="#ddd"

android:weightSum="5"

android:layout_gravity="bottom"

android:orientation="horizontal" >

<!-- 无关项,因排版需求省略 -->

</LinearLayout>

</LinearLayout>

然后看一下我们需要打开的Activity的layout,注意这里我已经设置了RelativeLayout的fill_parent

html代码



<?xml version="1.0" encoding="utf-8"?>

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"

android:layout_width="fill_parent"

android:layout_height="fill_parent" >

<ProgressBar

android:id="@+id/loadFriendsPrgsBar"

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:layout_centerInParent="true"

/>

<TextView

android:id="@+id/loadFriendsError"

android:layout_width="fill_parent"

android:layout_height="wrap_content"

android:layout_centerInParent="true"

android:gravity="center"

android:text="加载失败"

android:textSize="14dp"

android:visibility="gone" />

<ListView

android:id="@+id/friendsListView"

android:layout_width="fill_parent"

android:layout_height="fill_parent"

android:layout_alignParentTop="true"

android:visibility="gone" >

</ListView>

</RelativeLayout>

开始时,我再ActivityGroup中打开Activity的代码是这样的

java代码



bodyView.addView(getLocalActivityManager()

.startActivity("FriendsListActivity", new Intent(OriMainActivity.this,
FriendsListActivity.class))

.getDecorView());

这段代码的意思是打开一个Activity,然后获取这个Activity上网View,添加到上面给出的ActivityGroup布局中的指定Layout中

开始以为这样便是没有问题,但是显示出来的结果并不是居中,而是在左上角

调试后发现,原来是从打开的Activity获取到的View并没有fill_parent,而是wrap_content了

所以这是我们应该在代码中对其进行设置,使用LayoutParams

这是改进后的代开Activity的代码

java代码



View friendView = getLocalActivityManager()

.startActivity("FriendsListActivity", new Intent(OriMainActivity.this,
FriendsListActivity.class))

.getDecorView();

addFillParams(friendView);

bodyView.addView(friendView);

这样一来从打开的Activity获取的View便可以填充在ActivityGroup的Layout中的RelativeLayout中了

当然,Activity中的控件也可以居中了

以下是一些个人走的弯路,以作警示:

1、LinearLayout的子控件居中问题

如果LinearLayout的orientation属性为vertical,那么子空间的layout_gravity可起作用的只有和horizontal有关的(center_horizontal等)。

同理,LinearLayout的orientation属性为horizontal,那么子空间的layout_gravity可起作用的只有和vertical有关的(center_vertical等)。

如果要想使LinearLayout的子控件居中,那么便可以设置LinearLayout的gravity属性为center,这样便可以在父容器设置子控件的位置,

但这样一来子控件的layout_gravity便不再起作用

2、RelativeLayout的子控件居中问题

开始我尝试在子控件中设置layout_gravity=center,但是却没有得到应该的布局

后来经过尝试,发现使用android:layout_centerInParent="true"可以达到目的

(RelativeLayout中有很多类似于layout_centerInParent的自有属性,通过这些属性可以替代layout_gravity)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐