【Android】FrameLayout内でTextViewにマージンを指定する

前回、「FrameLayoutでSurfaceViewとTextViewと重ねて表示する」で作成したTextViewにマージンを指定する。
しかし、元となるレイアウトがFrameLayoutの場合、TextViewにmarginが設定できない。

FrameLayoutとTextViewの間にmarginが設定できるLinearLayoutを噛ませてやればうまくいく。

例)
FrameLayout -> TextView

FrameLayout -> LinearLayout -> TextView

【Activity000.java】

public class Activity000 extends Activity {

	// LayoutParamsにセットするパラメータを準備
	private final int FP = ViewGroup.LayoutParams.FILL_PARENT; 
	private final int WC = ViewGroup.LayoutParams.WRAP_CONTENT;
	private final int LFP = LinearLayout.LayoutParams.FILL_PARENT;
	private final int LWC = LinearLayout.LayoutParams.WRAP_CONTENT;
	
	@Override
	public void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		
		// FrameLayoutを準備
		FrameLayout fl = new FrameLayout(this);
		setContentView(fl);
 
		// FrameLayoutにSurfaceViewをセットする
		fl.addView(new SampleSurfaceView2(this),new ViewGroup.LayoutParams(WC, WC));
        
		// SurfaceViewと重ねるTextViewを準備
		TextView tv = new TextView(this);
		tv.setText("SurfaceViewとTextViewを重ねる\nさらにTextViewにマージンを指定する");
		tv.setHeight(120);
		tv.setTextColor(Color.BLACK);
		tv.setBackgroundColor(Color.WHITE);
		
		// TextViewを入れるLinearLayoutを準備
		LinearLayout ll = new LinearLayout(this);
		LinearLayout.LayoutParams lp = new LinearLayout.LayoutParams(LFP, LWC);
		lp.setMargins(10, 10, 10, 10);
		tv.setLayoutParams(lp);
		ll.addView(tv);
		
		// FrameLayoutにLinearLayoutをセットする
		fl.addView(ll, new ViewGroup.LayoutParams(FP, WC));
	}
}

setMarginsのパラメータ指定 : setMargins(左, 上, 右, 下)

【実行画面】

setMargins

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

次のHTML タグと属性が使えます: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>