Friday 15 May 2015

Android set layout programmatically results in wrong display -



Android set layout programmatically results in wrong display -

i have linearlayout in layout, if re-create in xml layout file line 3 elements , everythings looks expected. seek add together linearlayout , kid elements programmatically works looks differently , wrong. button seems have right width height low , other 2 elements hardly visible wrong height , width.

this layout:

<linearlayout android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="horizontal" > <edittext android:id="@+id/edittextvaluecomposition" android:layout_width="wrap_content" android:layout_height="match_parent" android:layout_weight="0.94" android:ems="10" android:hint="@string/valuehint" android:inputtype="numberdecimal" > </edittext> <spinner android:id="@+id/compositionselector" android:layout_width="176dp" android:layout_height="wrap_content" android:layout_weight="0.06" /> <button android:id="@+id/button2" android:layout_width="wrap_content" android:layout_height="wrap_content" android:onclick="addcomposition" android:text="@string/add" /> </linearlayout>

and code:

public void addcomposition(view view) { final float scale = getbasecontext().getresources().getdisplaymetrics().density; linearlayout linearlayout = new linearlayout(this); linearlayout.setorientation(linearlayout.horizontal); linearlayout.setlayoutparams(new layoutparams(layoutparams.match_parent, layoutparams.wrap_content)); edittext valueedit = new edittext(this); valueedit.setlayoutparams(new tablelayout.layoutparams(layoutparams.wrap_content, layoutparams.match_parent, 0.94f)); valueedit.sethint(r.string.valuehint); valueedit.setems(10); linearlayout.addview(valueedit); spinner compositionselector = new spinner(this); compositionselector.setlayoutparams(new tablelayout.layoutparams(dptopx(176), layoutparams.wrap_content, 0.06f)); arrayadapter<charsequence> adaptercomp = arrayadapter.createfromresource( this, r.array.compositiontypes, android.r.layout.simple_spinner_item); adaptercomp.setdropdownviewresource(android.r.layout.simple_spinner_dropdown_item); compositionselector.setadapter(adaptercomp); linearlayout.addview(compositionselector); button addcompobutton = new button(this); addcompobutton.setlayoutparams(new layoutparams(layoutparams.wrap_content, layoutparams.wrap_content)); addcompobutton.settext(r.string.add); addcompobutton.setonclicklistener(new onclicklistener() { public void onclick(view v) { additem(v); } }); linearlayout.addview(addcompobutton); linearlayout additemlayout = (linearlayout) findviewbyid(r.id.screenadditem); int index = additemlayout.indexofchild(findviewbyid(r.id.button1)); additemlayout.addview(linearlayout, index); } public int dptopx(int dp) { displaymetrics displaymetrics = getbasecontext().getresources().getdisplaymetrics(); int px = math.round(dp * (displaymetrics.xdpi / displaymetrics.density_default)); homecoming px; }

try utilize linearlayout.layoutparams instead of tablelayout.layoutparams

android android-launcher

No comments:

Post a Comment