我创建了一个可滚动的自定义ViewGroup,其中包含几个> 200个EditTexts(并非所有这些都同时显示 - 我正在使用回收器)。我遇到的问题是滚动速度很慢。
有趣的是,如果我执行以下某项操作,我就没有问题了 1)禁用editText [editText.setEnabled(false)]
或
2)如果我将视图从EditText更改为TextView
关于问题的任何想法?
答案 0 :(得分:3)
EditText为huge。特别注意它继承的所有方法。
为什么不尝试只使用一个带有199个自定义TextView的EditText或在Canvas中绘制的大型矩形网格?您可以随时自定义TextView(或绘制的矩形网格)以使它们看起来像编辑框,但只对具有焦点本身的单元格使用一个EditText。
这甚至是Excel如何用于某些的功能。它可以直接编辑单元格(是),但它也在Excel电子表格的左上角有一个静态单元格,用于显示公式的内容(可能已经在焦点单元格中呈现为视图)。你可以自己做类似的事情。您可以扩展EditText以执行所有硬件操作,例如自动完成等,但您可以在具有焦点的矩形内绘制文本(或将其插入具有焦点的特定TextView内)。
看看这个例子: https://github.com/dennis-sheil/android-spreadsheet
他似乎主要使用TextViews(虽然TextViews也很重,但我开始认为Canvas可能更适合这样的东西,并且所有东西都可以用绘图方法模拟,我所说的一切都是闪烁光标,单元格突出显示,字符输入字符等)。至少使用Canvas,您可以轻松地告诉它需要绘制哪个部分,以及哪些部分不在屏幕之外且不需要绘制,因此您不太可能遇到内存问题。
答案 1 :(得分:1)
在滚动期间聚焦EditText可能会出现问题,或者您创建的对象太多而且速度很慢。将ListView与EditText一起使用。使用viewHolder模式回收视图。它会很顺利,但我不确定它是不是你想要的。