3

以下の main.xml レイアウトを考えると、実行時に FrameLayout の「layout_gravity」を変更して、結果をすぐに表示することは可能ですか?

私のメイン レイアウトは、LinearLayout と、SurfaceView と ImageView (フレーム レイアウトの下部に配置) の 2 つの子を持つ中央の FrameLayout の子です。

フレームレイアウトを再配置するオプションをユーザーに提供するメニューがあります。これは、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 マーケットに移動した後にのみ、機能するようになりました。ユーザーが市場から撤退してアプリに戻ると、ユーザーが以前に選択したものに従って新しいレイアウトが描画されます。

簡単なものがありませんか?ユーザーが位置を選択した直後に強制的に再描画するにはどうすればよいですか? 何を無効にする必要がありますか?

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>
4

1 に答える 1

0

追加してみてください

mFrameLayout.invalidate();

重力を設定した後。

于 2011-06-08T13:00:56.993 に答える