解决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)
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)
相关文章推荐
- 解决Android使用ActivityGroup打开Activity后控件无法居中问题
- WdatePicker日期选择控件使用时,Internet Explorer无法打开站点,已终止操作”问题的解决
- WdatePicker日期选择控件使用时,Internet Explorer无法打开站点,已终止操作”问题的解决
- MFC中使用串口控件后程序无法打开的问题解决
- Android—使用Activitygroup或者TabActivity中包含其它的activity无法定位的解决办法
- Android使用的webcview中带有音乐播放控件,在关闭或分享时处于界面不可见状态下,声音仍在播放的问题解决
- Android 将Activity打成jar包 供第三方使用 彻底解决XML 图片 文字资源不可打入到jar包的问题!
- Android 使用Webview无法播放视频问题的解决办法
- [置顶] Android DDMS 无法打开data问题的简便解决办法--一次性解决
- Android开发-工具:Android Studio 怎么添加使用第三方jar包及无法编译的问题解决方法
- 仅仅需一步教你解决Win10下Android Studio terminal无法使用的问题
- 无法打开多维数据集(使用Dundas的OLAP显示控件时的一个小的问题)
- MB300 Android 2.1 -update1 改大字体,以及lur.res等被删掉之后,无法打电话,无法打开联系人问题的解决
- 解决使用 JDK 1.7 对 Android apk 签名后程序无法安装的问题
- 【解决】appium测试时,popupwindow元素控件无法定位的问题【Android】
- JavaH使用问题:无法访问android.app.Activity
- Android 解决dialog弹出时无法捕捉Activity的back事件问题
- 使用ActivityGroup 时子选项卡activity里的EditText只能输入无法删除问题
- Android编程中TextView宽度过大导致Drawable无法居中问题解决方法
- Android结合robotium实现自定义waitForText(String text),解决控件无法找到问题