TableLayout positions its children into rows and columns. TableLayout containers do not display border lines for their rows, columns, or cells. The table will have as many columns as the row with the most cells. A table can leave cells empty. Cells can span multiple columns, as they can in HTML. You can span columns by using the span field in the TableRow.LayoutParams class.
Note: Cells cannot span multiple rows.
TableRow objects are the child views of a TableLayout (each TableRow defines a single row in the table). Each row has zero or more cells, each of which is defined by any kind of other View. So, the cells of a row may be composed of a variety of View objects, like ImageView or TextView objects. A cell may also be a ViewGroup object (for example, you can nest another TableLayout as a cell).
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent" >
<TableLayout
android:layout_width="match_parent"
android:layout_height="wrap_content">
<TableRow
android:layout_width="wrap_content"
android:layout_height="wrap_content">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="@drawable/border"
android:text="S.No"
android:padding="10dp"/>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="@drawable/border"
android:text="Name"
android:padding="10dp"/>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="@drawable/border"
android:text="Mobile"
android:padding="10dp"/>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="@drawable/border"
android:text="EMail"
android:padding="10dp"/>
</TableRow>
<TableRow
android:layout_width="wrap_content"
android:layout_height="wrap_content">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="1"
android:padding="10dp"
android:background="@drawable/border"/>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="AAA"
android:padding="10dp"
android:background="@drawable/border"/>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="456"
android:padding="10dp"
android:background="@drawable/border"/>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="aa@gmail.com"
android:padding="10dp"
android:background="@drawable/border"/>
</TableRow>
<TableRow
android:layout_width="wrap_content"
android:layout_height="wrap_content">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="2"
android:padding="10dp"
android:background="@drawable/border"/>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="aabbbbgchgcchh"
android:padding="10dp"
android:background="@drawable/border"/>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="8888"
android:padding="10dp"
android:background="@drawable/border"/>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Ebbb@gmail.com"
android:padding="10dp"
android:background="@drawable/border"/>
</TableRow>
</TableLayout>
</LinearLayout>
For Table layout if you want borders need to implement below code and apply as a background for each widget
In drawabale folder create one xml with some name with below code
<?xml version="1.0" encoding="utf-8"?>
<shape
xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle">
<stroke android:color="#000"
android:width="1dp"></stroke>
</shape>