优点:
1.相同的行布局不用重复画
2.除了表头固定,其他的行可以动态添加,非常方便
此处举例,所用的是RecyclerView和LinearLayout的权重适配(不用自己再做适配)
效果图:
ReportDetailActivity.java是用于展示表格的Activity
public class ReportDetailActivity extends AppCompatActivity implements View.OnClickListener { private RecyclerView report_detail_recyclerview; private List<String> mList; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_report_detail); initView(); } private void initView() { mList = new ArrayList<>(); mList.add("省亿元以上项目"); mList.add("合肥市“大新专”项目"); mList.add("市产业类投资项目"); mList.add("市大建设项目"); report_detail_recyclerview = (RecyclerView) findViewById(R.id.report_detail_recyclerview); report_detail_recyclerview.setLayoutManager(new LinearLayoutManager(this)); report_detail_recyclerview.setAdapter(new ReportDetailAdapter(this,mList)); } }
ReportDetailAdapter.java 是RecyclerView的适配器,有两个行布局
public class ReportDetailAdapter extends RecyclerView.Adapter { private List<String> list; private Context context; public ReportDetailAdapter(Context context, List<String> list) { this.context = context; this.list = list; } @Override public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { if (viewType == 1) { return new OneViewHolder(View.inflate(context, R.layout.oneviewitem, null)); } else { return new TwoViewHolder(View.inflate(context, R.layout.twoviewitem, null)); } } @Override public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) { if (getItemViewType(position) == 1) { OneViewHolder oneViewHolder = (OneViewHolder) holder; oneViewHolder.setData(position); } else { TwoViewHolder twoViewHolder = (TwoViewHolder) holder; twoViewHolder.setData(position); } } @Override public int getItemCount() { return list.size(); } @Override public int getItemViewType(int position) { if (position == 0) { return 1; } else { return 2; } } class OneViewHolder extends RecyclerView.ViewHolder { public OneViewHolder(View itemview) { super(itemview); } public void setData(int position) { ImageView imageView = (ImageView) itemView.findViewById(R.id.switch_img); } } private class TwoViewHolder extends RecyclerView.ViewHolder { private TextView unit_tv; private TextView projectnum_tv; private TextView yearplaninvest_tv; private TextView nowmonthinvest_tv; private TextView onetonowinvest_tv; private TextView Investmentcompletion_tv; private TextView investmentgrowth_tv; public TwoViewHolder(View itemView) { super(itemView); } public void setData(int position) { unit_tv = (TextView) itemView.findViewById(R.id.unit_tv); projectnum_tv = (TextView) itemView.findViewById(R.id.projectnum_tv); yearplaninvest_tv = (TextView) itemView.findViewById(R.id.yearplaninvest_tv); nowmonthinvest_tv = (TextView) itemView.findViewById(R.id.nowmonthinvest_tv); onetonowinvest_tv = (TextView) itemView.findViewById(R.id.onetonowinvest_tv); Investmentcompletion_tv = (TextView) itemView.findViewById(R.id.Investmentcompletion_tv); investmentgrowth_tv = (TextView) itemView.findViewById(R.id.investmentgrowth_tv); unit_tv.setText(list.get(position)); } } }
oneviewitem.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
android:paddingLeft="5dp"
android:paddingRight="5dp"
android:paddingTop="5dp">
<View
android:layout_width="match_parent"
android:layout_height="1dp"
android:background="#BDBDBD"/>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="100dp"
android:orientation="horizontal"
>
<View
android:layout_width="1dp"
android:layout_height="match_parent"
android:background="#BDBDBD"/>
<TextView
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="1.2"
android:gravity="center"
android:text="单位"/>
<View
android:layout_width="1dp"
android:layout_height="match_parent"
android:background="#BDBDBD"/>
<LinearLayout
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="6.2"
android:orientation="vertical">
<FrameLayout
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1"
>
<ImageView
android:id="@+id/switch_img"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="right"
android:adjustViewBounds="true"
android:scaleType="center"
android:src="@drawable/switch_bg"/>
<TextView
android:id="@+id/textView"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:gravity="center"
android:text="项目计划情况"/>
</FrameLayout>
<View
android:layout_width="match_parent"
android:layout_height="1dp"
android:background="#BDBDBD"/>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1"
android:orientation="horizontal"
>
<TextView
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="1"
android:gravity="center"
android:text="项目数"/>
<View
android:layout_width="1dp"
android:layout_height="match_parent"
android:background="#BDBDBD"/>
<TextView
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="1"
android:gravity="center"
android:text="年度计划投资"/>
<View
android:layout_width="1dp"
android:layout_height="match_parent"
android:background="#BDBDBD"/>
<TextView
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="1"
android:gravity="center"
android:text="当月完成投资"/>
<View
android:layout_width="1dp"
android:layout_height="match_parent"
android:background="#BDBDBD"/>
<TextView
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="1.2"
android:gravity="center"
android:text="1-当月累计完成投资"/>
<View
android:layout_width="1dp"
android:layout_height="match_parent"
android:background="#BDBDBD"/>
<TextView
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="1"
android:gravity="center"
android:text="投资完成率"/>
<View
android:layout_width="1dp"
android:layout_height="match_parent"
android:background="#BDBDBD"/>
<TextView
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="1"
android:gravity="center"
android:text="投资增长率"/>
</LinearLayout>
</LinearLayout>
<View
android:layout_width="1dp"
android:layout_height="match_parent"
android:background="#BDBDBD"/>
</LinearLayout>
<View
android:layout_width="match_parent"
android:layout_height="1dp"
android:background="#BDBDBD"/>
</LinearLayout>
twoviewitem.xml<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="vertical" android:paddingLeft="5dp" android:paddingRight="5dp"> <LinearLayout android:layout_width="match_parent" android:layout_height="65dp" android:orientation="horizontal"> <View android:layout_width="1dp" android:layout_height="match_parent" android:background="#BDBDBD"/> <TextView android:id="@+id/unit_tv" android:layout_width="0dp" android:layout_height="match_parent" android:layout_weight="1.2" android:gravity="center"/> <!--有1dp的偏差,需要纠正(应该是上面布局套的有点多导致下面的有点偏差),layout_marginLeft="1dp"--> <View android:layout_width="1dp" android:layout_marginLeft="1dp" android:layout_height="match_parent" android:background="#BDBDBD"/> <TextView android:id="@+id/projectnum_tv" android:layout_width="0dp" android:layout_height="match_parent" android:layout_weight="1" android:gravity="center"/> <View android:layout_width="1dp" android:layout_height="match_parent" android:background="#BDBDBD"/> <TextView android:id="@+id/yearplaninvest_tv" android:layout_width="0dp" android:layout_height="match_parent" android:layout_weight="1" android:gravity="center"/> <View android:layout_width="1dp" android:layout_height="match_parent" android:background="#BDBDBD"/> <TextView android:id="@+id/nowmonthinvest_tv" android:layout_width="0dp" android:layout_height="match_parent" android:layout_weight="1" android:gravity="center"/> <View android:layout_width="1dp" android:layout_height="match_parent" android:background="#BDBDBD"/> <TextView android:id="@+id/onetonowinvest_tv" android:layout_width="0dp" android:layout_height="match_parent" android:layout_weight="1.2" android:gravity="center"/> <View android:layout_width="1dp" android:layout_height="match_parent" android:background="#BDBDBD"/> <TextView android:id="@+id/Investmentcompletion_tv" android:layout_width="0dp" android:layout_height="match_parent" android:layout_weight="1" android:gravity="center"/> <View android:layout_width="1dp" android:layout_height="match_parent" android:background="#BDBDBD"/> <TextView android:id="@+id/investmentgrowth_tv" android:layout_width="0dp" android:layout_height="match_parent" android:layout_weight="1" android:gravity="center"/> <View android:layout_width="1dp" android:layout_height="match_parent" android:background="#BDBDBD"/> </LinearLayout> <View android:layout_width="match_parent" android:layout_height="1dp" android:background="#BDBDBD"/> </LinearLayout>