1

I have an activity in which I am having a table layout. The table is getting dynamically populated through the activity.

As the table is horizontally very long, so to ease user handling, I have implemented horizontal scrolling to the table after the S.No. column. The S.No. column should not be exposed to horizontal scrolling ever and that is achieved.

The whole table is vertically scrollable, what I want is to freeze the header row of the table to vertical scrolling, but horizontal scrolling should be present in the header as well as all the rows after S.No. column.

This is the activity code:

    public class ReportListActivity extends Activity {

    TableLayout srno_table;
    TableRow srno_report_tr_data;

    TableLayout report_table;
    TableRow report_tr_data;




    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_report_list);



        srno_table=(TableLayout) findViewById(R.id.srno_table);

        //---------------Serial no Table Header-----------------------------------------------
        TableRow srno_tr_head = new TableRow(this);
        srno_tr_head.setId(10);
        srno_tr_head.setBackgroundColor(Color.GRAY);
        srno_tr_head.setLayoutParams(new LayoutParams(
        LayoutParams.FILL_PARENT,
        LayoutParams.WRAP_CONTENT));


        TextView label_sr_no = new TextView(this);
        label_sr_no.setId(20);
        label_sr_no.setText("S.No.");
        label_sr_no.setTextColor(Color.WHITE);
        label_sr_no.setPadding(5,5,5,5);
        srno_tr_head.addView(label_sr_no);// add the column to the table row here
        label_sr_no.setTextSize(20);    



        srno_table.addView(srno_tr_head, new TableLayout.LayoutParams(
                LayoutParams.FILL_PARENT,
                LayoutParams.WRAP_CONTENT));

      //---------------Serial no Table Header-----------------------------------------------

        report_table=(TableLayout) findViewById(R.id.report_table);

        //---------------report Table Header-----------------------------------------------
        TableRow report_tr_head = new TableRow(this);
        report_tr_head.setId(10);
        report_tr_head.setBackgroundColor(Color.GRAY);
        report_tr_head.setLayoutParams(new LayoutParams(
        LayoutParams.FILL_PARENT,
        LayoutParams.WRAP_CONTENT));


        TextView label_test_name = new TextView(this);
        label_test_name.setId(20);
        label_test_name.setText("Test Name");
        label_test_name.setTextColor(Color.WHITE);
        label_test_name.setPadding(5,5,5,5);
        report_tr_head.addView(label_test_name);// add the column to the table row here
        label_test_name.setTextSize(20);    

        TextView label_test_date = new TextView(this);
        label_test_date.setId(21);// define id that must be unique
        label_test_date.setText("Date"); // set the text for the header 
        label_test_date.setTextColor(Color.WHITE); // set the color
        label_test_date.setPadding(5,5,5,5); // set the padding (if required)
        report_tr_head.addView(label_test_date); // add the column to the table row here
        label_test_date.setTextSize(20);

        TextView label_ro = new TextView(this);
        label_ro.setId(21);// define id that must be unique
        label_ro.setText("R.O."); // set the text for the header 
        label_ro.setTextColor(Color.WHITE); // set the color
        label_ro.setPadding(5,5,5,5); // set the padding (if required)
        report_tr_head.addView(label_ro); // add the column to the table row here
        label_ro.setTextSize(20);

        TextView label_wo = new TextView(this);
        label_wo.setId(21);// define id that must be unique
        label_wo.setText("W.O."); // set the text for the header 
        label_wo.setTextColor(Color.WHITE); // set the color
        label_wo.setPadding(5,5,5,5); // set the padding (if required)
        report_tr_head.addView(label_wo); // add the column to the table row here
        label_wo.setTextSize(20);

        TextView label_lo = new TextView(this);
        label_lo.setId(21);// define id that must be unique
        label_lo.setText("L.O."); // set the text for the header 
        label_lo.setTextColor(Color.WHITE); // set the color
        label_lo.setPadding(5,5,5,5); // set the padding (if required)
        report_tr_head.addView(label_lo); // add the column to the table row here
        label_lo.setTextSize(20);

        TextView label_max = new TextView(this);
        label_max.setId(21);// define id that must be unique
        label_max.setText("Max."); // set the text for the header 
        label_max.setTextColor(Color.WHITE); // set the color
        label_max.setPadding(5,5,5,5); // set the padding (if required)
        report_tr_head.addView(label_max); // add the column to the table row here
        label_max.setTextSize(20);

        TextView label_tm = new TextView(this);
        label_tm.setId(21);// define id that must be unique
        label_tm.setText("T.M."); // set the text for the header 
        label_tm.setTextColor(Color.WHITE); // set the color
        label_tm.setPadding(5,5,5,5); // set the padding (if required)
        report_tr_head.addView(label_tm); // add the column to the table row here
        label_tm.setTextSize(20);

        TextView label_rank = new TextView(this);
        label_rank.setId(21);// define id that must be unique
        label_rank.setText("Rank"); // set the text for the header 
        label_rank.setTextColor(Color.WHITE); // set the color
        label_rank.setPadding(5,5,5,5); // set the padding (if required)
        report_tr_head.addView(label_rank); // add the column to the table row here
        label_rank.setTextSize(20);


        report_table.addView(report_tr_head, new TableLayout.LayoutParams(
                LayoutParams.FILL_PARENT,
                LayoutParams.WRAP_CONTENT));

      //---------------Serial no Table Header-----------------------------------------------



        //--------------------Sr No Table Body---------------------------
        for (int i=1; i<=10; i++)
        {
            srno_report_tr_data = new TableRow(this);
            srno_report_tr_data.setId(10);
            srno_report_tr_data.setBackgroundColor(Color.TRANSPARENT);
            srno_report_tr_data.setLayoutParams(new LayoutParams(
            LayoutParams.FILL_PARENT,
            LayoutParams.WRAP_CONTENT));


            final TextView sr_no = new TextView(this);
            sr_no.setId(20);
            sr_no.setText(""+i);
            sr_no.setTextColor(Color.BLACK);
            sr_no.setPadding(5,5,5,5);
            srno_report_tr_data.addView(sr_no);// add the column to the table row here





            srno_table.addView(srno_report_tr_data, new TableLayout.LayoutParams(
                    LayoutParams.FILL_PARENT,
                    LayoutParams.WRAP_CONTENT));


            //----------------------On click table row---------------------------------------

            srno_report_tr_data.setOnClickListener(new OnClickListener() {

                @Override
                public void onClick(View v) {
                    // TODO Auto-generated method stub


//                  Toast.makeText(getApplicationContext(), test_name.getText().toString(), Toast.LENGTH_LONG).show();
//                  Toast.makeText(getApplicationContext(), test_date.getText().toString(), Toast.LENGTH_LONG).show();
//                  Toast.makeText(getApplicationContext(), sr_no.getText().toString(), Toast.LENGTH_LONG).show();
                    //Toast.makeText(getApplicationContext(), test_exam_set.getText().toString(), Toast.LENGTH_LONG).show();

//                  Intent intent = new Intent(ReportListActivity.this, ReportListDetailsActivity.class);
//                  finish();
//                  ReportListActivity.this.startActivity(intent);
                }
            });
            //----------------------On click table row---------------------------------------



        }

      //--------------------Sr No Table Body Table Body---------------------------





        //=================Report table body============================


        for (int i=1; i<=10; i++)
        {
            report_tr_data=new TableRow(this);
            report_tr_data.setId(10);
            report_tr_data.setBackgroundColor(Color.TRANSPARENT);
            report_tr_data.setLayoutParams(new LayoutParams(
            LayoutParams.FILL_PARENT,
            LayoutParams.WRAP_CONTENT));

            final TextView test_name = new TextView(this);
            test_name.setId(20);
            test_name.setText("Speed Test 60(min) Demo-ST-01");
            test_name.setTextColor(Color.BLACK);
            test_name.setPadding(5,5,5,5);
            report_tr_data.addView(test_name);// add the column to the table row here

            final TextView test_date = new TextView(this);
            test_date.setId(21);// define id that must be unique
            test_date.setText("12 Mar 2013"); // set the text for the header 
            test_date.setTextColor(Color.BLACK); // set the color
            test_date.setPadding(5,5,5,5); // set the padding (if required)
            report_tr_data.addView(test_date); // add the column to the table row here

            final TextView test_ro = new TextView(this);
            test_ro.setId(21);// define id that must be unique
            test_ro.setText("2"); // set the text for the header 
            test_ro.setTextColor(Color.BLACK); // set the color
            test_ro.setPadding(5,5,5,5); // set the padding (if required)
            report_tr_data.addView(test_ro); // add the column to the table row here

            final TextView test_wo = new TextView(this);
            test_wo.setId(21);// define id that must be unique
            test_wo.setText("3"); // set the text for the header 
            test_wo.setTextColor(Color.BLACK); // set the color
            test_wo.setPadding(5,5,5,5); // set the padding (if required)
            report_tr_data.addView(test_wo); // add the column to the table row here

            final TextView test_lo = new TextView(this);
            test_lo.setId(21);// define id that must be unique
            test_lo.setText("85"); // set the text for the header 
            test_lo.setTextColor(Color.BLACK); // set the color
            test_lo.setPadding(5,5,5,5); // set the padding (if required)
            report_tr_data.addView(test_lo); // add the column to the table row here

            final TextView test_max = new TextView(this);
            test_max.setId(21);// define id that must be unique
            test_max.setText("101"); // set the text for the header 
            test_max.setTextColor(Color.BLACK); // set the color
            test_max.setPadding(5,5,5,5); // set the padding (if required)
            report_tr_data.addView(test_max); // add the column to the table row here

            final TextView test_tm = new TextView(this);
            test_tm.setId(21);// define id that must be unique
            test_tm.setText("-1.5"); // set the text for the header 
            test_tm.setTextColor(Color.BLACK); // set the color
            test_tm.setPadding(5,5,5,5); // set the padding (if required)
            report_tr_data.addView(test_tm); // add the column to the table row here

            final TextView test_rank = new TextView(this);
            test_rank.setId(21);// define id that must be unique
            test_rank.setText("5810"); // set the text for the header 
            test_rank.setTextColor(Color.BLACK); // set the color
            test_rank.setPadding(5,5,5,5); // set the padding (if required)
            report_tr_data.addView(test_rank); // add the column to the table row here

            final TextView test_exam_set = new TextView(this);
            test_exam_set.setId(21);// define id that must be unique
            test_exam_set.setText("123456"); // set the text for the header
            test_exam_set.setTextSize((float) 0.01);
            test_exam_set.setTextColor(Color.TRANSPARENT); // set the color
            test_exam_set.setPadding(5,5,5,5); // set the padding (if required)
            report_tr_data.addView(test_exam_set); // add the column to the table row here

            report_table.addView(report_tr_data, new TableLayout.LayoutParams(
                     LayoutParams.FILL_PARENT,
                     LayoutParams.WRAP_CONTENT));



//----------------------On click table row---------------------------------------

            report_tr_data.setOnClickListener(new OnClickListener() {

                @Override
                public void onClick(View v) {
                    // TODO Auto-generated method stub


                    Toast.makeText(getApplicationContext(), test_name.getText().toString(), Toast.LENGTH_LONG).show();
//                  Toast.makeText(getApplicationContext(), test_date.getText().toString(), Toast.LENGTH_LONG).show();
//                  Toast.makeText(getApplicationContext(), sr_no.getText().toString(), Toast.LENGTH_LONG).show();
                    Toast.makeText(getApplicationContext(), test_exam_set.getText().toString(), Toast.LENGTH_LONG).show();

//                  Intent intent = new Intent(ReportListActivity.this, ReportListDetailsActivity.class);
//                  finish();
//                  ReportListActivity.this.startActivity(intent);
                }
            });
            //----------------------On click table row---------------------------------------

        }


      //=================Report table body============================





    }
    //onclick device back button
    @Override
    public void onBackPressed() {
        // do something on back.

        Intent intent = new Intent(ReportListActivity.this, TakeTestActivity.class);
        finish();
        ReportListActivity.this.startActivity(intent);
        return;
    }


  //method to show toast message
        public void makeAToast(String str) {
            //yet to implement
            Toast toast = Toast.makeText(this,str, Toast.LENGTH_SHORT);
            toast.setGravity(Gravity.CENTER, 0, 0);
            toast.show();
        }




         //saving A VALUE in preference variable
        public void saveInPreference(String name, String content)
        {
            SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(this);
             SharedPreferences.Editor editor = preferences.edit();
             editor.putString(name,content);
             editor.commit();
        }

        //getting content from preferences
        public String getFromPreference(String variable_name)
        {
            String preference_return;
            SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(this);
            preference_return = preferences.getString(variable_name,"");

            return preference_return;
        }


}

