Showing posts with label dynamic view. Show all posts
Showing posts with label dynamic view. Show all posts

Wednesday, 10 June 2015

Create Form Programmatically in Android



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

Thursday, 20 November 2014

Dynamic Controls Creation in Android


DynamicFieldsActivity.java

import android.animation.LayoutTransition;
import android.app.Activity;
import android.content.Context;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
import android.widget.LinearLayout;
import android.widget.RadioButton;
import android.widget.RadioGroup;
import android.widget.TextView;
import android.widget.Toast;

public class DynamicFieldsActivity extends Activity {

 EditText textIn;
 Button buttonAdd;
 LinearLayout container;
 Button buttonShowAll;

 @Override
 protected void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);
  setContentView(R.layout.dynamicfields);
  textIn = (EditText) findViewById(R.id.textin);
  buttonAdd = (Button) findViewById(R.id.add);
  container = (LinearLayout) findViewById(R.id.container);

  buttonAdd.setOnClickListener(new OnClickListener() {

   @Override
   public void onClick(View arg0) {
   
    
    int val=Integer.parseInt(textIn.getText().toString());
    
    
    for (int c = 1; c <=val; c++) {
     
    
     LayoutInflater layoutInflater = (LayoutInflater) getBaseContext()
       .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
     final View addView = layoutInflater.inflate(
       R.layout.dynamicrow, null);

       container.addView(addView, 0);
    
    
    }
    
    
   }
  });

  LayoutTransition transition = new LayoutTransition();
  container.setLayoutTransition(transition);

  buttonShowAll = (Button) findViewById(R.id.showall);
  buttonShowAll.setOnClickListener(new OnClickListener() {

   @Override
   public void onClick(View arg0) {

    String showallPrompt = "";

    int childCount = container.getChildCount();
    showallPrompt += "childCount: " + childCount + "\n\n";

    for (int c = 0; c < childCount; c++) {
     View childView = container.getChildAt(c);
     

     EditText etText = (EditText) (childView
       .findViewById(R.id.etname));

     
     EditText etAge = (EditText) (childView
       .findViewById(R.id.etAge));
     
     
     RadioGroup radioSexGroup = (RadioGroup) childView
       .findViewById(R.id.radioSex);
     
     int selectedId = radioSexGroup.getCheckedRadioButtonId();
     
     RadioButton radioSexButton = (RadioButton) childView.findViewById(selectedId);
     
     String childTextViewText="";

     childTextViewText += (String) (etText.getText().toString());
     
     childTextViewText +=(String)(etAge.getText().toString());
     
     
     childTextViewText +=(String)(radioSexButton.getText().toString());
     
     showallPrompt += c + ": " + childTextViewText + "\n";
    }

    Toast.makeText(DynamicFieldsActivity.this, showallPrompt,
      Toast.LENGTH_LONG).show();
   }
  });
 }
}



dynamicfields.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="match_parent"
    android:orientation="vertical"
    android:layout_margin="10dp"
    android:padding="5dp" >

    <RelativeLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content" >

        <Button
            android:id="@+id/add"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignParentRight="true"
            android:text="Add" />

        <EditText
            android:id="@+id/textin"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_alignParentLeft="true"
            android:layout_toLeftOf="@id/add"
            android:inputType="number" />
    </RelativeLayout>

    <Button
        android:id="@+id/showall"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="Show Data in Fieldsl" />

    <LinearLayout
        android:id="@+id/container"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="vertical"
        >
    </LinearLayout>

</LinearLayout>


dynamicrow.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:layout_margin="5dp"
    android:orientation="horizontal"
    android:padding="3dp" 
    >

    <EditText
        android:id="@+id/etname"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_weight="3"
        android:hint="Name"
        android:inputType="textPersonName" >

        <requestFocus />
    </EditText>

    <EditText
        android:id="@+id/etAge"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_weight="1"
        android:ems="10"
        android:hint="Age"
        android:inputType="number" >
    </EditText>

    <RadioGroup
        android:id="@+id/radioSex"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:orientation="horizontal" 
        android:paddingTop="5dp">

        <RadioButton
            android:id="@+id/radioMale"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:checked="true"
            android:text="M" 
            />

        <RadioButton
            android:id="@+id/radioFemale"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="F"
          />
    </RadioGroup>

</LinearLayout>







ScreenShots