2013-03-15 60 views
14

私はのLinearLayout変更相対的なレイアウトの幅と高さを動的

<TableLayout 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" > 

    <TableRow 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content" > 
    </TableRow> 

    <TableRow 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content" > 

     <TextView 
      android:id="@+id/tv1" 
      android:layout_height="wrap_content" 
      android:gravity="left" 
      android:paddingLeft="10dp" 
      android:textColor="#000" /> 

     <TextView 
      android:id="@+id/tv2" 
      android:layout_height="wrap_content" 
      android:layout_weight="1.0" 
      android:gravity="right" 
      android:paddingRight="10dp" 
      android:textColor="#000" /> 
    </TableRow> 
</TableLayout> 

<ImageView 
    android:id="@+id/img1" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_gravity="center" /> 

<RelativeLayout 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="320px" 
    android:layout_height="320px" 
    android:gravity="center" > 
</RelativeLayout> 

内の以下のレイアウト構造を使用してJavaファイルから動的に相対的なレイアウトの幅と高さを設定したいのですこんにちは代わりにxmlファイルに320PXに設定するのが、それを行うことができません。オリエンテーションの変更は、ポートレートモードでのみ制限されるため、問題ではありません。それが可能であるか、私はそれを別の方法を達成するために持っている...

+0

動的にあなたが返信用 – Neil

+0

おかげで、作成したクラスからRelativeLayoutクラスを拡張し、onMeasureメソッドをオーバーライドする必要がありますが、私はすべてのものを試してみましたし、私がしようとしたとき、それは、クラスのキャスト例外を与えてレイアウト幅を設定するには動的に幅と高さを設定します。相対レイアウトには画像ビューとして他の子も含まれているので、私はView Groupとしてjavaファイルに入れますが、それを行うことはできません。 –

+0

例外それは – Neil

答えて

22

Androidのレイアウトを更新しません。ビューが表示されたらwrap_contentと表示されます。 invalidate()またはrequestLayout()ですらあります。 したがって、子ビューを追加したり、コンテンツを動的に変更したりすると、あなたはうんざりです。

getLayoutParams().height = xrequestLayout()は、 "x"を知っていて、それを一度だけ行う必要がある場合には良い解決策です。 wrap_contentLayoutParams)は、それを上書きしてしまったので失われます。

これを解決するために、サイズを再計算し、ビューのレイアウトの更新を強制的に行う静的クラスを作成しました。wrap_contentです。コードと使用するための命令がここに用意されています

https://github.com/ea167/android-layout-wrap-content-updater

お楽しみください!

+0

エリックねえ、あなたのコードの使用例がありますか?あなたのクラスのメソッドにアクセスできないようですか? – patrics

+0

あなたは効果的にそのクラスで私の人生を救いました。どうもありがとうございます。 – Namnodorel

+0

あなたは大歓迎です.Namnodorel!嬉しいことに助けられました:) – Eric

13

この

getLayoutParams().height= x; 
requestLayout(); or invalidate(); 
を使用してみてくださいそれをmatch_parentを使用して、フルスクリーンでの相対レイアウトを設定することが可能であるが、私は、画面上の別のビューを配置する必要がありますuは、デバイスの高さと幅を取得することができ、コードの下から
2

: - realativeレイアウトウル

Display display = getWindowManager().getDefaultDisplay(); 
    int width = (display.getWidth()); 
    int height = (display.getHeight()); 

paramsTop: -

は今uが高さを設定するか、何をしたい幅することができます。

 paramsTop = new RelativeLayout.LayoutParams(width, height); 
+0

これは推奨されていません。非推奨されないコードのために、次のスレッドを参照してください:http://stackoverflow.com/questions/4743116/get-screen-width-and-height – Simon

2

LayoutParamsを使用してビューのサイズを動的に設定できます。このような 何か:

RelativeLayout layout = (RelativeLayout) findViewById(R.id.yourlayout_id); 
// Gets the layout params that will allow you to resize the layout 
LayoutParams params = layout.getLayoutParams(); 
params.height = 320; 
params.width = 320; 
5

の.xmlであなたの相対的なレイアウトにIDを与える:

android:id="@+id/relativelayout" 

を今、あなたのjavaファイルでこれを書く:

RelativeLayout Rl = (RelativeLayout) findViewById(R.id.relativelayout); 

RelativeLayout.LayoutParams layout_description = new RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.FILL_PARENT or YourUserDefinedwidth, 
         RelativeLayout.LayoutParams.FILL_PARENT or YourUserDefinedHeight); 

Rl.setLayoutParams(layout_description); 
2

私はあなたの高さを変更しようとする場合、これはトリックを行うだろう、動的にこの

RelativeLayout relMain = (RelativeLayout) convertView.findViewById(R.id.relMain); 
    RelativeLayout.LayoutParams params = new RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.MATCH_PARENT, RelativeLayout.LayoutParams.WRAP_CONTENT); 
    params.width =200; 
params.height =200; 
params.addRule(RelativeLayout.ALIGN_PARENT_RIGHT); 
     relMain.setLayoutParams(params); 
+0

私のために働いています:) –

0

などの変更相対的なレイアウトの幅と高さのために最適なソリューションを、この問題に直面しました。

RelativeLayout relativeLayout = (RelativeLayout) findViewById(R.id.yourId); 
relativeLayout.getLayoutParams().height = 100; 
relativeLayout.getLayoutParams().width = 100; 
関連する問題