How to use addView to add view to layout?
Solution 1
You forgot to specify the LayoutParameters
for the newly added view.
LinearLayout layout = (LinearLayout)findViewById(R.id.mainLayout);
TextView text=new TextView(this);
text.setLayoutParams(new LinearLayout.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT));
text.setText("test");
layout.addView(text);
EDIT
The GridView
with an id of @+id/gridview
is defined with a layout height of fill_parent
, leaving you with no space to add a new view. Changing its height to wrap_content
may solve your problem.
Adding my comment to this post to help others easily verify the solution.
Solution 2
I can't remember, but maybe there is any "refresh" method to load again the layout.
Try layout.invalidate();
Solution 3
I had the same problem and wasted several time finding the reason.
My fault was that I was adding a CustomView that had match_parent set as height.
I hope to save some precious time to anybody who did this silly annoying mistake :)
TextView tv = new TextView(this);
lytMarks.addView(tv);
CustomView cv = new CustomView(this, someObject);
lytMarks.addView(cv); // <-- This one had height = match_parent!!
EditText et = new EditText(this);
lytMarks.addView(et);
Related videos on Youtube
Comments
-
Majstor almost 2 years
I have read probably all posts and documentation but I still can't solve this issue.
I want to use
addView()
method to add view to the existing (running) layout but for some reason I cant. I know that this should be easy and basic but still I cant do it. So, please help me.Here is a code:
LinearLayout layout = (LinearLayout)findViewById(R.id.mainLayout); TextView text = new TextView(this); text.setText("test"); layout.addView(text);
That's a code, and the result is that I have displayed only views which are defined in XML file. There is no this new view I have added. When I debug I see this added view as a child of the parent to which I have added it but it isn't displayed.
here is main.xml:
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:ads="http://schemas.android.com/apk/lib/com.google.ads" android:id="@+id/mainLayout" android:layout_width="fill_parent" android:layout_height="fill_parent" android:orientation="vertical" android:background="@drawable/main1" > <TextView android:id="@+id/app_title" android:layout_width="fill_parent" android:layout_height="wrap_content" android:textColor="#FFF" android:text="@string/app_title" android:textSize="25dp" android:gravity="center_horizontal"/> <TextView android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_marginTop="5dp" android:text="@string/main_screen_counter_title" android:textSize="15dp" android:textColor="#FFF" android:gravity="center_horizontal"/> <TextView android:id="@+id/frontScreenCounter" android:layout_width="fill_parent" android:layout_height="wrap_content" android:textColor="#FFF" android:text="@string/reading" android:textSize="33dp" android:gravity="center_horizontal" /> <GridView android:id="@+id/gridview" android:layout_width="fill_parent" android:layout_height="fill_parent" android:columnWidth="90dp" android:numColumns="3" android:verticalSpacing="10dp" android:horizontalSpacing="10dp" android:stretchMode="columnWidth" android:gravity="center" android:textColor="#888" /> </LinearLayout>
Please help. This will driving me nuts!
-
user almost 12 yearsCould you add the layout where you want to add the
TextView
? -
Majstor almost 12 yearsHey Luksprog, It was because android:layout_height="fill_parent" in LinearLayout attributes. I have now displayed text but at a bottom of the screen. How to put it at a top? You have helped me. Indirectly, but still. Tnx a lot.
-
user almost 12 yearsIf you want to place that
TextView
at a certain position you should use another flavor of theaddView
method that takes an int, the position where to put the newView
, something like this:addView(text, 0);
-
Majstor almost 12 yearsDone! That's it! Tnx a lot one more time. Great speed. Take care.
-
-
Majstor almost 12 yearsWhich params should I assign? I tried adding margin, width, height but still nothing..
-
Majstor almost 12 yearsTried, still nothing. Have more ideas?
-
firefistace almost 12 yearsCan you post your mainlayout.xml? Because Arun's code works for me too
-
Majstor almost 12 yearsI tried your code and still nothing. Its there as a child of that parent but isn't displayed. Have more ideas? Tnx for your effort.
-
Arun George almost 12 yearsWith the code you provided this is the only solution I can come up with. Maybe if you post more code, the error can be identified.
-
Arun George almost 12 yearsThe
GridView
with an id of@+id/gridview
is defined with a layout height offill_parent
, leaving you with no space to add a new view. Changing its height towrap_content
may solve your problem. -
Majstor almost 12 yearsTnx Anun. I've changed LinearLayout Atribut of height to "wrapp content" and now I have displayed the text at a bottom. Tnx a lot for your time. You really fascinate me with this live chat. Amazing!
-
ForceMagic about 10 years@Majstor the
Invalidate();
must be called on the top level layout, did you call it from that object? -
PavelGP almost 8 yearsYe, really necessary advice! Thks!