3
给定下面的main.xml布局,是否可以在运行时更改FrameLayout的“layout_gravity”,并立即显示结果?动态重新定位布局
我的主要布局是一个LinearLayout和一个居中的FrameLayout子项,有两个子项,一个SurfaceView和一个ImageView(位于框架布局的底部)。
我有一个菜单,让用户可以选择重新定位框架布局,这应该通过将layout_gravity更改为“顶部”,“底部”或“中心”来完成。
为了做到这一点,我用这个代码在运行时改变重力:
int mGravity = Gravity.TOP // gravity determined from menu selection
FrameLayout mFrameLayout = (FrameLayout)findViewById(R.id.my_framelayout);
((LinearLayout.LayoutParams) mFrameLayout.getLayoutParams()).gravity = mGravity;
然而,这并不能立即工作。我只有在用户点击其他菜单项后才能开始工作,这会将他们带到Android Market。当用户退出市场并返回到我的应用程序时,才根据用户以前选择的内容绘制新布局。
我是否缺少一些简单的东西?如何在用户选择位置后强制重新绘制?我应该失效什么?
的main.xml:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/ll_main"
android:layout_width="fill_parent"
android:layout_height="fill_parent">
<FrameLayout
android:id="@+id/my_framelayout"
android:layout_width="fill_parent"
android:layout_height="@dimen/surfaceview_default_h"
android:layout_gravity="center">
<SurfaceView
android:id="@+id/my_surfaceview"
android:layout_width="@dimen/surfaceview_default_w"
android:layout_height="@dimen/surfaceview_default_h">
</SurfaceView>
<ImageView
android:id="@+id/my_imageview"
android:layout_height="wrap_content"
android:layout_width="fill_parent"
android:src="@drawable/someimage"
android:layout_gravity="bottom">
</ImageView>
</FrameLayout>
</LinearLayout>
menu.xml文件:
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android">
<item
android:id="@+id/mnu_position"
android:title="@string/position">
<!-- Position submenu -->
<menu>
<group
android:id="@+id/grp_position"
android:menuCategory="container"
android:checkableBehavior="single">
<item
android:id="@+id/mnu_position_top"
android:title="@string/top">
</item>
<item
android:id="@+id/mnu_position_center"
android:title="@string/center"
android:checked="true">
</item>
<item
android:id="@+id/mnu_position_bottom"
android:title="@string/bottom">
</item>
</group>
</menu>
</item>
<item
android:id="@+id/mnu_android_market"
android:title="@string/market">
</item>
</menu>
感谢您的建议,但不幸的是没有效果。但是我发现,如果我在设置重力之后在主LinearLayout(ll_main)上执行setBackgroundColor(),则会相应地更新FrameLayout位置。但它只会做一次。如果我直接返回菜单并选择其他位置,即使再次运行setBackgroundColor(),也无法重新定位。 – Jason 2011-06-08 13:20:03