The layout file:

<RelativeLayout 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:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    tools:context=".ReportListActivity" >

    <ScrollView
        android:id="@+id/scrollView1"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:layout_alignParentLeft="true"
        android:layout_alignParentTop="true" >

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

            <RelativeLayout
                android:id="@+id/relativeLayout1"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_alignParentLeft="true"
                android:layout_centerVertical="true" >

                <TableLayout
                    android:id="@+id/srno_table"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:layout_centerHorizontal="true"
                    android:layout_centerVertical="true" >
                </TableLayout>
            </RelativeLayout>

            <RelativeLayout
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_alignParentTop="true"
                android:layout_toRightOf="@+id/relativeLayout1" >
                <HorizontalScrollView
                android:id="@+id/horizontalScrollView1"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_alignParentTop="true"
                android:layout_toRightOf="@+id/relativeLayout1" >

                    <TableLayout
                        android:id="@+id/report_table"
                        android:layout_width="match_parent"
                        android:layout_height="match_parent" >


                    </TableLayout>

            </HorizontalScrollView>
            </RelativeLayout>



        </RelativeLayout>

    </ScrollView>

</RelativeLayout>

P.S.: All changes would be implemented in the existing code.

You can also refer this for clarification

Thanks in advance!

Community
  • 1
  • 1
kittu88
  • 2,451
  • 5
  • 40
  • 80

0 Answers0