原文网址:http://blog.sina.com.cn/s/blog_682139d001013omd.html
这段时间搞一个android表格,真是搞死人,让我想到iphone开发是何其的简单啊,有种冲动自学iphone开发。先说说android里面的table是怎么制作出来的。
实现方法有三种思路:
1、ListView
2、ScrollView + NoScrollListView(自定义的ListView)
3、ScrollView + Linearlayout
 
因为我每一行有五个元素:
第一个:照相按钮 ImageButton
第二个:文本 TextView
第三个:文本 TextView
第四个:输入框 EditText
第五个:输入框 EditText
 
现在讲解第一种方法的思路。
用纯粹的ListView来展现表格。
布局文件如下:

要在ListView的上面和下面添加横线。

下面是每一行的布局:

 
在这里每一行,都要放一个view代表竖线。这样才能做出表格的风格。
 
 
然而第一种方法问题出来了,让我百思不得其解的是,我不知道怎么把数据存储
因为ListView会不断地刷新,每当输入法弹出来都会刷新,或者滚动的时候都会不断地
刷新。因此保存数据是一个重点。保存数据怎么保存呢?一开始是在adaper里面的EditText设置
setOnFocusChangeListerner监听器用来监听在输入离开时就把数据保存。这里通过tag把第几行
的位置保存,然后在监听器的实现类里面来获取数据并且保存到全局变量中。
但是此方法缺点是,如果用户没有离开输入框而且又想获取输入框的值,问题就来了。所以此方法
走不通。只能addTextChangeListerner监听器,实现TextWatch接口。但此时让我迷惑的是,我怎么
才能获取是表格哪一行再输入呢。所以就必须把ListView里面的每一行布局都保存在全局变量方可
实现。此方法能走的通,但稍微反锁些。
 
第二种思路是:ScrollView + NoScrollView来实现。
原理是这样的:在外面套一层ScrollView,然后又不让ListView滚动或者说刷新,怎样才能
做到这样呢,只能通过展现ListView的所有行,就是一开始就加载所有行。ListView里面的机制是只要
有滚动就会刷新。而我就一开始就把所有行加载出来,通过ScrollView让它滚动。
所以现在再ListView外面加一个ScrollView就会出现滚动了。然后这样子来操作的话。
如果ListView上面还有其它空间的话,也就是说,ScrollView里面有更复杂的控件的话,那么会导致
滚动很慢很慢。
在这里获取数据还有另外一个思路,哈哈。
是这样的。因为不用刷新ListView了,就可以直接获取数据,怎么获取数据呢?通过ListView获取
到Adapter,然后通过Adapter得到数据,大家要明白,Adapter是ListView和数据的桥梁,通过Adapter肯定能
获取每一行的数据,比如拍照的照片,输入框的值,都可以得到。
 
效果图如下:
右边空白是输入框。
第三种方法是ScrollView + LinearLayout
思路很简单,就是在Linearlayout里面有很多行LinearLayout,直接上图。
 
 
<?xml version="1.0"
encoding="UTF-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
   
android:layout_width="fill_parent"
   
android:layout_height="49dip"
   
android:orientation="vertical" >
 
   
<LinearLayout
     
  android:id="@id/lm_linearlayout2"
     
  android:layout_width="fill_parent"
     
  android:layout_height="48dip"
     
  android:orientation="horizontal"
>
 
 
     
  <View style="@style/onePixelView"
/>
 
     
  <ImageButton
     
     
android:id="@id/lm_button1"
     
     
android:layout_width="48dip"
     
     
android:layout_height="48dip"
     
     
android:background="@drawable/lm_camera_btn_bg"
     
     
android:focusable="false" />
 
     
  <View style="@style/onePixelView"
/>
 
     
  <TextView
     
     
android:id="@id/lm_item_text1"
     
     
android:layout_width="80dip"
     
     
android:layout_height="wrap_content"
     
     
android:layout_gravity="center"
     
     
android:gravity="center"
     
     
android:textColor="@color/black"
     
     
android:textSize="14sp" />
 
     
  <View style="@style/onePixelView"
/>
 
     
  <TextView
     
     
android:id="@id/lm_item_text2"
     
     
android:layout_width="45dip"
     
     
android:layout_height="wrap_content"
     
     
android:layout_gravity="center"
     
     
android:gravity="center"
     
     
android:textColor="@color/black"
     
     
android:textSize="14sp" />
 
     
  <View style="@style/onePixelView"
/>
 
     
  <EditText
     
     
android:id="@id/lm_item_editText1"
     
     
style="@style/my_edittext_style"
     
     
android:layout_width="45dip"
     
     
android:layout_height="fill_parent"
     
     
android:layout_gravity="center"
     
     
android:gravity="center"
     
     
android:inputType="number"
     
     
android:textSize="14sp" />
 
     
  <View style="@style/onePixelView"
/>
 
     
  <EditText
     
     
android:id="@id/lm_item_editText2"
     
     
style="@style/my_edittext_style"
     
     
android:layout_width="wrap_content"
     
     
android:layout_height="fill_parent"
     
     
android:layout_gravity="center"
     
     
android:layout_weight="1"
     
     
android:gravity="left"
     
     
android:maxLines="3"
     
     
android:numeric="integer"
     
     
android:padding="2dip"
     
     
android:phoneNumber="true"
     
     
android:singleLine="false"
     
     
android:textSize="14sp" />
 
     
  <View style="@style/onePixelView"
