たぼさんの部屋

いちょぼとのんびり

L005) Basic Layout #2 : weight , gravity

目的

weightを使って画面を比率で分ける
setGravity()でセンタリング

point

setGravity(Gravity)

縦の位置指定は親要素に指定する

liTop.setGravity(Gravity.CENTER_VERTICAL);		//center_vertical

LayoutParams.weight

値はfloat(小数、合計1)
LayoutParamsに指定。

weight指定するときはLayoutParams(width , height)の値に注意

縦レイアウトを比率指定するときはheightを0
横レイアウトの比率指定の場合はwidthを0

//XXX 横レイアウト指定:weight指定するのでwidth を0で指定しておく。
LinearLayout.LayoutParams lpTopLeft = new LinearLayout.LayoutParams( 0 ,WC);
lpTopLeft.weight = 0.6f;
tvTopLeft.setLayoutParams(lpTopLeft);

実行結果

f:id:donsuka_kk:20121119012113p:plain

Main.java

package com.example.l005_basic_layout_weight;

import android.app.Activity;
import android.content.Context;
import android.graphics.Color;
import android.os.Bundle;
import android.view.Gravity;
import android.view.ViewGroup;
import android.widget.LinearLayout;
import android.widget.RelativeLayout;
import android.widget.TextView;

public class Main extends Activity {

	Context context;
	RelativeLayout base;
	
	private final int WC = ViewGroup.LayoutParams.WRAP_CONTENT;
	private final int FP = ViewGroup.LayoutParams.FILL_PARENT;
	
	@Override
	public void onCreate(Bundle savedInstanceState) {
	    super.onCreate(savedInstanceState);
	
	    context = getApplicationContext();
	    base = new RelativeLayout(context);
	    base.setBackgroundColor(Color.GRAY);
	    setContentView(base);
	    
	    //Conteiner
	    LinearLayout liConteiner = new LinearLayout(context);
	    RelativeLayout.LayoutParams lpConteiner = new RelativeLayout.LayoutParams(FP,FP);
	    lpConteiner.setMargins(10, 10, 10, 10);
	    liConteiner.setLayoutParams(lpConteiner);
	    liConteiner.setBackgroundColor(Color.GREEN);
	    liConteiner.setOrientation(LinearLayout.VERTICAL);
	    base.addView(liConteiner);
	    
	    //TextView tvHeader
	    TextView tvHeader = new TextView(context);
	    tvHeader.setText("header");
	    tvHeader.setGravity(Gravity.CENTER);
	    liConteiner.addView(tvHeader);
	    
	    //linearLayout liTop
	    LinearLayout liTop = new LinearLayout(context);
	    //XXX 縦レイアウトをweight指定して比率構成するので height を0指定しておくこと!
	    LinearLayout.LayoutParams lpTop = new LinearLayout.LayoutParams(FP,0);
	    lpTop.weight = 0.3f;
	    liTop.setBackgroundColor(Color.BLUE);
	    liTop.setOrientation(LinearLayout.HORIZONTAL);
	    liTop.setGravity(Gravity.CENTER_VERTICAL);		//center_vertical
//	    liTop.setGravity(Gravity.CENTER_HORIZONTAL);	//効力なし
	    liConteiner.addView(liTop,lpTop);
	    
	    //TextView tvTopLeft
	    TextView tvTopLeft = new TextView(context);
	    //XXX weight指定するのでwidth を0で指定しておく。
	    LinearLayout.LayoutParams lpTopLeft = new LinearLayout.LayoutParams(0,WC);
	    lpTopLeft.weight = 0.6f;
	    tvTopLeft.setLayoutParams(lpTopLeft);
	    tvTopLeft.setGravity(Gravity.CENTER);		//center_horizontal
	    tvTopLeft.setText("TOPLEFT");
	    liTop.addView(tvTopLeft);
	    
	    //TextView tvTopRight
	    TextView tvTopRight = new TextView(context);
	    //XXX weight指定するのでwidth を0で指定しておく。
	    LinearLayout.LayoutParams lpTopRight = new LinearLayout.LayoutParams(0,WC);
	    lpTopRight.weight = 0.4f;
	    tvTopRight.setLayoutParams(lpTopRight);
	    tvTopRight.setGravity(Gravity.CENTER);
	    tvTopRight.setText("TOPRIGHT");
	    liTop.addView(tvTopRight);
	    
	    
	    //linearLayout liBottom
	    LinearLayout liBottom = new LinearLayout(context);
	    //XXX 縦レイアウトをweight指定して比率構成するので height を0指定しておくこと!
	    LinearLayout.LayoutParams lpBottom = new LinearLayout.LayoutParams(FP,0);
	    lpBottom.weight = 0.7f;
	    liBottom.setBackgroundColor(Color.MAGENTA);
	    liBottom.setOrientation(LinearLayout.HORIZONTAL);
	    liBottom.setGravity(Gravity.CENTER_VERTICAL);
	    liConteiner.addView(liBottom,lpBottom);
	    
	    //TextView tvBottomLeft
	    TextView tvBottomLeft =  new TextView(context);
	    //XXX weight指定するのでwidth を0で指定しておく。
	    LinearLayout.LayoutParams lpBottomLeft = new LinearLayout.LayoutParams(0,WC);
	    
	    lpBottomLeft.weight = 0.1f;
	    tvBottomLeft.setText("BOTTOMLEFT");
	    tvBottomLeft.setGravity(Gravity.CENTER);
	    liBottom.addView(tvBottomLeft,lpBottomLeft);
	    
	    //TextView tvBottomRight
	    TextView tvBottomRight = new TextView(context);
	    //XXX weight指定するのでwidth を0で指定しておく。
	    LinearLayout.LayoutParams lpBottomRight = new LinearLayout.LayoutParams(0,WC);
	    lpBottomRight.weight = 0.9f;
	    tvBottomRight.setText("BOTTOMRIGHT");
	    tvBottomRight.setGravity(Gravity.CENTER);
	    liBottom.addView(tvBottomRight,lpBottomRight);
	    
	    //TextView tvFooter
	    TextView tvFooter = new TextView(context);
	    tvFooter.setText("footer");
	    LinearLayout.LayoutParams lpFooter = new LinearLayout.LayoutParams(FP,WC);
	    //文字自体をセンターに:setGravity
	    tvFooter.setGravity(Gravity.CENTER);
	    liConteiner.addView(tvFooter,lpFooter);
	}

}