If anyone else has a similar question and wants to load dynamically an unknown amount of views into an existing layout:
Just use a RelativeLayout
, add the first View
to the place you want to and align the rest with reference to the ones that have been added before. Android will not automatically make a line break for every view that does not fit into the same line, so you have to calculate inbefore or go by try-and-error.
Here is a rough example. First a code snippet from the methode that fills the interface:
ArrayList<Item> listItems = item.getItems();
if( listItems != null ) {
for( Item item: listItem ) {
addItem( MyActivity.this, item, iCounterItemNumber );
iCounterItemNumber++;
}
}
And here the addItem methode:
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 );
}
I know you can shorten it a bit, but it should just be a sketchy example. Hope it is clear what I did here. Different screen sizes are not covered. Either use different sized views, that you add, or get the screen size and use different methods then.