服务器之家:专注于VPS、云服务器配置技术及软件下载分享
分类导航

PHP教程|ASP.NET教程|Java教程|ASP教程|编程技术|正则表达式|C/C++|IOS|C#|Swift|Android|VB|R语言|JavaScript|易语言|vb.net|

服务器之家 - 编程语言 - Android - Android实现类似execel的表格 能回显并能修改表格内容的方法

Android实现类似execel的表格 能回显并能修改表格内容的方法

2022-07-28 11:18安了个卓 Android

今天小编就为大家分享一篇Android实现类似execel的表格 能回显并能修改表格内容的方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧

如下所示:

Android实现类似execel的表格 能回显并能修改表格内容的方法

Android实现类似execel的表格 能回显并能修改表格内容的方法

Android实现类似execel的表格 能回显并能修改表格内容的方法

自定义实现一个水平滚动控件HorizontalScrollView

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
package com.example.view;
 
import android.content.Context;
import android.util.AttributeSet;
import android.view.View;
import android.widget.HorizontalScrollView;
 
/**
 * 自定义实现一个水平滚动控件HorizontalScrollView
 * @author Administrator
 *
 */
public class SyncHorizontalScrollView extends HorizontalScrollView {
  private View mView;
 
  public SyncHorizontalScrollView(Context context) {
   super(context);
  }
 
  public SyncHorizontalScrollView(Context context, AttributeSet attrs) {
   super(context, attrs);
  }
 
  public SyncHorizontalScrollView(Context context, AttributeSet attrs, int defStyleAttr) {
   super(context, attrs, defStyleAttr);
  }
 
  protected void onScrollChanged(int l, int t, int oldl, int oldt) {
   super.onScrollChanged(l, t, oldl, oldt);
   if (mView != null) {
    mView.scrollTo(l, t);
   }
  }
 
  public void setScrollView(View view) {
   mView = view;
  }
}

自定义实现LinearLayout让其能跟着ScrollView滚动

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
package com.example.view;
 
import android.content.Context;
import android.util.AttributeSet;
import android.widget.LinearLayout;
import android.widget.ListView;
 
/**
 * 自定义实现LinearLayout让其能跟着ScrollView滚动
 * @author Administrator
 *
 */
public class NoscrollLinearLayout extends LinearLayout {
 
 
 public NoscrollLinearLayout(Context context) {
  super(context);
 }
 
 public NoscrollLinearLayout(Context context, AttributeSet attrs) {
  super(context, attrs);
 }
 
 public NoscrollLinearLayout(Context context, AttributeSet attrs, int defStyleAttr) {
  super(context, attrs, defStyleAttr);
 }
 
 @Override
 protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
  int expandSpec = MeasureSpec.makeMeasureSpec(Integer.MAX_VALUE >> 2, MeasureSpec.AT_MOST);
  super.onMeasure(widthMeasureSpec, expandSpec);
 }
}

自定义实现ListView让其能跟着ScrollView滚动

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
package com.example.view;
 
import android.content.Context;
import android.util.AttributeSet;
import android.widget.ListView;
 
/**
 * 自定义实现ListView让其能跟着ScrollView滚动
 * @author Administrator
 *
 */
public class NoscrollListView extends ListView {
 
 public NoscrollListView(Context context) {
  super(context);
 }
 
 public NoscrollListView(Context context, AttributeSet attrs) {
  super(context, attrs);
 }
 
 public NoscrollListView(Context context, AttributeSet attrs, int defStyleAttr) {
  super(context, attrs, defStyleAttr);
 }
 
 @Override
 protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
  int expandSpec = MeasureSpec.makeMeasureSpec(Integer.MAX_VALUE >> 2, MeasureSpec.AT_MOST);
  super.onMeasure(widthMeasureSpec, expandSpec);
 }
}

显示数据的fragment

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
package com.example.fragment;
 
import java.util.ArrayList;
 
