◆ 画面サイズを考慮しないと…
まずは画面の幅を気にせずに表示するとどうなるか確認します。
文字列の表示にはTextViewを使い、幅は80ピクセルにします。"Text 0"から"Text 19"までを横に並べて表示してみましょう。
Androidプロジェクトの設定
LinearLayoutTest3a.java
プロジェクト名 LinearLayoutTest3a ビルドターゲット Android 2.1-update1 アプリケーション名 LinearLayoutTest3a パッケージ名 jp.co.triware.samples.LinearLayoutTest3a アクティビティーの作成 LinearLayoutTest3a 最小SDKバージョン 7
package jp.co.triware.samples.LinearLayoutTest3a;
import android.app.Activity;
import android.os.Bundle;
import android.widget.TextView;
import android.widget.LinearLayout;
import android.view.Gravity;
public class LinearLayoutTest3a extends Activity {
private static final int itemHeight = 40;
private static final int itemWidth = 80;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
LinearLayout llHorizontal = new LinearLayout(this);
llHorizontal.setOrientation(LinearLayout.HORIZONTAL);
llHorizontal.setGravity(Gravity.CENTER_HORIZONTAL);
for (int i = 0; i < 20; i ++) {
TextView tv = new TextView(this);
tv.setHeight(itemHeight);
tv.setWidth(itemWidth);
tv.setGravity(Gravity.CENTER);
tv.setText("Text " + i);
llHorizontal.addView(tv);
}
setContentView(llHorizontal);
}
}実行結果"Test 4"から"Test 19"までがはみ出してしまいました。
◆ 画面サイズにあわせる
次に、画面の幅によって文字列を置く個数を変更してみます。画面の幅はDisplayクラスのgetWidth()メソッドで求めます。
Androidプロジェクトの設定
LinearLayoutTest3b.java
プロジェクト名 LinearLayoutTest3b ビルドターゲット Android 2.1-update1 アプリケーション名 LinearLayoutTest3b パッケージ名 jp.co.triware.samples.LinearLayoutTest3b アクティビティーの作成 LinearLayoutTest3b 最小SDKバージョン 7
package jp.co.triware.samples.LinearLayoutTest3b;
import android.app.Activity;
import android.os.Bundle;
import android.util.Log;
import android.view.Display;
import android.view.Gravity;
import android.widget.LinearLayout;
import android.widget.TextView;
public class LinearLayoutTest3b extends Activity {
private final String TAG = this.getClass().getSimpleName();
private static final int itemHeight = 40;
private static final int itemWidth = 80;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// 縦方向
LinearLayout llVertical = new LinearLayout(this);
llVertical.setOrientation(LinearLayout.VERTICAL);
llVertical.setGravity(Gravity.CENTER_HORIZONTAL);
// 横幅
Display display = getWindowManager().getDefaultDisplay();
int displayWidth = display.getWidth();
Log.d(TAG, "height: " + display.getHeight());
Log.d(TAG, "width : " + displayWidth);
Log.d(TAG, "N/line: " + (displayWidth / itemWidth));
// 横方向
LinearLayout llHorizontal = null;
int nextPos = displayWidth;
for (int i = 0; i < 20; i ++) {
// テキスト
TextView tv = new TextView(this);
tv.setHeight(itemHeight);
tv.setWidth(itemWidth);
tv.setGravity(Gravity.CENTER);
tv.setText("Text " + i);
// 次の行?
nextPos += itemWidth;
if (nextPos > displayWidth) {
llHorizontal = new LinearLayout(this);
llHorizontal.setOrientation(LinearLayout.HORIZONTAL);
llHorizontal.setGravity(Gravity.LEFT);
llVertical.addView(llHorizontal);
nextPos = itemWidth;
}
// 追加
llHorizontal.addView(tv);
}
setContentView(llVertical);
}
}実行結果縦長でも横長でも画面のサイズにあわせてきっちり収まるようになりました。



0 件のコメント:
コメントを投稿