package com.example.kucun2.ui.dingdan;//package com.example.kucun2;
import android.annotation.SuppressLint;
import android.graphics.Color;
import android.graphics.Typeface;
import android.os.Bundle;
import android.text.TextUtils;
import android.util.Log;
import android.util.TypedValue;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.FrameLayout;
import android.widget.TableLayout;
import android.widget.TableRow;
import android.widget.TextView;
import androidx.core.content.ContextCompat;
import androidx.fragment.app.Fragment;
import androidx.recyclerview.widget.RecyclerView;
import com.example.kucun2.R;
import com.example.kucun2.entity.Bancai;
import com.example.kucun2.entity.Chanpin;
import com.example.kucun2.entity.Chanpin_Zujian;
import com.example.kucun2.entity.Dingdan;
import com.example.kucun2.entity.Dingdan_Bancai;
import com.example.kucun2.entity.Dingdan_Chanpin;
import com.example.kucun2.entity.data.Data;
import com.example.kucun2.entity.Zujian;
import java.util.List;
public class OrderDisplayFragment extends Fragment {
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fragment_order_display, container, false);
TableLayout table = view.findViewById(R.id.orderTable);
// 添加表头
addTableHeader(table);
// 获取虚拟数据
List<Dingdan> orders = Data.dingdans;
List<Dingdan_Chanpin> orderProducts = Data.dingdanChanpins;
List<Dingdan_Bancai> orderMaterials = Data.dingdanBancais;
List<Chanpin_Zujian> productComponents = Data.chanpinZujians;
Log.d("log",orders.get(0).getNumber());
// 填充表格数据
for (Dingdan order : orders) {
// 订单对应的产品
for (Dingdan_Chanpin orderProduct : orderProducts) {
if (orderProduct.getDingdan().getId().equals(order.getId())) {
Chanpin product = orderProduct.getChanpin();
// 产品对应的组件
for (Chanpin_Zujian component : product.getZujians()) {
// 组件对应的板材订单
for (Dingdan_Bancai material : orderMaterials) {
if (material.getZujian() != null &&
material.getZujian().getId().equals(component.getId())) {
addTableRow(table, createRowData(
order,
product,
component,
material
));
}
}
}
}
}
}
return view;
}
private Object[] createRowData(Dingdan order, Chanpin product,
Chanpin_Zujian component, Dingdan_Bancai material) {
Bancai board = material.getBancai();
@SuppressLint("DefaultLocale") String boardInfo =String.format("%.1f", board.getHoudu())+board.getCaizhi().getName() +
"(" + board.getMupi1().getName() +
(board.getMupi2() != null ?
"," + board.getMupi2().getName() : ")") ;
return new Object[] {
order.getNumber(), // 订单号
product.getId(), // 产品编号
"1", // 产品数量 (根据需求调整)
component.getZujian().getName(), // 组件名
boardInfo, // 板材信息
Math.round(component.getOne_several()), // 板材/组件
material.getShuliang() // 订购数量
};
}
// private void addTableRow(TableLayout table, Object[] rowData) {
// TableRow row = new TableRow(requireContext());
// Log.d("log",rowData[0].toString());
// for (Object data : rowData) {
// TextView textView = new TextView(requireContext());
// textView.setText(String.valueOf(data));
// textView.setPadding(8, 12, 8, 12);
// row.addView(textView);
// }
//
// table.addView(row);
// }
//
private void addTableRow(TableLayout table, Object[] rowData) {
TableRow row = new TableRow(requireContext());
// 设置行布局参数(正确方式)
TableLayout.LayoutParams rowParams = new TableLayout.LayoutParams(
TableLayout.LayoutParams.MATCH_PARENT,
TableLayout.LayoutParams.WRAP_CONTENT
);
row.setLayoutParams(rowParams);
// 设置最小行高(单位:dp)
int minRowHeight = dpToPx(36);
row.setMinimumHeight(minRowHeight);
for (Object data : rowData) {
TextView textView = new TextView(requireContext());
textView.setText(String.valueOf(data));
textView.setTextSize(TypedValue.COMPLEX_UNIT_SP, 14);
// 设置单元格内边距
int padding = dpToPx(8);
textView.setPadding(padding, padding/2, padding, padding/2);
// 设置单行显示
textView.setSingleLine(true);
textView.setEllipsize(TextUtils.TruncateAt.END);
// 创建列布局参数(正确方式)
TableRow.LayoutParams colParams = new TableRow.LayoutParams(
0, // 宽度将由权重控制
TableRow.LayoutParams.MATCH_PARENT
);
// 设置权重和最小宽度
colParams.weight = 1;
textView.setLayoutParams(colParams);
// 设置文本视图的最小宽度(这才是正确的属性)
textView.setMinWidth(dpToPx(120)); // 设置最小列宽
row.addView(textView);
}
table.addView(row);
}
// 动态添加表头
private void addTableHeader(TableLayout table) {
TableRow headerRow = new TableRow(requireContext());
headerRow.setBackgroundColor(ContextCompat.getColor(requireContext(), R.color.purple_500));
TableLayout.LayoutParams headerParams = new TableLayout.LayoutParams(
TableLayout.LayoutParams.MATCH_PARENT,
TableLayout.LayoutParams.WRAP_CONTENT
);
headerRow.setLayoutParams(headerParams);
String[] headers = {"订单号", "产品编号", "产品数量", "组件名", "板材信息", "板材/组件", "订购数量"};
for (String header : headers) {
TextView headerView = new TextView(requireContext());
headerView.setText(header);
headerView.setTextColor(Color.WHITE);
headerView.setTypeface(null, Typeface.BOLD);
headerView.setTextSize(TypedValue.COMPLEX_UNIT_SP, 16);
int padding = dpToPx(8);
headerView.setPadding(padding, padding, padding, padding);
// 设置列布局参数
TableRow.LayoutParams colParams = new TableRow.LayoutParams(
0,
TableRow.LayoutParams.MATCH_PARENT
);
colParams.weight = 1;
headerView.setLayoutParams(colParams);
// 设置表头列的最小宽度
headerView.setMinWidth(dpToPx(120));
headerRow.addView(headerView);
}
table.addView(headerRow);
}
// DP转PX工具方法
private int dpToPx(int dp) {
return (int) TypedValue.applyDimension(
TypedValue.COMPLEX_UNIT_DIP,
dp,
getResources().getDisplayMetrics()
);
}
// // 在Activity/Fragment中使用
// @Override
// protected void onCreate(Bundle savedInstanceState) {
// super.onCreate(savedInstanceState);
// setContentView(R.layout.activity_main);
//
// TableLayout table = findViewById(R.id.orderTable);
//
// // 添加表头
// addTableHeader(table);
//
// // 添加数据行
// addTableRow(table, new Object[]{"ORD001", "P-2023-01", "150", "框架组件", "2000x1000x8", "22", "320"});
// addTableRow(table, new Object[]{"ORD002", "P-2023-02", "85", "玻璃板", "3000x1500x12", "15", "180"});
// addTableRow(table, new Object[]{"ORD003", "P-2023-03", "220", "支架组件", "1800x900x5", "36", "550"});
//
// // 更多数据行...
// }
}<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent">
<!-- 水平滚动容器(关键:宽度设为match_parent) -->
<HorizontalScrollView
android:id="@+id/scroll_horizontal"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:fillViewport="true"
android:scrollbars="horizontal">
<!-- 表格容器(高度为wrap_content,宽度设为可无限扩展) -->
<TableLayout
android:id="@+id/orderTable"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:stretchColumns="*"
android:shrinkColumns="*"
android:paddingEnd="16dp"
android:minWidth="1000dp"> <!-- 设置最小宽度防止初始压缩 -->
<!-- 表格标题行(已移除原始代码中的标题行,将在Java中动态添加) -->
</TableLayout>
</HorizontalScrollView>
<!-- 垂直滚动指示器 -->
<View
android:layout_width="4dp"
android:layout_height="match_parent"
android:layout_gravity="right"
android:background="#80000000"
android:visibility="invisible"
android:id="@+id/vertical_scroll_indicator"/>
</FrameLayout> 实现TextView单行显示、自动延伸长度并支持水平滚动的解决方案
最新发布