【发布时间】:2015-05-03 10:19:42
【问题描述】:
我正在开发一个 Android 项目,但布局有问题。
我有一个JSONArray,我循环膨胀一个新的 TableRow 并在循环内循环 JSON 数组中的另一个数组以用字段填充它。通过扩展 XML 文件并将此视图添加到表行来填充字段。但是,目前该行中没有任何显示。
下面是我的 TableRow XML 文件:
<?xml version="1.0" encoding="utf-8"?>
<TableRow xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@color/white"/>
下面是我的 TextView XML:
<?xml version="1.0" encoding="utf-8"?>
<TextView xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:textColor="@color/black"
android:padding="5dp"/>
下面是我如何填充 TableRow 和 TextView:
for (int i = 0; i < result.length(); i++) {
final TableRow tr = (TableRow) getLayoutInflater(getArguments()).inflate(R.layout.result_table_row_light_theme, resultTable, false);
if (i == 0) {
tr.setBackgroundColor(getResources().getColor(R.color.appPrimaryColour));
} else if (i % 2 == 0) {
if (settings.getInt(Defines.SharedPreferenceSettings.APPLICATION_THEME,
com.BoardiesITSolutions.Library.R.style.LibAppTheme) == com.BoardiesITSolutions.Library.R.style.LibAppTheme) {
tr.setBackgroundColor(getResources().getColor(R.color.resultRowLightThemeAlternateRow));
}
}
JSONArray array = result.getJSONArray(i);
for (int j = 0; j < array.length(); j++) {
final TextView textView;
textView = (TextView) getLayoutInflater(getArguments()).inflate(R.layout.result_textview, tr, false);
textView.setText(array.getString(j));
if (i == 0) {
textView.setTypeface(null, Typeface.BOLD);
textView.setGravity(Gravity.CENTER_HORIZONTAL);
}
getActivity().runOnUiThread(new Runnable() {
@Override
public void run() {
tr.addView(textView);
}
});
}
getActivity().runOnUiThread(new Runnable() {
@Override
public void run() {
resultTable.addView(tr);
}
});
}
如果我更改我的 TextView XML 文件,使 layout_width 为 wrap_parent 而不是 0dp,那么所有内容都会显示在屏幕上。
但是,当 textview 为 0dp 且 layout_weight 为 1 时,则不会显示任何内容,但是我希望每个文本视图均匀分布在屏幕宽度上以填充空间。
我可能应该提到的是,不知道是否有区别,TableView 位于 HorizontalScrollView 中。行应该适合屏幕的宽度,如果数据小于屏幕,但如果行不适合,那么视图将是水平滚动的。
更新 1
以下是承载 TableLayout 的 XML:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical">
<ScrollView
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:scrollbars="horizontal">
<LinearLayout
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical">
<HorizontalScrollView
android:layout_width="fill_parent"
android:layout_height="fill_parent">
<TableLayout android:id="@+id/resultTable"
android:stretchColumns="*"
android:layout_width="fill_parent"
android:layout_height="wrap_content">
</TableLayout>
</HorizontalScrollView>
</LinearLayout>
</ScrollView>
</RelativeLayout>
【问题讨论】:
-
每个文本视图上的 0dp 表示没有宽度,因此不会显示任何内容。
-
但通常如果你有 layout_weight 它会填满可用空间。由于它们的权重均为 1,因此它们应该在屏幕上均匀分布。当所有文本视图作为 XML 的一部分添加在一起而不是以编程方式创建时就是这种情况
-
嗯,没错,我错过了。 TableLayout 的 XML 是什么?确保其宽度未设置为 wrap_content,因为 layout_weight 仅适用于 TableRow 中的额外空间。
-
TableLayout 和 Horizontal Scroll View 设置为 fill_parent。我已将 TableLayout 的 XML 添加到我的问题中,以防万一
-
在滚动方向调用 match_parent 对滚动视图的子视图不起作用。