Android: populating Linear Layout programmatically, It gets extra space -
i'm trying populate linearlayout
horizontally imageviews
programmatically. in horizontal directon, works well, reserves space vertically don't want.
here xml:
<linearlayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="vertical" android:paddingbottom="@dimen/activity_vertical_margin" android:paddingleft="@dimen/activity_horizontal_margin" android:paddingright="@dimen/activity_horizontal_margin" android:paddingtop="@dimen/activity_vertical_margin" tools:context="es.uam.dadm.jacopo_grassi_connecta4.settings" > <textview android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="@string/your_color" /> <linearlayout android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="horizontal" android:id="@+id/your_color_container" > </linearlayout> <textview android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="@string/adv_color" /> <linearlayout android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="horizontal" android:id="@+id/adv_color_container" > </linearlayout> <relativelayout android:layout_width="match_parent" android:layout_height="wrap_content" > <textview android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="@string/sounds" /> <switch android:id="@+id/sounds_switch" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignparentright="true" /> </relativelayout>
and here's java code:
private playerdatasource playersdb; private player player; @override protected void oncreate(bundle savedinstancestate) { super.oncreate(savedinstancestate); setcontentview(r.layout.activity_settings); bundle extras = getintent().getextras(); playersdb = new playerdatasource(this); player = playersdb.getplayer(extras.getstring(utils.param_player_id)); buildcolors(); switch sounds = (switch)findviewbyid(r.id.sounds_switch); sounds.setoncheckedchangelistener(this); sounds.setchecked(player.getsounds() == 0 ? false : true); } @override public void onclick(view v) { integer tag = (integer) v.gettag(r.id.tag_adv); if(tag == null){ //your color tag = (integer) v.gettag(r.id.tag_you); player.setcolor(tag); }else{ //adv color player.setcoloradv(tag); } playersdb.updateplayer(player); buildcolors(); } @override public void oncheckedchanged(compoundbutton buttonview, boolean ischecked) { if(ischecked){ player.setsounds(1); }else{ player.setsounds(0); } playersdb.updateplayer(player); } private void buildcolors(){ linearlayout parent = (linearlayout)findviewbyid(r.id.your_color_container); parent.removeallviewsinlayout(); (int = 0; < 5; ++i) { linearlayout.layoutparams params = new layoutparams(layoutparams.wrap_content, layoutparams.wrap_content); params.weight = 0.2f; imageview v = new imageview(this); integer drawable = null; switch (i){ case 0: drawable = r.drawable.red_piece; break; case 1: drawable = r.drawable.yellow_piece; break; case 2: drawable = r.drawable.green_piece; break; case 3: drawable = r.drawable.purple_piece; break; case 4: drawable = r.drawable.azure_piece; break; } v.setlayoutparams(params); v.setimageresource(drawable); v.settag(r.id.tag_you, drawable); v.setonclicklistener(this); if (drawable.equals(player.getcolor())) { v.setbackgroundcolor(getresources().getcolor(r.color.azul)); } parent.addview(v); } parent = (linearlayout)findviewbyid(r.id.adv_color_container); parent.removeallviewsinlayout(); (int = 0; < 5; ++i) { linearlayout.layoutparams params = new layoutparams(layoutparams.wrap_content, layoutparams.wrap_content); params.weight = 0.2f; imageview v = new imageview(this); integer drawable = null; switch (i){ case 0: drawable = r.drawable.red_piece; break; case 1: drawable = r.drawable.yellow_piece; break; case 2: drawable = r.drawable.green_piece; break; case 3: drawable = r.drawable.purple_piece; break; case 4: drawable = r.drawable.azure_piece; break; } v.setlayoutparams(params); v.setimageresource(drawable); v.settag(r.id.tag_adv, drawable); v.setonclicklistener(this); if (drawable.equals(player.getcoloradv())) { v.setbackgroundcolor(getresources().getcolor(r.color.azul)); } parent.addview(v); } }
and that's result:
obviously, images perfect squares.
what doing wrong?
does work if change android:layout_height of outer linearlayout "wrap_content"?
Comments
Post a Comment