23

AbsoluteLayoutを使用する場合(非推奨であることはわかっていますが、これが私の問題を解決する唯一の方法でした)、childViewsにタグandroid:layout_xを付けandroid:layout_yて、内の絶対位置を設定できますAbsoluteLayout

ただし、これらの情報は実行時にしかわからないため、xmlに設定したくありません。では、これらのパラメータを実行時にプログラムで設定するにはどうすればよいですか?ビューにメソッドなどが表示されませんview.setLayoutX(int x)

layout_xlayout_y値を設定すると、正常に機能するXMLは次のとおりです。

<?xml version="1.0" encoding="utf-8"?>
<AbsoluteLayout
 xmlns:android="http://schemas.android.com/apk/res/android"
 android:id="@+id/myLayout"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content">

    <ImageView
     android:src="@drawable/myImageView"
     android:layout_width="1298px"
     android:layout_height="945px"
     android:layout_x="0px"
  android:layout_y="0px" />
 <Button  
  android:id="@+id/myButton1"
  android:text="23"
  android:layout_width="wrap_content" 
  android:layout_height="wrap_content"
  android:layout_x="50px"
  android:layout_y="300px"
  android:tag="23"/>


 <Button  
  android:id="@+id/myButton2"
  android:text="48"
  android:layout_width="wrap_content" 
  android:layout_height="wrap_content"
  android:layout_x="50px"
  android:layout_y="300px"
  android:tag="48"/>

</AbsoluteLayout>

実際、私はもうxml内にボタンを設定したくはありませんが、リモートを介していくつかの情報を取得し、その情報に応じてボタンを追加します。

onCreateMethodこれらのボタンを追加するために私が使用しているコードの一部は次のとおりです。

  for (MyRemoteObject remoteObject: list)  {
   Button button = new Button(this);
   button.setOnClickListener (listener);
   button.setTag(remoteObject.id);
   button.setText(remoteObject.id);
   // button.setLayoutX(remoteObject.x) ????
   // button.setLayoutY(remoteObject.y) ????
   myLayout.addView(button);
  }
4

5 に答える 5

16

LayoutParamsを使用するバージョンのaddViewを使用します。

LayoutParams params = mLayout.generateLayoutParams();
params.x = remoteObject.x;
params.y = remoteObject.y;
mLayout.addView(button, params);
于 2010-08-09T16:42:15.963 に答える
10

Mayraの回答に対するあなたのコメントに応えて、AbsoluteLayoutではなくRelativeLayoutで同様の問題が発生しました。解決策は、同様の方法を使用して、レイアウトタイプとしてキャストすることでした。このようなもの:

LayoutParams params = (android.widget.RelativeLayout.LayoutParams) this.generateDefaultLayoutParams();
params.height = 360;
params.width = 360;
params.addRule(CENTER_IN_PARENT);
this.addView(board, params);

これを理解するのに永遠に時間がかかったので、必要に応じて他の誰かのためにここに投稿したいと思いました。

于 2011-03-25T20:16:34.863 に答える
5

私はまったく同じ問題を抱えていましたが、多少異なる解決策を見つけました。

int width = 100, height = 50, x = 10, y = 20;
Button button = new Button(this);
AbsoluteLayout myLayout = (AbsoluteLayout)findViewById(R.id.myLayout);
myLayout.add(button, new AbsoluteLayout.LayoutParams(width, height, x, y));

また、「fill_parent」に何を使用するか(ヒント-1を試してください)がわかった場合は、幅と高さにこれらの定数を使用できます。

于 2011-04-19T10:45:34.977 に答える
0

理由はわかりませんが、上と左の端を移動すると、Androidは右と下の端を同じ場所に保ちます。幅と高さを正しく変更できなかった(画像が消えていた)ので、これを使用しました

LayoutParams layoutParams=new LayoutParams(width, height);
layoutParams.leftMargin = newLeft;
layoutParams.topMargin = newTop;
imageView.setLayoutParams(layoutParams);

それが最善の方法かどうかはわかりませんが、私のために働きました。2.2以降でテストしましたが、正常に動作します。

android.widget.LinearLayout.LayoutParamsをインポートする必要があります。デフォルトはViewGroupのLayoutParams(Davit Tによる)であるため

于 2014-04-13T01:15:07.473 に答える
0

上記の答えは正しいですが、これはより完璧でしょう

AbsoluteLayout.LayoutParams layoutParams = new AbsoluteLayout.LayoutParams(AbsoluteLayout.LayoutParams.WRAP_CONTENT,AbsoluteLayout.LayoutParams.WRAP_CONTENT,DragLayer.int left_location,int top_location);
 layout.addView(view,layoutParams)
于 2014-07-30T15:52:33.213 に答える