Step: 1
create a new xml layout with scrollview and LinearLayout . We create child view dynamically through code , added to the LinearLayout.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | <?xml version="1.0" encoding="utf-8"?> <ScrollView xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/scrollView" android:layout_width="match_parent" android:layout_height="match_parent" android:fillViewport="false" android:scrollbars="none" android:layout_margin="16dp"> <LinearLayout android:id="@+id/layout1" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" ></LinearLayout> </ScrollView> |
Step: 2
create new Activity class
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 | package com.pratap.dynamicforms; import android.os.Bundle; import android.support.v7.app.AppCompatActivity; import android.util.Log; import android.view.View; import android.widget.ArrayAdapter; import android.widget.Button; import android.widget.CheckBox; import android.widget.EditText; import android.widget.LinearLayout; import android.widget.Spinner; import java.util.ArrayList; import java.util.List; import static android.view.ViewGroup.LayoutParams.WRAP_CONTENT; /** * Created by pratap.kesaboyina on 10-06-2015. */ public class DynamicForm extends AppCompatActivity { LinearLayout layout1; private static int viewsCount = 0; private List<View> allViews = new ArrayList<View>(); LinearLayout.LayoutParams params; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.dynamic_form); // To set Margin for the child Views params = new LinearLayout.LayoutParams( LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.WRAP_CONTENT); params.setMargins(5, 5, 5, 5); // LinearLayout acts as parent Layout , we will add child Views to this Layout dynamically layout1 = (LinearLayout) findViewById(R.id.layout1); // Sample Data for Spinner ArrayList<String> spinnerList = new ArrayList<String>(); spinnerList.add("Select"); spinnerList.add("Hyderabad"); spinnerList.add("Banglore"); spinnerList.add("Chennai"); spinnerList.add("Delhi"); spinnerList.add("Mumbai"); // create edittext dynamically , added to LinearLayout createEditText("First Name"); createEditText("Last Name"); createEditText("Age"); createEditText("Address"); createSpinner(spinnerList); createEditText("State"); // create spinners dynamically , added to LinearLayout // create checkbox dynamically , added to LinearLayout createCheckBox("Key Contact"); createCheckBox("Target contact"); saveButton(); } // create a button to show/save data , entered in the Form private void saveButton() { Button saveButton = new Button(this); saveButton.setHeight(WRAP_CONTENT); saveButton.setText("Save"); saveButton.setOnClickListener(submitListener); layout1.addView(saveButton,params); } // Access the value of the EditText private View.OnClickListener submitListener = new View.OnClickListener() { public void onClick(View view) { StringBuilder stringBuilder = new StringBuilder(); for (View singView : allViews) { String className = Utils.getClassName(singView.getClass()); if (className.equalsIgnoreCase("EditText")) { EditText editText = (EditText) singView; stringBuilder.append(" "+editText.getText().toString()); } else if (className.equalsIgnoreCase("Spinner")) { Spinner spiner = (Spinner) singView; stringBuilder.append(" "+spiner.getSelectedItem()); } else if (className.equalsIgnoreCase("CheckBox")) { CheckBox checkBox = (CheckBox) singView; stringBuilder.append(" "+checkBox.isChecked()); } } Log.i("All Data ", stringBuilder.toString()); Utils.showAlertDialog(view.getContext(), "Data", stringBuilder.toString()); } }; public void createEditText(String hint) { EditText editText = new EditText(this); editText.setId(viewsCount++); editText.setHint(hint); allViews.add(editText); layout1.addView(editText,params); } public void createSpinner(List<String> spinnerList) { Spinner spinner = new Spinner(this); spinner.setId(viewsCount++); spinner.setBackgroundResource(R.drawable.dropdown_normal_holo_light); ArrayAdapter<String> spinnerArrayAdapter = new ArrayAdapter<String>(this, android.R.layout.simple_spinner_dropdown_item, spinnerList); spinner.setAdapter(spinnerArrayAdapter); allViews.add(spinner); layout1.addView(spinner,params); } public void createCheckBox(String label) { final CheckBox checkBox = new CheckBox(this); checkBox.setId(viewsCount++); checkBox.setText(label); checkBox.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { } }); allViews.add(checkBox); layout1.addView(checkBox,params); } } |
Util.java
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 | package com.pratap.dynamicforms; import android.app.AlertDialog; import android.content.Context; import android.util.Log; import android.view.Gravity; import android.widget.Toast; public class Utils { public static void showAlertDialog(Context context, String title, String message) { AlertDialog.Builder builder = new AlertDialog.Builder(context); if (title != null) builder.setTitle(title); builder.setMessage(message); builder.setNegativeButton("OK", null); builder.show(); } /** * * @param c * @return */ public static String getClassName(Class c) { String className = c.getName(); int firstChar; firstChar = className.lastIndexOf('.') + 1; if (firstChar > 0) { className = className.substring(firstChar); } return className; } } |
Screen Shot
Download Source Code Link
Exelente ejemplo
ReplyDelete