2012年03月13日

weightを動的に変更する


weightSumとlayout_weightを今回はjavaで動的に設定してみたいと思います
weightSumとlayout_weight
前回と同様に親weightSumを10、子のButtonを5と3に設定しました
package blog.test;
  
import android.app.Activity;
import android.os.Bundle;
import android.view.ViewGroup.LayoutParams;
import android.widget.Button;
import android.widget.LinearLayout;
 
  
public class TestActivity extends Activity {
 
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
 
        //親LinearLayoutを作成
        LinearLayout layout0 = new LinearLayout(this);
        layout0.setOrientation(LinearLayout.VERTICAL);
        LayoutParams p0 = new LayoutParams(LayoutParams.FILL_PARENT,
                LayoutParams.FILL_PARENT);
        //setWeightSumを10に設定
        layout0.setWeightSum(10);
        setContentView(layout0, p0);

        //ボタンを追加
        Button button1 = new Button(this);
        button1.setHeight(0);
        button1.setText("Button1");
        LinearLayout.LayoutParams lp1=new 
        		LinearLayout.LayoutParams(LayoutParams.FILL_PARENT,
                LayoutParams.WRAP_CONTENT);
        //weightを5に設定
        lp1.weight=5;
        layout0.addView(button1,lp1);
         
        Button button2 = new Button(this);
        button2.setHeight(0);
        button2.setText("Button2");
        LinearLayout.LayoutParams lp2=new 
        		LinearLayout.LayoutParams(LayoutParams.FILL_PARENT,
                LayoutParams.WRAP_CONTENT);
        //weightを3に設定
        lp2.weight=3;
        layout0.addView(button2,lp2);
         

    }
 
}
注意すべき点はButtonのLayoutParams
LinearLayout.LayoutParamsに変更されている点です
LayoutParamsだと.weightでの設定ができません
device49.png

スポンサードリンク

posted by kenken at 15:02 | Comment(0) | TrackBack(0) | レイアウト カスタマイズ | このブログの読者になる | 更新情報をチェックする
2012年03月12日

weightSumとlayout_weight


親ウィジェットにweightSum属性を指定するとで
内部の子ウィジェットの合計値とすることができます
子ウィジェットのlayout_weightと合わせて設定すると
余白部分を含めたレイアウトが可能です
layout_weight属性

たとえば親のViewGroupのweightSumを10とし
子のViewのButton1とButton2のlayout_weightを
それぞれ5と3とするとButton1に5/10が
Button2に3/10が、残りが余白部分の2/10となります
例をxmlソースで示します
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
	android:layout_width="fill_parent"
	android:layout_height="fill_parent"
	android:orientation="vertical" 
	android:weightSum="10">

    <Button
    	android:id="@+id/button1"
    	android:layout_width="fill_parent"
    	android:layout_height="0px"
    	android:layout_weight="5"
    	android:text="Button1" />


    <Button
    	android:id="@+id/button2"
    	android:layout_width="fill_parent"
    	android:layout_height="0px"
    	android:text="Button2" android:layout_weight="3"/>

</LinearLayout>
自身の大きさの誤差をなくすため
android:layout_height="0px"
を入れることを忘れないでください
device49.png
スポンサードリンク

posted by kenken at 18:57 | Comment(0) | TrackBack(0) | レイアウト カスタマイズ | このブログの読者になる | 更新情報をチェックする

layout_weight属性


layout_weight属性は親ウィジェットの余白部分を
どの程度の割合で子ウィジェット同士で分け合って使うかの設定値です
例として画面を2つのボタンで1:3に分割するよう設定しました
device48.png

これはLinearLayoutの縦方向の余白部分にあるボタンにそれぞれ
layout_weight="1"
layout_weight="3"を設定したものです
xmlソースファイルは
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
	android:layout_width="fill_parent"
	android:layout_height="fill_parent"
	android:orientation="vertical" >

    <Button
    	android:id="@+id/button1"
    	android:layout_width="fill_parent"
    	android:layout_height="0px"
    	android:layout_weight="1"
    	android:text="Button" />


    <Button
    	android:id="@+id/button2"
    	android:layout_width="fill_parent"
    	android:layout_height="0px"
    	android:text="Button" android:layout_weight="3"/>