/>
   
</LinearLayout>
 
   
<View
     
  android:layout_width="fill_parent"
     
  android:layout_height="0.1dp"
     
  android:background="#125a95"
/>
 
</LinearLayout>

ListView EditText 实现的三种方式的更多相关文章

  1. 获得 LayoutInflater 实例的三种方式

    在实际开发中LayoutInflater这个类还是非常有用的,它的作用类似于findViewById().不同点是LayoutInflater是用来找res/layout/下的xml布局文件,并且实例 ...

  2. [转]获得 LayoutInflater 实例的三种方式

    转自:http://www.cnblogs.com/androidez/archive/2013/07/01/3164729.html 获得 LayoutInflater 实例的三种方式   在实际开 ...

  3. Android开发入门——Button绑定监听事件三种方式

    import android.app.Activity; import android.os.Bundle;import android.view.View;import android.widget ...

  4. 监视EntityFramework中的sql流转你需要知道的三种方式Log,SqlServerProfile, EFProfile

    大家在学习entityframework的时候,都知道那linq写的叫一个爽,再也不用区分不同RDMS的sql版本差异了,但是呢,高效率带来了差灵活性,我们 无法控制sql的生成策略,所以必须不要让自 ...

  5. iOS字体加载三种方式

    静态加载 动态加载 动态下载苹果提供的多种字体 其他 打印出当前所有可用的字体 检查某字体是否已经下载 这是一篇很简短的文章,介绍了 iOS 自定义字体加载的三种方式. 静态加载 这个可以说是最简单最 ...

  6. 0036 Java学习笔记-多线程-创建线程的三种方式

    创建线程 创建线程的三种方式: 继承java.lang.Thread 实现java.lang.Runnable接口 实现java.util.concurrent.Callable接口 所有的线程对象都 ...

  7. 【整理】Linux下中文检索引擎coreseek4安装,以及PHP使用sphinx的三种方式(sphinxapi,sphinx的php扩展,SphinxSe作为mysql存储引擎)

          一,软件准备 coreseek4.1 (包含coreseek测试版和mmseg最新版本,以及测试数据包[内置中文分词与搜索.单字切分.mysql数据源.python数据源.RT实时索引等测 ...

  8. JDBC的批处理操作三种方式 pstmt.addBatch()

    package lavasoft.jdbctest; import lavasoft.common.DBToolkit; import java.sql.Connection; import java ...

  9. 【Java EE 学习 52】【Spring学习第四天】【Spring与JDBC】【JdbcTemplate创建的三种方式】【Spring事务管理】【事务中使用dbutils则回滚失败!!!??】

    一.JDBC编程特点 静态代码+动态变量=JDBC编程. 静态代码:比如所有的数据库连接池 都实现了DataSource接口,都实现了Connection接口. 动态变量:用户名.密码.连接的数据库. ...

随机推荐

  1. linux命令面试题

    文件管理命令 (1)Linux的文件系统目录配置要遵循FHS规范,规范定义的两级目录规范如下:        /home  每个账号在该目录下都有一个文件夹,进行数据的管理        /usr 有 ...

  2. C11 标准特性研究

    前言 - 需要点开头 C11标准是C语言标准的第三版(2011年由ISO/IEC发布),前一个标准版本是C99标准. 相比C99,C11有哪些变化呢!!所有的测试全部基于能够和标准贴合的特性平台. 但 ...

  3. springboot项目的搭建

    原文链接:http://www.cnblogs.com/winner-0715/p/6666302.html 后续完善(附图及详细过程)

  4. shell中引号的作用(转)

    引号的作用 1 双引号(“”) 1)使用””可引用除字符$(美元符号).`(反引号).\(反斜线)外的任意字符或字符串.双引号不会阻止shell对这三个字符做特殊处理(标示变量名.命令替换.反斜线转义 ...

  5. linux下文件查询命令(cat,more,less,head,tail)

    众所周知Linux中命令cat.more.less均可用来查看文件内容,主要区别有:cat是一次性显示整个文件的内容,还可以将多个文件连接起来显示,它常与重定向符号配合使用,适用于文件内容少的情况:m ...

  6. linux命令(39):ss命令

    ss是Socket Statistics的缩写.顾名思义,ss命令可以用来获取socket统计信息,它可以显示和netstat类似的内容.但ss的优势在于它能够显示更多更详细的有关TCP和连接状态的信 ...

  7. 爬虫基础库之requests

    requests Python标准库中提供了:urllib.urllib2.httplib等模块以供Http请求,但是,它的 API 太渣了.它是为另一个时代.另一个互联网所创建的.它需要巨量的工作, ...

  8. hdu 1806(线段树区间合并)

    Frequent values Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)T ...

  9. Simditor学习--vuejs集成simditor

    唠叨 因为项目需要我自己研究了和集成在vue方便以后再使用,详情官方文档在这里.希望大家有好的建议提出让我继续改进. simditor介绍 Simditor 是团队协作工具 Tower 使用的富文本编 ...

  10. bzoj 1485 卡特兰数 + 分解因子

    思路:打表可以看出是卡特兰数,但是模数不一定是素数,所以需要分解一下因数. #include<bits/stdc++.h> #define LL long long #define fi ...