他の誰かが同様の質問をしており、未知の量のビューを既存のレイアウトに動的にロードしたい場合:
を使用してRelativeLayout
、最初View
のものを必要な場所に追加し、前に追加されたものを参照して残りを整列させます。Android は、同じ行に収まらないすべてのビューに対して自動的に改行を行うわけではないため、inbefore で計算するか、試行錯誤する必要があります。
これが大まかな例です。まず、インターフェイスを埋めるメソッドからのコード スニペット:
ArrayList<Item> listItems = item.getItems();
if( listItems != null ) {
for( Item item: listItem ) {
addItem( MyActivity.this, item, iCounterItemNumber );
iCounterItemNumber++;
}
}
そして、ここに addItem メソッドがあります:
private void addItem( Activity context, final Item item, int iCounterItemNumber ) {
View vItem = LayoutInflater.from(context).inflate(R.layout.layoutinflatable_item, null);
TextView txtvItemName = (TextView) vItem.findViewById(R.id.textView_itemName);
txtvItemName.setText(item.getName());
vItem.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View vItem) {
// just to show that you can set a OnClickListener
}
});
if ( iCounterItemNumber == 0 ) {
RelativeLayout.LayoutParams rlpItemParemeters = new RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.WRAP_CONTENT, RelativeLayout.LayoutParams.WRAP_CONTENT);
rlpItemParemeters.addRule(RelativeLayout.ALIGN_PARENT_TOP);
rlpItemParemeters.addRule(RelativeLayout.ALIGN_PARENT_LEFT);
vItem.setId( 100 );
_rlItemTable.addView( vItem, rlpItemParemeters );
} else if ( iCounterItemNumber % 2 == 0 ) {
RelativeLayout.LayoutParams rlpPackageParemeters = new RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.WRAP_CONTENT, RelativeLayout.LayoutParams.WRAP_CONTENT);
rlpPackageParemeters.addRule(RelativeLayout.ALIGN_PARENT_LEFT);
rlpPackageParemeters.addRule(RelativeLayout.BELOW, ( 100 - 2 + iCounterItemNumber ) );
vPackage.setId( 100 + iCounterItemNumber );
_rlShopPackagesTable.addView( vPackage, rlpPackageParemeters );
} else {
RelativeLayout.LayoutParams rlpPackageParemeters = new RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.WRAP_CONTENT, RelativeLayout.LayoutParams.WRAP_CONTENT);
rlpPackageParemeters.addRule(RelativeLayout.ALIGN_BOTTOM, ( 100 - 1 + iCounterItemNumber ) );
rlpPackageParemeters.addRule(RelativeLayout.RIGHT_OF, ( 100 - 1 + iCounterItemNumber ) );
vPackage.setId( 100 + iCounterItemNumber );
_rlItemTable.addView( vPackage, rlpPackageParemeters );
}
少し短くできることはわかっていますが、大ざっぱな例にすぎません。私がここで何をしたかが明確であることを願っています。異なる画面サイズは対象外です。追加したさまざまなサイズのビューを使用するか、画面サイズを取得してからさまざまな方法を使用します。