</LinearLayout>
一つ注意しなければならないのは
android:layout_height="0px"
としているところです
layout_weight属性は余白を分割する機能であるため
子ウィジェット自身(この場合はbutton)の大きさを入れていません
そのため正確に1:3に分割するにはlayout_heightを0pxに設定させる必要があります
もちろん横方向に分割するときはlayout_widthを0pxにさせます

スポンサードリンク

posted by kenken at 17:21 | Comment(0) | TrackBack(0) | レイアウト カスタマイズ | このブログの読者になる | 更新情報をチェックする
2012年03月09日

gravityとlayout_gravityを動的に変更する


前回はxmlソースファイルによりgravity属性を変更しました
gravityとlayout_gravity
javaコードによる属性変更はsetGravityを使用します
これでjavaコードでの変更や動的に変更などが可能です
実行結果を前回と同様になるように設定しました

package blog.test;
 
import android.app.Activity;
import android.os.Bundle;
import android.view.Gravity;
import android.view.ViewGroup.LayoutParams;
import android.widget.Button;
import android.widget.LinearLayout;

 
public class TestActivity extends Activity {

	@Override
	public void onCreate(Bundle savedInstanceState) {
	    super.onCreate(savedInstanceState);

	    //親LinearLayoutを作成
	    LinearLayout layout0 = new LinearLayout(this);
	    layout0.setOrientation(LinearLayout.VERTICAL);
		LayoutParams p0 = new LayoutParams(LayoutParams.FILL_PARENT,
		        LayoutParams.FILL_PARENT);
	    //子LinearLayout1/2/3を作成
		LinearLayout layout1 = new LinearLayout(this);
		LinearLayout layout2 = new LinearLayout(this);
		LinearLayout layout3 = new LinearLayout(this);
		layout1.setOrientation(LinearLayout.VERTICAL);

		LayoutParams p1 = new LayoutParams(LayoutParams.FILL_PARENT,
		        LayoutParams.WRAP_CONTENT);
		layout0.addView(layout1,p1);
		layout0.addView(layout2,p1);
		layout0.addView(layout3,p1);
		setContentView(layout0, p0);



		//ボタンを追加
		Button button1 = new Button(this);
		button1.setHeight(0);
		button1.setText("left-top");
		LayoutParams lp1=new LayoutParams(LayoutParams.WRAP_CONTENT,
                LayoutParams.WRAP_CONTENT);
		button1.setGravity(Gravity.TOP);
		layout1.setGravity(Gravity.LEFT);
		layout1.addView(button1,lp1);
		
		Button button2 = new Button(this);
		button2.setHeight(0);
		button2.setText("center-center");
		LayoutParams lp2=new LayoutParams(LayoutParams.WRAP_CONTENT,
                LayoutParams.WRAP_CONTENT);
		button2.setGravity(Gravity.CENTER);
		layout2.setGravity(Gravity.CENTER);
		layout2.addView(button2,lp2);
		
		Button button3 = new Button(this);
		button3.setText("right-bottom");
		LayoutParams lp3=new LayoutParams(LayoutParams.WRAP_CONTENT,
                LayoutParams.WRAP_CONTENT);
		button3.setGravity(Gravity.BOTTOM);
		layout3.setGravity(Gravity.RIGHT);
		layout3.addView(button3,lp3);
		
		
	}

}
まず画面全体をカバーする親LinearLayoutを作成します
次にその中に子LinearLayout1/2/3を作成します
子LinearLayoutのGravityをそれぞれLEFT/CENTER/RIGHTとします
layout1.setGravity(Gravity.LEFT);の部分
これは子LinearLayoutの中に入れるbuttonに適用されます
前回のlayout_gravityに当たる)
最後にbuttonの中の文字のgravityを設定すれば完了です

これでlayout_gravityとgravityを動的に変更することができました
device47.png
スポンサードリンク

posted by kenken at 18:45 | Comment(0) | TrackBack(0) | レイアウト カスタマイズ | このブログの読者になる | 更新情報をチェックする