テーブルやリストに枠線を付ける方法を説明しています。
本記事で説明する方法はdrawableリソースを用いたもので、テーブルやリストに限らず各種コンポーネントに応用できます。
実装例
レイアウト
shape_outer_frame.xml(drawableリソース)
背景色は白、枠線は黒のshapeリソースを作成します。
<shape xmlns:android="http://schemas.android.com/apk/res/android">
<!-- 背景:白 -->
<solid android:color="#ffffff" />
<!-- 枠線:黒 -->
<stroke
android:width="1dp"
android:color="#000000"/>
</shape>
activity_main.xml(layoutリソース)
メインアクティビティのレイアウトです。
backgroundに作成しておいたshape_outer_frameリソースファイルを指定します。shape_outer_frameは”背景:白、枠線:黒”ですので、テーブルに黒い枠線が描かれるようになります。
TableLayout以外でも、同じようにbackgroundを指定すれば枠線を付けることが可能です。例えば、テーブルのセル単位で枠線を描きたい場合は、TableRowのbackgroundを指定します。ただし、枠線が重複して描かれると、線が太く見えてしまいます。よって、線が完全に重なるように調整したり、表現方法を変える等の対応が必要となります。
<TableLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginVertical="16dp" android:layout_marginStart="16dp" android:layout_marginEnd="16dp" android:background="@drawable/shape_outer_frame"> <!-- 省略 --> </TableLayout>
実行結果
TableLayoutに枠線を付けた場合
テーブルの外側に枠線が描かれています。

TableRowに枠線を付けた場合
行の外側に枠線が描かれているため、テーブルの内側・外側に枠線が描かれるようになります。内側の横線は、上辺・下辺の線が限りなく近くに存在するので、他の線よりも太く見えています。

TextViewに枠線を付けた場合
テキストの外側に枠線が描かれています。こちらも内側の横線は、上辺・下辺の線が限りなく近くに存在するので、他の線よりも太く見えています。

まとめ
テーブルやリストに枠線を付ける方法を説明しました。
drawableリソースを用いれば実現可能で、テーブルやリストに限らず他のコンポーネントにも応用できます。ただし、線が重複して描かれると太く見えてしまうので、線が完全に重なるように調整したり、表現方法を変える等の対応が必要となります。