1. ホーム
  2. android

[解決済み] ビューの絶対位置の設定

2022-04-13 16:04:02

質問

Androidでビューの絶対位置を設定することは可能でしょうか? AbsoluteLayout しかし、それは非推奨です...)

例えば、240x320pxの画面であれば、どのようにして ImageView 20x20px で、その中心が (100,100) の位置になるようにする必要があります。

どのように解決するのですか?

RelativeLayoutを使えばいいんです。例えば、レイアウト内の位置(50,60)に30x40のImageViewが欲しいとします。アクティビティ内のどこかです。

// Some existing RelativeLayout from your layout xml
RelativeLayout rl = (RelativeLayout) findViewById(R.id.my_relative_layout);

ImageView iv = new ImageView(this);

RelativeLayout.LayoutParams params = new RelativeLayout.LayoutParams(30, 40);
params.leftMargin = 50;
params.topMargin = 60;
rl.addView(iv, params);


その他の例

30x40のImageViewを2つ(黄色と赤色)、それぞれ(50,60)と(80,90)に配置する。

RelativeLayout rl = (RelativeLayout) findViewById(R.id.my_relative_layout);
ImageView iv;
RelativeLayout.LayoutParams params;

iv = new ImageView(this);
iv.setBackgroundColor(Color.YELLOW);
params = new RelativeLayout.LayoutParams(30, 40);
params.leftMargin = 50;
params.topMargin = 60;
rl.addView(iv, params);

iv = new ImageView(this);
iv.setBackgroundColor(Color.RED);
params = new RelativeLayout.LayoutParams(30, 40);
params.leftMargin = 80;
params.topMargin = 90;
rl.addView(iv, params);

30x40の黄色のImageViewを(50,60)に1つ、30x40の赤色のImageViewを <80,90> に1つ配置します。 に相対する 黄色のImageView。

RelativeLayout rl = (RelativeLayout) findViewById(R.id.my_relative_layout);
ImageView iv;
RelativeLayout.LayoutParams params;

int yellow_iv_id = 123; // Some arbitrary ID value.

iv = new ImageView(this);
iv.setId(yellow_iv_id);
iv.setBackgroundColor(Color.YELLOW);
params = new RelativeLayout.LayoutParams(30, 40);
params.leftMargin = 50;
params.topMargin = 60;
rl.addView(iv, params);

iv = new ImageView(this);
iv.setBackgroundColor(Color.RED);
params = new RelativeLayout.LayoutParams(30, 40);
params.leftMargin = 80;
params.topMargin = 90;

// This line defines how params.leftMargin and params.topMargin are interpreted.
// In this case, "<80,90>" means <80,90> to the right of the yellow ImageView.
params.addRule(RelativeLayout.RIGHT_OF, yellow_iv_id);

rl.addView(iv, params);