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);
実行結果
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); } }