Skip to main content

Programmatically Position items in activity. NO XML



I have an Activity that has all the display elements added dynamically. Theres no xml for the acvtivity at all.





The Activity consists of the following controls:





  1. RelativeLayout (Layout object that all the child views sit in)



  2. TextView (Title for the page, sits at top of the RelativeLayout)



  3. ScrollView (Scrollable area that holds all the data controls)



  4. LinearLayout (Layout object to hold the activity buttons)







I want to know how it is possible to define that the ScrollView sits below the Title TextView and above the LinearLayout button holder where the LinearLayout is set to the Activity Page bottom





I have tried using RelativeLayout.LayoutParams to set up rules but cannot seem to understand the way to do it. Any help or links to tutorials would be apreciated





I have included my Code to see if someone can help







// declare the items for display

RelativeLayout baseLayout = new RelativeLayout(this);

// add the customer name and number field.

// NOTE: We will always require this widget regardless of dialog design fields

tvCustomerNameNumber = new TextView(this);

tvCustomerNameNumber.setTextSize(20);

tvCustomerNameNumber.setText("Customer Name & Number");



// build up the linear layout of controls

LinearLayout ll = new LinearLayout(this);

ll.setOrientation(LinearLayout.VERTICAL);



// Scroll view.

// NOTE: We will always need this widget to enable us to scroll the page

// if too many items are added for the display size

ScrollView sv = new ScrollView(this);

sv.addView(ll);



// buttons

LinearLayout buttons = new LinearLayout(this);

buttons.setOrientation(LinearLayout.HORIZONTAL);



// button edit

Button edit = new Button(this);

edit.setId(EDIT_BUTTON_ID);



// button save

Button save = new Button(this);

save.setId(SAVE_BUTTON_ID);



// button cancel

Button cancel = new Button(this);

cancel.setId(CANCEL_BUTTON_ID);



// add each button to the button layout

buttons.addView(edit);

buttons.addView(save);

buttons.addView(cancel);



// Scroll view Layout parameters

RelativeLayout.LayoutParams scrollParams = new RelativeLayout.LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.FILL_PARENT);

scrollParams.addRule(RelativeLayout.BELOW, tvCustomerNameNumber.getId());

scrollParams.addRule(RelativeLayout.ABOVE, buttons.getId());



// buttons Layout parameters

RelativeLayout.LayoutParams buttonParams = new RelativeLayout.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);

buttonParams.addRule(RelativeLayout.ALIGN_PARENT_BOTTOM);

buttonParams.addRule(RelativeLayout.BELOW, sv.getId());



// add the customer name number field to the base layout

baseLayout.addView(tvCustomerNameNumber);

// add the scroll view to the base layout

baseLayout.addView(sv); //, scrollParams);

// add the buttons to the base layout

baseLayout.addView(buttons, buttonParams);



// set the content view

this.setContentView(baseLayout);




Comments

  1. Deva has already answered your question, but it sounds to me like you could define an xml layout as you have described above, inflate it and populate it dynamically programmatically... perhaps the layout would initially contain an empty LinearLayout, and/or no text set for the TextView, maybe even set everything to android:visibility="gone" and show it when you have added/updated all your views?

    ReplyDelete
  2. See the links below which might help you achieve this :

    Programmatically adding items to a relative layout

    How to programmatically add multiple LinearLayouts into one view and then add to ViewFlipper?

    ReplyDelete

Post a Comment

Popular posts from this blog

Wildcards in a hosts file

I want to setup my local development machine so that any requests for *.local are redirected to localhost . The idea is that as I develop multiple sites, I can just add vhosts to Apache called site1.local , site2.local etc, and have them all resolve to localhost , while Apache serves a different site accordingly.