import android.app.Fragment;
import android.os.Bundle;
import android.text.TextUtils;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.View.MeasureSpec;
import android.view.View.OnClickListener;
import android.view.ViewGroup;
import android.widget.EditText;
 
import com.example.auto.R;
 
/**
 * 显示数据的fragment
 * @author Administrator
 *
 */
public class ItemFragment extends Fragment {
 private EditText et_1,et_2,et_3,et_4,et_5;
 private ArrayList<EditText>list ;
 
  @Override
  public void onCreate(Bundle savedInstanceState)
  {
   super.onCreate(savedInstanceState);
   setHasOptionsMenu(true);
  }
  @Override
 public View onCreateView(LayoutInflater inflater,
    ViewGroup container, Bundle savedInstanceState) {
  View view =inflater.inflate(R.layout.item_fragment,container, false);
  setView(view);
//  setListener();
  return view;
 }
 private void setListener() {
 
 }
 private void setView(View view) {
  list =new ArrayList<>();
  et_1=(EditText) view.findViewById(R.id.et_1);
  et_2=(EditText) view.findViewById(R.id.et_2);
  et_3=(EditText) view.findViewById(R.id.et_3);
  et_4=(EditText) view.findViewById(R.id.et_4);
  et_5=(EditText) view.findViewById(R.id.et_5);
  list.add( et_1);
  list.add( et_2);
  list.add( et_3);
  list.add( et_4);
  list.add( et_5);
 }
 private StringBuffer sb;
 public String getValue(){
  sb =new StringBuffer();
  for (int i = 0; i < list.size(); i++) {
   String string =list.get(i).getText().toString();
 /*  if (i==0) {
    if (string!=null) {
     sb.append(string);
     sb.append("$");
    }else {
     sb.append("-1");sb.append("$");
    }
   }else*/ if (i==list.size()-1) {
    if (!TextUtils.isEmpty(string)) {
     sb.append(string);
    }else {
     sb.append("-1");
    }
   }else {
    if (!TextUtils.isEmpty(string)) {
     sb.append(string);sb.append("$");
    }else {
     sb.append("-1");sb.append("$");
    }
   }
  }
  return sb.toString();
 }
 public void setXm(String string){
  if (!TextUtils.isEmpty(string)) {
   et_1.setText(string);
  }
 }
 public void setNl(String string){
  if (!TextUtils.isEmpty(string)) {
   et_2.setText(string);
  }
 }
 public void setTw(String string){
  if (!TextUtils.isEmpty(string)) {
   et_3.setText(string);
  }
 }
 public void setMb(String string){
  if (!TextUtils.isEmpty(string)) {
   et_4.setText(string);
  }
 }
 public void setHx(String string){
  if (!TextUtils.isEmpty(string)) {
   et_5.setText(string);
  }
 }
 
}

java主程序;

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
package com.example.auto;
 
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
 
import android.app.Activity;
import android.app.Fragment;
import android.app.FragmentManager;
import android.app.FragmentTransaction;
import android.os.Bundle;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup;
import android.view.Window;
import android.widget.BaseAdapter;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
 
import com.example.fragment.ItemFragment;
import com.example.view.NoscrollListView;
import com.example.view.SyncHorizontalScrollView;
 
public class MainActivity extends Activity {
 private NoscrollListView mLeft;
 private LeftAdapter mLeftAdapter;
 private SyncHorizontalScrollView mHeaderHorizontal;
 private SyncHorizontalScrollView mDataHorizontal;
 private List<String> mListData;
 private ArrayList<HashMap<String, String>> data ;
 private Button bt_1;
 private ArrayList< Fragment> fragments;
 @Override
 protected void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);
  requestWindowFeature(Window.FEATURE_NO_TITLE);
  setContentView(R.layout.activity_main);
  initView();
//  initData();
  setListener();
  FragmentManager manager =getFragmentManager();
  FragmentTransaction tx = manager.beginTransaction();
  fragments=new ArrayList<Fragment>();
  for (int i = 0; i < mListData.size(); i++) {
    ItemFragment mFOne = new ItemFragment();
   fragments.add(mFOne);
  }
  Log.i("TAG", "fragment.size=="+fragments.size());
  for (int i = 0; i < fragments.size(); i++) {
   tx.add(R.id.lv_data, fragments.get(i));
  }
   tx.commit();
 }
 
