2

私はこの奇妙な振る舞いを見ているので、誰かが回避策を見つけたかどうか尋ねたいと思います。中に別のレイアウトがある単純なRelativeLayoutがあります。

奇妙な振る舞いはコードで起こります。ネストされたレイアウトからLayoutParamsを取得し、それを元に戻すと、レイアウトの外観が変わります。その過程でいくつかのパラメータが失われたようです。コードは次のとおりです。

RelativeLayout v = (RelativeLayout)findViewById(R.id.group1);

RelativeLayout.LayoutParams lp = new RelativeLayout.LayoutParams(v.getLayoutParams());

v.setLayoutParams(lp);

この呼び出しの後、すべてがそのまま残ることを期待していますが、(少なくとも)「layout_AlignParentRight」効果が失われています。誰かが私がこれが起こる理由を理解するのを手伝ってもらえますか?

そして、実用的な観点から、これが必要なのは、実行時にgroup1レイアウトの幅を変更することだけです。だから私は上の「lp」の幅を変更することでそれをやっています、そしてそれはうまくいきますが、アライメントを台無しにします。したがって、他のプロパティに影響を与えずにレイアウトのサイズを変更するための代替アプローチに関する提案がある場合は、チャイムも鳴らしてください。

レイアウト:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"    
android:orientation="vertical">

    <RelativeLayout 
     android:id="@+id/group1"
     android:layout_width="100dp"
     android:layout_height="wrap_content"    
     android:orientation="vertical"
     android:layout_alignParentRight="true">

        <TextView
         android:layout_alignParentLeft="true"
         android:layout_width="wrap_content"
         android:layout_height="wrap_content"
         android:text="Test">
        </TextView>

    </RelativeLayout>
</RelativeLayout>
4

1 に答える 1

6

新しいパラメータをインスタンス化するのではなく、既存のパラメータを変更するだけです。

RelativeLayout.LayoutParams params = (RelativeLayout.LayoutParams)v.getLayoutParams();
params.width = myNewWidth;
v.requestLayout();
于 2013-03-07T18:21:39.940 に答える