androidandroid-layoutlayout-gravityandroid-gravity

How can I move the first column on the right side without using gravity property?


At the table I tried to move the red columns from the right side to the left side with the possibility of rotation.

I tried using the android:gravity="right", but it did without results.

How can I move the green column to the far right side and move the other columns to the left without problems.

Here's a screenshot

My layout:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:gravity="right"
    android:id="@+id/fillable_area">
    <TableLayout
         android:gravity="right"
        android:id="@+id/table_header"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"/>
    <ScrollView
        android:layout_width="fill_parent"
        android:layout_height="wrap_content">

        <LinearLayout android:orientation="horizontal"
            android:layout_width="fill_parent"
            android:layout_height="fill_parent"
            android:gravity="right"
            >
             <TableLayout
                    android:gravity="right"
                    android:id="@+id/scrollable_part2"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"/>
             <HorizontalScrollView
             android:gravity="left"
             android:id="@+id/scroller"
             android:layout_width="wrap_content"
             android:layout_height="wrap_content">
                <TableLayout
                    android:gravity="left"
                    android:id="@+id/scrollable_part"
                    android:layout_width="fill_parent"
                    android:layout_height="fill_parent"/>
            </HorizontalScrollView>
        </LinearLayout>
    </ScrollView>
</LinearLayout>

My code:

package com.examp.swap_items;
import java.util.ArrayList;

import android.R.layout;
import android.app.Activity;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Button;
import android.widget.HorizontalScrollView;
import android.widget.TableLayout;
import android.widget.TableRow;
import android.widget.TextView;
import android.app.Activity;
import android.graphics.Color;
import android.os.Bundle;
import android.view.Gravity;
import android.widget.TableLayout;
import android.widget.TableRow;
import android.widget.TableRow.LayoutParams;
import android.widget.TextView;
import android.app.Activity;

public class MainActivity extends Activity {
    private boolean showSummaries;

    private TableLayout summaryTable;
    private TableLayout frozenTable;
    private TableLayout contentTable;
    private Button backButton ;
    private HorizontalScrollView hor;
    private TextView recyclableTextView;


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
           setContentView(R.layout.activity_main);
           TableRow.LayoutParams wrapWrapTableRowParams = new TableRow.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);
            int[] fixedColumnWidths = new int[]{20, 20,20, 20, 20};
            int[] scrollableColumnWidths = new int[]{20, 20, 20, 30, 30};
            int fixedRowHeight = 50;
            int fixedHeaderHeight = 60;
            TableRow row = new TableRow(this);
            //header (fixed vertically)
            TableLayout header=(TableLayout)findViewById(R.id.table_header);
            row.setLayoutParams(wrapWrapTableRowParams);
            row.setGravity(Gravity.CENTER);
            row.setBackgroundColor(Color.WHITE);
            row.addView(makeTableRowWithText("col1", fixedColumnWidths[0],fixedHeaderHeight));
            row.addView(makeTableRowWithText("col2", fixedColumnWidths[1],fixedHeaderHeight));
            row.addView(makeTableRowWithText("col3", fixedColumnWidths[2],fixedHeaderHeight));
            row.addView(makeTableRowWithText("col4", fixedColumnWidths[3],fixedHeaderHeight));
            row.addView(makeTableRowWithText("col5", fixedColumnWidths[4],fixedHeaderHeight));
            header.addView(row);


            hor = (HorizontalScrollView)findViewById(R.id.scroller);
            hor.postDelayed(new Runnable(){
                public void run() {
                    hor.fullScroll(HorizontalScrollView.FOCUS_RIGHT);
                }
            }, 1L);



           TableLayout fixedColumn = (TableLayout) findViewById(R.id.scrollable_part2);
            //rest of the table (within a scroll view)
            TableLayout scrollablePart = (TableLayout)findViewById(R.id.scrollable_part);
            for(int i = 0; i < 10; i++) {
                TextView fixedView = makeTableRowWithText("fixed number " + i, scrollableColumnWidths[0], fixedRowHeight);
                fixedView.setBackgroundColor(Color.GREEN);
                fixedView.setGravity(Gravity.RIGHT);
                fixedColumn.addView(fixedView);
                row = new TableRow(this);
                row.setLayoutParams(wrapWrapTableRowParams);
                row.setGravity(Gravity.LEFT);
                row.setBackgroundColor(Color.RED);
                row.addView(makeTableRowWithText("scroll 1", scrollableColumnWidths[1], fixedRowHeight));
                row.addView(makeTableRowWithText("scroll 2", scrollableColumnWidths[1], fixedRowHeight));
                row.addView(makeTableRowWithText("scroll 3", scrollableColumnWidths[2], fixedRowHeight));
                row.addView(makeTableRowWithText("scroll 4", scrollableColumnWidths[3], fixedRowHeight));
                row.addView(makeTableRowWithText("scroll 5", scrollableColumnWidths[4], fixedRowHeight));
                scrollablePart.addView(row);
            }


    }




     public TextView makeTableRowWithText(String text, int widthInPercentOfScreenWidth, int fixedHeightInPixels) {
            int screenWidth = getResources().getDisplayMetrics().widthPixels;
            recyclableTextView = new TextView(this);
            recyclableTextView.setText(text);
            recyclableTextView.setTextColor(Color.BLACK);
            recyclableTextView.setTextSize(20);
            recyclableTextView.setWidth(widthInPercentOfScreenWidth * screenWidth / 100);
            recyclableTextView.setHeight(fixedHeightInPixels);
            return recyclableTextView;
        }









    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.main, menu);
        return true;
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        // Handle action bar item clicks here. The action bar will
        // automatically handle clicks on the Home/Up button, so long
        // as you specify a parent activity in AndroidManifest.xml.
        int id = item.getItemId();
        if (id == R.id.action_settings) {
            return true;
        }
        return super.onOptionsItemSelected(item);
    }
}

Solution

  • Gravity is not the solution to this problem, the android:gravity property moves the contents of the element, which is why you can see that all of your 'fixed' texts are aligned to the right hand side of the column.

    The order of children in a LinearLayout is solely determined by the order they appear in the layout xml. In a vertical layout they go in order from top to bottom and in a horizontal layout they go in order from left to right. So in your case, if you want to change the order of those columns, you just need to put them in the correct order in your layout:

        <LinearLayout android:orientation="horizontal"
            android:layout_width="match_parent"
            android:layout_height="match_parent">
             <HorizontalScrollView
             android:id="@+id/scroller"
             android:layout_width="0dp"
             android:layout_weight="1"
             android:layout_height="wrap_content">
                <TableLayout
                    android:id="@+id/scrollable_part"
                    android:layout_width="fill_parent"
                    android:layout_height="fill_parent"/>
             </HorizontalScrollView>
             <TableLayout
                    android:id="@+id/scrollable_part2"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"/>
        </LinearLayout>