// private void initData() {
// }
 
 private void setListener() {
  bt_1.setOnClickListener(new OnClickListener() {
   @Override
   public void onClick(View v) {
    save();
   }
  });
 }
 @Override
 protected void onResume() {
  super.onResume();
  for (int i = 0; i < fragments.size(); i++) {
   ItemFragment fragment=(ItemFragment) fragments.get(i);
   fragment.setXm(data.get(i).get("姓名"+i));
   fragment.setNl(data.get(i).get("年龄"+i));
   fragment.setTw(data.get(i).get("体温"+i));
   fragment.setMb(data.get(i).get("脉搏"+i));
   fragment.setHx(data.get(i).get("呼吸"+i));
  }
 
 }
 
 protected void save() {
  for (int i = 0; i < fragments.size(); i++) {
  String string= ((ItemFragment)fragments.get(i)).getValue();
  Log.i("TAG", "string=="+string);
 
  }
 
 }
 
 private void initView(){
  bt_1 =(Button) findViewById(R.id.bt_1);
  mLeft = (NoscrollListView) findViewById(R.id.lv_left);
  mDataHorizontal = (SyncHorizontalScrollView) findViewById(R.id.data_horizontal);
  mHeaderHorizontal = (SyncHorizontalScrollView) findViewById(R.id.header_horizontal);
 
  mDataHorizontal.setScrollView(mHeaderHorizontal);
  mHeaderHorizontal.setScrollView(mDataHorizontal);
 
  mListData = new ArrayList<>();
  mListData.add("1");
  mListData.add("2");
  mListData.add("3");
  mListData.add("4");
  mListData.add("5");
  mListData.add("6");
  mListData.add("7");
  mListData.add("8");
  mListData.add("9");
  mListData.add("10");
  mListData.add("11");
  mListData.add("12");
  mListData.add("13");
 
  mLeftAdapter= new LeftAdapter();
  mLeft.setAdapter(mLeftAdapter);
  setData();
 }
 
 private void setData() {
  if (data==null) {
   data=new ArrayList<>();
 
  }
  for (int i = 0; i <mListData.size(); i++) {
   HashMap<String, String> map=new HashMap<String, String>();
   map.put("姓名"+i, i+"姓名");
   map.put("年龄"+i, i+"年龄");
   map.put("体温"+i, i+"体温");
   map.put("脉搏"+i, i+"脉搏");
   map.put("呼吸"+i, i+"呼吸");
   data.add(map);
 
  }
 
 }
 
 class LeftAdapter extends BaseAdapter {
 
  @Override
  public int getCount() {
   return mListData.size();
  }
 
  @Override
  public Object getItem(int position) {
   return mListData.get(position);
  }
 
  @Override
  public long getItemId(int position) {
   return position;
  }
 
  @Override
  public View getView(int position, View convertView, ViewGroup parent) {
   ViewHolder holder = null;
   if (convertView == null) {
    holder = new ViewHolder();
    convertView = LayoutInflater.from(MainActivity.this).inflate(R.layout.item_left, null);
    holder.tvLeft = (TextView) convertView.findViewById(R.id.tv_left);
    convertView.setTag(holder);
   } else {
    holder = (ViewHolder) convertView.getTag();
   }
 
   holder.tvLeft.setText("第" + position + "床");
 
   return convertView;
  }
 
  class ViewHolder {
   TextView tvLeft;
  }
 }
 ArrayList<ArrayList<EditText>>list;
 
 
}

