Try to define the layout params for each row:
TableRow row = new TableRow(getActivity());
TableRow.LayoutParams lp = new TableRow.LayoutParams(0, TableRow.LayoutParams.WRAP_CONTENT, 1.0f);
lp.setMargins(4, 4, 4, 4);
TextView t = new TextView(getActivity());
t.setPadding(10, 10, 10, 10);
t.setText("17:00");
row.addView(t, lp);
t = new TextView(this);
t.setText("Event 1");
t.setPadding(10, 10, 10, 10);
t.setEllipsize(TruncateAt.MARQUEE);
t.setSingleLine(true);
t.setSelected(true);
row.addView(t, lp);
t = new TextView(getActivity());
t.setText("Location 1");
t.setEllipsize(TruncateAt.MARQUEE);
t.setSelected(true);
t.setSingleLine(true);
t.setPadding(10, 10, 10, 10);
row.addView(t, lp);
table.addView(row);
...just as suggestion, the best to achieve this result (especially for many records) would be using a ListView (or ListFragment) with eventually a AsyncLoader + Adapter (with eventually a ViewHolder)