私はゲームのメニューをプログラミングしようとしていますが、今度はレベル選択をしたいと思っています。行ごとに5つのボタンがある3つの行が必要です。RelativeLayoutの位置ImageButton
for(int i=0; i<3; ++i){
for(int j=0; j<5; ++j){
ImageButton button = new ImageButton(this);
RelativeLayout.LayoutParams paramsBut = new RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.WRAP_CONTENT, RelativeLayout.LayoutParams.WRAP_CONTENT);
paramsBut.addRule(RelativeLayout.ALIGN_PARENT_LEFT);
paramsBut.addRule(RelativeLayout.ALIGN_PARENT_TOP);
int marginLeft = (int)((float)(sizeLeftWidth/6) * (j+1)) + j*buttonSize;
int marginTop = (int)((float)(sizeLeftHeight/4) * (i+1)) + i*buttonSize;
paramsBut.leftMargin = marginLeft;
paramsBut.topMargin = marginTop;
button.setAdjustViewBounds(true);
button.setMaxWidth(buttonSize);
button.setMaxHeight(buttonSize);
button.setBackgroundDrawable(null);
Bitmap bmp = Bitmap.createScaledBitmap(BitmapFactory.decodeResource(getResources(), R.drawable.level),buttonSize,buttonSize,false);
Drawable d = new BitmapDrawable(bmp);
button.setImageDrawable(d);
layout.addView(button,paramsBut);
}
}
RelativeLayout:
RelativeLayout layout = new RelativeLayout(this);
RelativeLayout.LayoutParams params = new RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.FILL_PARENT, RelativeLayout.LayoutParams.FILL_PARENT);
layout.setLayoutParams(params);
問題はボタンが右の位置ではなく、私は問題が余裕であると考えていることです。 私は余裕をもってそれをやっているのですか?コード全体がまったく愚かですか? (私のプログラミングスタイルを改善するヒントがあれば、いつでもうれしいよ^^)
私はLinearLayoutが私の目的にはもっと意味をなさないと思っていますが、xml(私はいくつかのthimesを使用しています)が助けになるとは思っていません。 XMLファイルでは、15個のボタンをドラッグ・アンド・ドロップしてコード内で見つけ、その属性を変更する必要があります。コードでそれらを作成するバージョンが良いですか、または私は考えて間違いがありますか? – Mister004
XMLレイアウトファイルに慣れてしまうと、実際にはずっと簡単になり、UIの初期化に膨大なコードブロック(特に非常に大きなUI)を使用することはありません。独自のカスタムレイアウトを持つアイテムでListViewを生成するために、独自のリストアダプタを作成する場合と同様に、XMLレイアウトファイルも再利用できます。 Androidは確かにコードからUIを初期化するつもりはありません**。 – afollestad
また、XMLを使用すると、すべての画面サイズでUIが機能するようになります。ビューの幅と高さにはpxを使用しないでください。dp(携帯電話からタブレットまで、さまざまな画面に表示されるべきUIのサイズに合わせて自動的にUIの縮尺を変更する)を使用する必要があります。 – afollestad