Saturday, March 10, 2012

Android GUI with Header+Scrollable Content+Footer

 HeaderContentFooterGui.java


package net.pocketmagic.android.HeaderContentFooterGUI;

import android.app.Activity;
import android.graphics.Color;
import android.graphics.Typeface;
import android.os.Bundle;
import android.view.Gravity;
import android.view.Menu;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup.LayoutParams;
import android.view.Window;
import android.widget.Button;
import android.widget.LinearLayout;
import android.widget.RelativeLayout;
import android.widget.ScrollView;
import android.widget.TextView;

/* HeaderContentFooterGUI
 *
 * Create a sample GUI with a header bar, scroll-able content and a footer
 *
 * (C) 2011 Radu Motisan, radu.motisan@gmail.com
 * www.pocketmagic.net
 * All rights reserved.
 */

public class HeaderContentFooterGUI extends Activity implements OnClickListener{
   
    final static int        idTopLayout = Menu.FIRST + 100,
                            idBack         = Menu.FIRST + 101,
                            idBotLayout    = Menu.FIRST + 102;
   
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
       
        //Hide titlebar
        requestWindowFeature(Window.FEATURE_NO_TITLE);
       
        //Create our top content holder
        RelativeLayout global_panel = new RelativeLayout (this);
        global_panel.setLayoutParams(new LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.FILL_PARENT));
        global_panel.setGravity(Gravity.FILL);
       
        // +++++++++++++ TOP COMPONENT: the header
        RelativeLayout ibMenu = new RelativeLayout(this);
         ibMenu.setId(idTopLayout);
        ibMenu.setBackgroundDrawable(getResources().getDrawable(R.drawable.line));
         int ibMenuPadding = (int) 6;
         ibMenu.setPadding(ibMenuPadding,ibMenuPadding,ibMenuPadding,ibMenuPadding);
         RelativeLayout.LayoutParams topParams = new RelativeLayout.LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.WRAP_CONTENT);
         topParams.addRule(RelativeLayout.ALIGN_PARENT_TOP);
         global_panel.addView(ibMenu,topParams);
         // textview in ibMenu : card holder
        TextView cTV = new TextView(this);
        cTV.setText("Header");
        cTV.setTextColor(Color.rgb(255,255,255));
        int nTextH =  18;
        cTV.setTextSize(nTextH);
        cTV.setTypeface(Typeface.create("arial", Typeface.BOLD));
        RelativeLayout.LayoutParams lpcTV = new RelativeLayout.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);
        lpcTV.addRule(RelativeLayout.CENTER_IN_PARENT);
        ibMenu.addView(cTV, lpcTV);
        // cancel button in ibMenu
        Button m_bCancel = new Button(this);
        m_bCancel.setId(idBack);
        m_bCancel.setOnClickListener((OnClickListener) this);
        m_bCancel.setText("Cancel");
        nTextH =  12;
        m_bCancel.setTextSize(nTextH);
        m_bCancel.setTypeface(Typeface.create("arial", Typeface.BOLD));
        RelativeLayout.LayoutParams lpbCancel =
            new RelativeLayout.LayoutParams(100,50);//LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);
        lpbCancel.addRule(RelativeLayout.ALIGN_PARENT_LEFT);
        lpbCancel.addRule(RelativeLayout.CENTER_VERTICAL);
        ibMenu.addView(m_bCancel, lpbCancel);

        // +++++++++++++ BOTTOM COMPONENT: the footer
        RelativeLayout ibMenuBot = new RelativeLayout(this);
        ibMenuBot.setId(idBotLayout);
        ibMenuBot.setBackgroundDrawable(getResources().getDrawable(R.drawable.line));
        ibMenuBot.setPadding(ibMenuPadding,ibMenuPadding,ibMenuPadding,ibMenuPadding);
        RelativeLayout.LayoutParams botParams = new RelativeLayout.LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.WRAP_CONTENT);
        botParams.addRule(RelativeLayout.ALIGN_PARENT_BOTTOM);
        global_panel.addView(ibMenuBot,botParams);
        // textview in ibMenu : card holder
        TextView cTVBot = new TextView(this);
        cTVBot.setText("www.pocketmagic.net");
        cTVBot.setTextColor(Color.rgb(179,116,197));
        cTVBot.setTextSize(nTextH);
        cTVBot.setTypeface(Typeface.create("arial", Typeface.NORMAL));
        RelativeLayout.LayoutParams lpcTVBot = new RelativeLayout.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);
        lpcTVBot.addRule(RelativeLayout.CENTER_IN_PARENT);
        ibMenuBot.addView(cTVBot, lpcTVBot);
        
        // +++++++++++++ MIDDLE COMPONENT: all our GUI content
        LinearLayout midLayout = new LinearLayout (this);
        midLayout.setLayoutParams(new LayoutParams(LayoutParams.FILL_PARENT,LayoutParams.FILL_PARENT));
        midLayout.setOrientation(LinearLayout.VERTICAL);
        RelativeLayout.LayoutParams midParams = new RelativeLayout.LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.FILL_PARENT);
        midParams.addRule(RelativeLayout.ABOVE,ibMenuBot.getId());
        midParams.addRule(RelativeLayout.BELOW,ibMenu.getId());
        global_panel.addView(midLayout,midParams );
        //scroll - so our content will be scrollable between the header and the footer
        ScrollView vscroll = new ScrollView(this);
        vscroll.setFillViewport(false);
        midLayout.addView(vscroll);
        //panel in scroll: add all controls/ objects to this layout
        LinearLayout m_panel = new LinearLayout (this);
        m_panel.setLayoutParams(new LayoutParams(LayoutParams.FILL_PARENT,LayoutParams.WRAP_CONTENT));
        m_panel.setOrientation(LinearLayout.VERTICAL);
        vscroll.addView(m_panel);
       
        Button b[] = new Button[10];
        for (int i=0;i<6;i++) {
            b[i] = new Button(this);
            b[i].setLayoutParams(new LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.WRAP_CONTENT));
            b[i].setText("But "+i);
            m_panel.addView(b[i]);
        }



        setContentView(global_panel);
    }

    public void onClick(View arg0) {
        // TODO Auto-generated method stub
        int id = arg0.getId();
       
        // If cancel is pressed, close our app
        if (id == idBack) finish();
       
    }
}



no need to write respective .xml file

No comments:

Post a Comment