我正在研究一个Android项目,我有一个表格布局。我有表格布局,在表格标题的XML布局文件中有一行。表格的其余部分是根据API的结果动态填充的。
我正在将视图添加到表格布局中,但我正在动态添加的行显示在表格标题上方。
以下是我的XML布局:
auto increment
以下是我填充表格其余部分的方法
<?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">
<include layout="@layout/toolbar" />
<TableLayout android:id="@+id/tblAuthenticatedDevices"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:stretchColumns="1"
android:shrinkColumns="false"
android:layout_margin="10dp"/>
<TableRow
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@color/cardToolbar">
<TextView
android:text="Device Name"
android:layout_width="0dp"
android:layout_weight="1"
android:textStyle="bold"
android:padding="10dp"
android:textColor="@color/white" />
<TextView
android:layout_width="0dp"
android:layout_weight="1"
android:text="Last Logged In"
android:textStyle="bold"
android:padding="10dp"
android:textColor="@color/white" />
<TextView
android:layout_width="0dp"
android:layout_weight="1"
android:text="From"
android:textStyle="bold"
android:padding="10dp"
android:textColor="@color/white"/>
</TableRow>
</LinearLayout>
为了重新迭代,我动态添加到表中的行数据显示在我添加到XML布局的行标题上方。我希望行标题出现,然后在下面会出现我正在添加到表中的行。
答案 0 :(得分:2)
好的,所以我一直在研究TableLayouts,其中总是包含一个标题,基本上,所有这些只是首先通过代码添加TableRow标题,以便它在顶部。所以这就是我为你做的参考。首先,我只为标题做了一个单独的布局。
tr_header.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="match_parent">
<TextView
android:textStyle="bold"
android:id="@+id/tv_device_name"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:gravity="center"
android:text="device name" />
<TextView
android:id="@+id/tv_last_login"
android:textStyle="bold"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:gravity="center"
android:text="last_login" />
<TextView
android:id="@+id/tv_location"
android:layout_width="0dp"
android:textStyle="bold"
android:layout_height="wrap_content"
android:layout_weight="1"
android:gravity="center"
android:text="location" />
</TableRow>
然后在tableLayout所在的活动的布局中,我只是把它保持为空,就像这样......
activity_main.xml中
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context="com.example.aalawi.myapplication.MainActivity">
<TableLayout
android:id="@+id/tblAuthenticatedDevices"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_margin="10dp"
android:shrinkColumns="false"
android:stretchColumns="1" />
</LinearLayout>
然后在代码中,我首先添加标题,然后迭代一些示例数据。另外,我假设你的table_rows也有不同的布局,如你提供的代码中所提到的( 名为table_row_layout ),所以我做了类似的事情。
tl_row.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="match_parent"
android:orientation="horizontal"
android:weightSum="3">
<TextView
android:id="@+id/tv_device_name"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:gravity="center" />
<TextView
android:id="@+id/tv_last_login"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:gravity="center" />
<TextView
android:id="@+id/tv_location"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:gravity="center" />
</TableRow>
MainActivity.java
public class MainActivity extends AppCompatActivity {
private TableLayout tl;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
initViews();
}
private void initViews() {
tl = (TableLayout) findViewById(R.id.tblAuthenticatedDevices);
List<String> deviceNames = Arrays.asList("1", "2", "3");
List<String> lastLogin = Arrays.asList("11", "22", "33");
List<String> location = Arrays.asList("111", "222", "333");
// Add Header First...
TableRow header = (TableRow) getLayoutInflater().inflate(R.layout.tr_header, null);
tl.addView(header);
// Fill additional rows...
for (int i = 0; i < deviceNames.size(); i++) {
TableRow row = (TableRow) getLayoutInflater().inflate(R.layout.tl_row, tl, false);
TextView txtDeviceName = (TextView) row.findViewById(R.id.tv_device_name);
TextView txtLastLoggedIn = (TextView) row.findViewById(R.id.tv_last_login);
TextView txtLocation = (TextView) row.findViewById(R.id.tv_location);
txtDeviceName.setText(deviceNames.get(i));
txtLastLoggedIn.setText(lastLogin.get(i));
txtLocation.setText(location.get(i));
tl.addView(row);
}
}
}
这导致了这一点。
答案 1 :(得分:0)
在创建数据行之前添加此项以创建标题:
TableRow rowHeader = new TableRow(context);
rowHeader.setBackgroundColor(Color.parseColor("#c0c0c0"));
rowHeader.setLayoutParams(new TableLayout.LayoutParams(TableLayout.LayoutParams.MATCH_PARENT,
TableLayout.LayoutParams.WRAP_CONTENT));
//Title header for each column here
String[] headerText={"ID","NAME","TYPE"};
for(String c:headerText) {
TextView tv = new TextView(this);
tv.setLayoutParams(new TableRow.LayoutParams(TableRow.LayoutParams.WRAP_CONTENT,
TableRow.LayoutParams.WRAP_CONTENT));
tv.setGravity(Gravity.CENTER);
tv.setTextSize(18);
tv.setPadding(5, 5, 5, 5);
tv.setText(c);
rowHeader.addView(tv);
}
tableLayout.addView(rowHeader);
答案 2 :(得分:0)
今天早上我再看一眼时,我已经意识到自己做错了什么。
我已经结束了表格布局(即我有<TableLayout... />
)然后我已经添加了我的TableRow但它在TableLayout之外。
相反,我将我的标题放在TableLayout标记内,如下所示,它按预期工作。
<TableLayout android:id="@+id/tblAuthenticatedDevices"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:stretchColumns="1"
android:shrinkColumns="false"
android:layout_margin="10dp">
<TableRow
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@color/cardToolbar">
<TextView
android:text="Device Name"
android:layout_width="0dp"
android:layout_weight="1"
android:textStyle="bold"
android:padding="10dp"
android:textColor="@color/white" />
<TextView
android:layout_width="0dp"
android:layout_weight="1"
android:text="Last Logged In"
android:textStyle="bold"
android:padding="10dp"
android:textColor="@color/white" />
<TextView
android:layout_width="0dp"
android:layout_weight="1"
android:text="From"
android:textStyle="bold"
android:padding="10dp"
android:textColor="@color/white"/>
</TableRow>
</TableLayout>