以下是主布局文件;

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
<?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="match_parent"
    android:background="#ffffff"
    android:orientation="vertical">
    <include layout="@layout/top_layout"/>
 
 <LinearLayout
  android:layout_width="match_parent"
  android:layout_height="50dp"
  android:orientation="horizontal">
 
  <LinearLayout
   android:layout_width="0dp"
   android:layout_height="50dp"
   android:layout_weight="1"
 
 
   android:orientation="vertical">
 
    <TextView
      android:layout_width="100dp"
      android:layout_height="50dp"
      android:layout_gravity="center"
      android:gravity="center"
      android:text="床号"/>
  </LinearLayout>
 
  <View
   android:layout_width="1px"
   android:layout_height="50dp"
   android:background="#cccccc"/>
 
  <LinearLayout
   android:id="@+id/lin_header_content"
   android:layout_width="0dp"
   android:layout_height="50dp"
   android:layout_weight="3"
   android:orientation="vertical">
 
   <com.example.view.SyncHorizontalScrollView
    android:id="@+id/header_horizontal"
    android:layout_width="match_parent"
    android:layout_height="50dp"
    android:overScrollMode="never"
    android:scrollbars="none">
 
    <LinearLayout
     android:id="@+id/lin_year_title"
     android:layout_width="match_parent"
     android:layout_height="50dp"
     android:orientation="horizontal">
 
     <TextView
      android:id="@+id/tv_name"
      android:layout_width="100dp"
      android:layout_height="50dp"
      android:layout_gravity="center"
      android:gravity="center"
      android:text="姓名"/>
 
     <View
      android:layout_width="1px"
      android:layout_height="50dp"
      android:background="#cccccc"/>
 
     <TextView
      android:layout_width="100dp"
      android:layout_height="50dp"
      android:layout_gravity="center"
      android:gravity="center"
      android:text="年龄"/>
 
     <View
      android:layout_width="1px"
      android:layout_height="50dp"
      android:background="#cccccc"/>
 
     <TextView
      android:layout_width="100dp"
      android:layout_height="50dp"
      android:layout_gravity="center"
      android:gravity="center"
      android:text="体温"/>
 
     <View
      android:layout_width="1px"
      android:layout_height="50dp"
      android:background="#cccccc"/>
 
     <TextView
      android:layout_width="100dp"
      android:layout_height="50dp"
      android:layout_gravity="center"
      android:gravity="center"
      android:text="脉搏"/>
 
     <View
      android:layout_width="1px"
      android:layout_height="50dp"
      android:background="#cccccc"/>
 
     <TextView
      android:layout_width="100dp"
      android:layout_height="50dp"
      android:layout_gravity="center"
      android:gravity="center"
      android:text="呼吸"/>
 
     <View
      android:layout_width="1px"
      android:layout_height="50dp"
      android:background="#cccccc"/>
    </LinearLayout>
   </com.example.view.SyncHorizontalScrollView>
  </LinearLayout>
 </LinearLayout>
 
 <View
  android:layout_width="match_parent"
  android:layout_height="1px"
  android:background="#cccccc"/>
 
 <ScrollView
  android:id="@+id/scroll_content"
  android:layout_width="match_parent"
  android:layout_height="match_parent"
  android:overScrollMode="never"
  android:scrollbars="none">
 
  <LinearLayout
   android:layout_width="match_parent"
   android:layout_height="match_parent"
   android:layout_alignParentTop="true"
   android:orientation="horizontal">
 
   <com.example.view.NoscrollListView
    android:id="@+id/lv_left"
    android:layout_width="0dp"
    android:layout_height="match_parent"
    android:divider="@null"
    android:layout_weight="1"
    android:overScrollMode="never"
    android:scrollbars="none"/>
 
   <View
    android:layout_width="1px"
    android:layout_height="match_parent"
    android:background="#cccccc"/>
 
   <LinearLayout
    android:id="@+id/lin_data_content"
    android:layout_width="0dp"
    android:layout_height="match_parent"
    android:layout_weight="3"
    android:orientation="vertical">
 
    <com.example.view.SyncHorizontalScrollView
     android:id="@+id/data_horizontal"
     android:layout_width="match_parent"
     android:layout_height="match_parent"
     android:overScrollMode="never"
     android:scrollbars="none">
 
 
     <com.example.view.NoscrollLinearLayout
      android:layout_width="match_parent"
      android:layout_height="match_parent"
      android:overScrollMode="never"
      android:scrollbars="none">
     <LinearLayout
    android:id="@+id/lv_data"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:gravity="center"
    android:orientation="vertical" />
    </com.example.view.NoscrollLinearLayout>
    </com.example.view.SyncHorizontalScrollView>
   </LinearLayout>
  </LinearLayout>
 </ScrollView>
