以编程方式在TableRow中设置TextView重力

时间:2015-01-12 19:31:49

标签: android android-tablelayout gravity

我知道这已被问过几次了,但似乎无法让它在我的情况下正常工作。我试图让最后一列在以编程方式生成的表中对齐。我知道我需要将LayoutParams应用于行和所有内部子项,并且我知道我需要将Gravity设置为TextView,而不是行,但我已经尝试了所有可以想到的排列而不能似乎让最后一列正确对齐。

这是我的XML布局:

<!--Open Hours-->
<LinearLayout
   android:id="@+id/llOpenHourDetail"
   android:layout_width="match_parent"
   android:layout_height="wrap_content"
   android:layout_below="@id/llWebsiteDetail"
   android:paddingBottom="10dp"
   android:visibility="gone"
   android:weightSum="4">

   <TextView
       android:id="@+id/tvOpenHourDetailIcon"
       android:layout_width="0dp"
       android:layout_height="wrap_content"
       android:layout_weight="1"
       android:gravity="center"
       android:text="@string/fa_clock"
       android:textColor="@color/cp_blue" />

   <TableLayout
       android:id="@+id/tlOpenHoursDetail"
       android:layout_width="0dp"
       android:layout_height="wrap_content"
       android:layout_weight="3" />
</LinearLayout>

然后在我的活动中,我在循环中有以下代码

String currentPeriod = formattedOpen.format(open.getTime()) + " - " +
    formattedClose.format(close.getTime());

TableRow.LayoutParams params = new TableRow.LayoutParams(
    TableRow.LayoutParams.MATCH_PARENT,
    TableRow.LayoutParams.MATCH_PARENT );

TableRow tableRow = new TableRow(getBaseContext());
tableRow.setLayoutParams(params);

TextView tvDayOfWeek = new TextView(getBaseContext());
tvDayOfWeek.setText(open.getDisplayName(
    Calendar.DAY_OF_WEEK, Calendar.LONG, Locale.getDefault()));
tvDayOfWeek.setTextColor(getResources().getColor(R.color.black));
tvDayOfWeek.setLayoutParams(params);
tableRow.addView(tvDayOfWeek);

TextView tvPeriodHours = new TextView(getBaseContext());

tvPeriodHours.setText(currentPeriod);
tvPeriodHours.setTextColor(getResources().getColor(R.color.black));
tvPeriodHours.setGravity(Gravity.RIGHT);
tvPeriodHours.setLayoutParams(params);
tableRow.addView(tvPeriodHours);

tlOpenHoursDetail.addView(tableRow);

2 个答案:

答案 0 :(得分:1)

要使setGravity()生效,您必须先修改TextView的宽度字段,如下所示:

android:layout_width="fill_parent"

现在您应该可以致电:

tvPeriodHours.setGravity(Gravity.RIGHT)

答案 1 :(得分:0)

我认为有两种方法可以做到这一点。

  1. 如果您的TableLayout的宽度不是基于它的内容(例如,如果使用android:stretchColumns设置列宽度),您可以将TextView宽度设置为match_parent然后分配重力在TextView上使用textView.setGravity(Gravity.END)

  2. 如果您的TextView宽度小于TableLayout单元格的边界,则可以使用tableRow.setGravity(Gravity.END)调用TableRow上的重力。

  3. 我有一个TableLayout,我的TextViews填充单元格的宽度,但不是高度,所以我正在使用:

    textView.setGravity(Gravity.CENTER);
    tableRow.setGravity(Gravity.CENTER_VERTICAL);
    

    将我的文字放在单元格的正中央。

    如果它对任何人都有帮助,我花了很多时间试图将TextView对齐到单元格的底部,但似乎没有任何效果,包括tableRow.setGravity(Gravity.CENTER_VERTICAL),不知道为什么但是我放弃了并且在中心很好。