Android dynamically add EditText in Linear Layout
20,714
Solution 1
Change your Add_line()
method to :
public void Add_Line() {
LinearLayout ll = (LinearLayout)findViewById(R.id.linearLayoutDecisions);
// add edittext
EditText et = new EditText(this);
LinearLayout.LayoutParams p = new LinearLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT);
et.setLayoutParams(p);
et.setText("Text");
et.setId(numberOfLines + 1);
ll.addView(et);
numberOfLines++;
}
add the LayoutParams
to the Edittext
Solution 2
This help someone who want to add dynamic TextInputLayout to linear layout.
LinearLayout linearLayoutSubParent = new LinearLayout(this);
linearLayoutSubParent.setOrientation(LinearLayout.HORIZONTAL);
linearLayoutSubParent.setWeightSum(100f); // you can also add more widget by providing weight
LinearLayout.LayoutParams linearLayoutSubParentParams =
new LinearLayout.LayoutParams(0,
LinearLayout.LayoutParams.WRAP_CONTENT, 100f);
linearLayoutSubParent.setLayoutParams(linearLayoutSubParentParams);
linearLayoutSubParent.setPadding(0, 0, 0, 0);
// Add TextInputLayout to parent layout first
TextInputLayout textInputLayout = new TextInputLayout(this);
LinearLayout.LayoutParams textInputLayoutParams = new LinearLayout.LayoutParams(0,
LinearLayout.LayoutParams.WRAP_CONTENT, 100f);
textInputLayout.setLayoutParams(textInputLayoutParams);
textInputLayout.setHintTextAppearance(R.style.TextSizeHint);
linearLayoutSubParent.addView(textInputLayout);
// Add EditText control to TextInputLayout
final EditText editText = new EditText(this);
LinearLayout.LayoutParams editTextParams = new LinearLayout.LayoutParams(
LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.WRAP_CONTENT);
editTextParams.setMargins(0, 10, 0, 0);
editText.setLayoutParams(editTextParams);
editText.setTextSize(TypedValue.COMPLEX_UNIT_PX,
getResources().getDimension(R.dimen.text_size));
editText.setHint("Enter value");
editText.setInputType(InputType.TYPE_TEXT_FLAG_CAP_WORDS);
editText.setEnabled(false);
textInputLayout.addView(editText, editTextParams);
linearLayoutParent.addView(linearLayoutSubParent);
<style name="TextSizeHint" parent="TextAppearance.Design.Hint">
<item name="android:textSize">12dp</item>
</style>
<dimen name="text_size">20dp</dimen>
Author by
JamaicanMeCode
Updated on May 18, 2020Comments
-
JamaicanMeCode about 4 years
I'm stuck trying to add an editText field dynamically under my existing editText fields using a button. Currently pressing the button does nothing. Here is my code:
XML:
<?xml version="1.0" encoding="utf-8"?> <android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:background="#d4cfcd"> tools:context="com.zdowning.decisionmaker.MainActivity"> <LinearLayout android:id="@+id/linearLayoutMain" android:layout_width="fill_parent" android:layout_height="fill_parent" android:paddingLeft="16dp" android:paddingRight="16dp" android:orientation="vertical" > <EditText android:id="@+id/editText1" android:layout_width="match_parent" android:layout_height="45dp" android:gravity="center" android:hint="Enter Your Question Here" android:layout_marginBottom="20dp" android:layout_marginTop="20dp"/> <LinearLayout android:id="@+id/linearLayoutDecisions" android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="vertical"> <EditText android:id="@+id/editText3" android:layout_width="match_parent" android:layout_height="45dp" android:gravity="center" android:hint="Enter Answer #2" /> <EditText android:id="@+id/editText2" android:layout_width="match_parent" android:layout_height="45dp" android:gravity="center" android:hint="Enter Answer #1" /> <EditText android:id="@+id/editText4" android:layout_width="match_parent" android:layout_height="45dp" android:gravity="center" android:hint="Enter Answer #3" /> </LinearLayout> <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="horizontal" android:gravity="center"> <Button android:id="@+id/add_button" style="?android:attr/borderlessButtonStyle" android:layout_width="wrap_content" android:layout_height="wrap_content" android:background="@color/colorPrimary" android:text="+" android:textColor="@android:color/background_light" android:textSize="18sp"/> <View android:layout_width="0dp" android:layout_height="fill_parent" android:layout_weight="1" /> <Button android:id="@+id/remove_button" style="?android:attr/borderlessButtonStyle" android:layout_width="wrap_content" android:layout_height="wrap_content" android:background="@color/colorPrimary" android:text="-" android:textColor="@android:color/background_light" android:textSize="18sp" android:layout_margin="10dp"/> </LinearLayout> <RelativeLayout android:layout_width="fill_parent" android:layout_height="wrap_content"> <Button android:id="@+id/button" style="?android:attr/borderlessButtonStyle" android:layout_width="wrap_content" android:layout_height="wrap_content" android:background="@color/colorPrimary" android:text="DECIDE!" android:textColor="@android:color/background_light" android:textSize="18sp" android:layout_centerInParent="true" /> </RelativeLayout> <TextView android:id="@+id/textView7" android:layout_width="fill_parent" android:layout_height="wrap_content" android:gravity="center" android:layout_margin="20dp" android:textColor="@android:color/black" android:textSize="36sp" /> </LinearLayout>
Java:
package com.zdowning.decisionmaker; import android.graphics.Typeface; import android.support.v7.app.AppCompatActivity; import android.app.Activity; import android.os.Bundle; import android.view.View; import android.view.Window; import android.widget.Button; import android.widget.EditText; import android.widget.LinearLayout; import android.widget.TextView; import android.widget.ScrollView; import java.lang.*; import static com.zdowning.decisionmaker.R.layout.activity_main; public class MainActivity extends AppCompatActivity { public int numberOfLines = 3; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(activity_main); final Button button = (Button) findViewById(R.id.button); button.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { getAnswer(); } }); final Button Add_button = (Button) findViewById(R.id.add_button); button.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { Add_Line(); } }); } public void Add_Line() { LinearLayout ll = (LinearLayout) findViewById(R.id.linearLayoutDecisions); // add edittext EditText et = new EditText(this); et.setId(numberOfLines + 1); ll.addView(et); numberOfLines++; } public void getAnswer() { String[] options = new String[3]; EditText text = (EditText)findViewById(R.id.editText2); options[0] = text.getText().toString(); text = (EditText)findViewById(R.id.editText3); options[1] = text.getText().toString(); text = (EditText)findViewById(R.id.editText4); options[2] = text.getText().toString(); int number = (int)(Math.random() * 3); String answer = options[number]; TextView answerBox = (TextView)findViewById(R.id.textView7); answerBox.setText(answer); } }
Any advice would be a huge help as I'm brand new to android studio. Coding what is above took me hours.
-
rafsanahmad007 about 7 years@JamaicanMeCode if the answer helps, mark it as correct by clicking the tick sign next to the answer..thnakx
-
JamaicanMeCode about 7 yearsThanks for the help!
-
Deep Rathod over 4 yearsThanks for the best solution
-
Deep Rathod over 4 yearssuppose I add control two times at that time how can I get the value of both edit text right now I am just getting the last one value of edit text.