</LinearLayout>

以下是数据fragment的布局文件;

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
<?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="match_parent"
 android:orientation="vertical" >
<LinearLayout android:layout_width="match_parent"
 android:layout_height="wrap_content"
 android:orientation="horizontal" >
 
 <EditText
  android:id="@+id/et_1"
  style="@style/et_item"
 
  android:hint="姓名"
  />
 <View
   android:layout_width="1px"
   android:layout_height="50dp"
   android:background="#cccccc"/>
 <EditText
  android:id="@+id/et_2"
  style="@style/et_item"
   android:hint="年龄"
  android:ems="10" />
 <View
   android:layout_width="1px"
   android:layout_height="50dp"
   android:background="#cccccc"/>
 <EditText
  android:id="@+id/et_3"
      style="@style/et_item"
   android:hint="体温"
  android:ems="10" />
  <View
   android:layout_width="1px"
   android:layout_height="50dp"
   android:background="#cccccc"/>
 <EditText
  android:id="@+id/et_4"
     style="@style/et_item"
   android:hint="脉搏"
  android:ems="10" />
  <View
   android:layout_width="1px"
   android:layout_height="50dp"
   android:background="#cccccc"/>
 <EditText
  android:id="@+id/et_5"
  style="@style/et_item"
   android:hint="呼吸"
  android:ems="10" />
  <View
   android:layout_width="1px"
   android:layout_height="50dp"
   android:background="#cccccc"/>
 
</LinearLayout>
 <View
   android:layout_width="match_parent"
   android:layout_height="1px"
   android:background="#cccccc"/>
</LinearLayout>

fragment的EditText的样式:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
<resources>
 
 <!--
  Base application theme, dependent on API level. This theme is replaced
  by AppBaseTheme from res/values-vXX/styles.xml on newer devices.
 -->
 <style name="AppBaseTheme" parent="android:Theme.Light">
  <!--
   Theme customizations available in newer API levels can go in
   res/values-vXX/styles.xml, while customizations related to
   backward-compatibility can go here.
  -->
 </style>
 
 <!-- Application theme. -->
 <style name="AppTheme" parent="AppBaseTheme">
  <!-- All customizations that are NOT specific to a particular API-level can go here. -->
 </style>
  <style name="et_item">
  <item name="android:layout_width">100dp</item>
  <item name="android:layout_height">50dp</item>
  <item name="android:gravity">center</item>
  <item name="android:background">@null</item>
 </style>
 
</resources>

左侧的床号的listview的布局,只能上下移动的部分

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
<?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">
 
 
 
  <TextView
   android:id="@+id/tv_left"
   android:layout_width="match_parent"
   android:layout_height="50dp"
   android:gravity="center"
   android:text="第1行"/>
   <View
   android:layout_width="match_parent"
 
   android:layout_height="1px"
   android:background="#cccccc"/>
</LinearLayout>

以下是最上边的按钮的布局;

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
 android:layout_width="match_parent"
 android:layout_height="45dp"
 android:background="@drawable/top_bar_bg" >
 
 <Button
  android:id="@+id/bt_1"
  android:layout_width="wrap_content"
  android:layout_height="wrap_content"
  android:layout_alignParentRight="true"
  android:layout_alignParentTop="true"
  android:text="保存" />
 
</RelativeLayout>

以上这篇Android实现类似execel的表格 能回显并能修改表格内容的方法就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持服务器之家。

原文链接:https://blog.csdn.net/xujingqing/article/details/70681027

延伸 · 阅读

精彩推荐