- 浏览: 78534 次
最新评论
-
zhangjie3140:
感谢分享
tabhost里解决按键事件捕获的问题 -
honghe:
请问我重写了 onCreateWindow,但处理window ...
在webview中访问互联网应用,碰到弹出窗口怎么办? -
肖默it:
解决了我的问题,感谢楼主的分享!
tabhost里解决按键事件捕获的问题 -
hecal:
太感谢了~~
tabhost里解决按键事件捕获的问题 -
guogzhao:
注意在if判断中要加一个event.getAction() = ...
tabhost里解决按键事件捕获的问题
原文地址:http://wangliping.net/read-big-txt
由于现在TXT文本很多,特别是好多小说也是以这个文件格式出现,毕竟这个格式所占用不必要的空间比较小。像我这样的人就非常喜欢在手机上看小说, 经常下载好多的TXT格式小说存到手机上以便空闲时候看。于是乎也试图做了一下如何在Android上实现看大文本的txt文档。
虽然现在类似的应用还真不少,不过个人看到的基本不公布源码,而公布源码的基本都是不能看大文本的,所以自己去实现了一下。现在只是粗 略实现了,实现方法是每次当滑动到屏幕底端时,从文件读2048字节出来显示到屏幕上。到屏幕底端再读是为了不给用户有刷屏的感觉,使用起来感觉不到只读 了2048字节出来,比较流畅。现在由于只是试验流畅性,所以只写了向下浏览的,而没有写往回读,也就是说往回翻是无效的。
废话不多说,代码是王道。这个是主文件:
import
java.io.FileInputStream
;
import
java.io.IOException
;
import
java.io.InputStreamReader
;
import
java.nio.CharBuffer
;
import
android.app.Activity
;
import
android.net.Uri
;
import
android.os.AsyncTask
;
import
android.os.Bundle
;
import
android.os.Handler
;
import
android.os.Message
;
import
android.text.TextUtils
;
import
android.util.Log
;
import
android.widget.ScrollView
;
import net.wangliping.test.R ;
public
class
TxtReader
extends
Activity
implements
RealTimeTextView
.
OnTextChangedListener
{
private
static
final
String
LOG_TAG
=
"TxtReader"
;
private
static
final
int
SHOW_TXT
=
1
;
private
SwanTextView
mTextShow
;
private
ScrollView
mScrollView
;
private
String
mStringShow
=
null
;
private
boolean
mContinueRead
=
true
;
private
boolean
mHaveNewText
=
false
;
private
int
mCurBottom
=
-
1
;
private
int
mNum
=
-
1
;
private
final
Handler
mHandler
=
new
Handler
() {
@Override
public
void
handleMessage
(Message
msg
) {
switch
(msg
.
what
) {
case
SHOW_TXT:
mTextShow
.
setText
((CharBuffer
) msg
.
obj
);
break
;
default
:
super
.
handleMessage
(msg
);
}
}
};
public
void
onCreate
(Bundle
savedInstanceState
) {
super
.
onCreate
(savedInstanceState
);
setContentView
(R
.
layout
.
txt_reader
);
Uri uri = getIntent (). getData ();
mScrollView = (ScrollView ) findViewById (R . id . text_show_scroll );
mTextShow
=
(RealTimeTextView
) findViewById
(R
.
id
.
text_show
);
mTextShow
.
setOnTextChangedListener
(this
);
new
TextShowTask
().
execute
(uri
);
}
private
void
showText
(Uri
uri
) throws
IOException
,
InterruptedException
{
InputStreamReader
is
=
new
InputStreamReader
(new
FileInputStream
(
uri
.
getPath
()),
"GB2312"
);
StringBuilder
sb =
new
StringBuilder
();
char
[]
buf
=
new
char
[
1024
*
2
];
while
(true
) {
if
(mCurBottom
==
mScrollView
.
getScrollY
()) {
Log
.
d
(LOG_TAG
,
"curBtm:"
+
mCurBottom
+
" scroll:"
+
mScrollView
.
getScrollY
());
mCurBottom
=
-
1
;
mNum
++;
if
(mNum
%
2
==
0
) {
mContinueRead
=
true
;
Log
.
d
(LOG_TAG
,
"YES"
);
}
}
if
(mContinueRead
&&
is
.
read
(buf
) >
0
) {
mContinueRead
=
false
;
if
(sb.
length
() >
4096
) {
sb.
delete
(0
,
2048
);
Message
msg
=
mHandler
.
obtainMessage
(SHOW_TXT
);
msg
.
obj
=
CharBuffer
.
wrap
(sb.
toString
());
mHandler
.
sendMessage
(msg
);
mStringShow
=
sb.
append
(buf
).
toString
();
mHaveNewText
=
true
;
}
else
{
while
(sb.
length
() <
4096
) {
sb.
append
(buf
);
is
.
read
(buf
);
}
sb.
append
(buf
);
Message
msg
=
mHandler
.
obtainMessage
(SHOW_TXT
);
msg
.
obj
=
CharBuffer
.
wrap
(sb.
toString
());
mHandler
.
sendMessage
(msg
);
}
}
}
}
private
class
TextShowTask
extends
AsyncTask
<
Object
,
Object
,
Object
>
{
@Override
protected
void
onPostExecute
(Object
param
) {
Log
.
d
(LOG_TAG
,
"Send broadcast"
);
}
@Override
protected
Object
doInBackground
(Object
...
params
) {
Uri
uri
=
(Uri
) params
[
0
];
try
{
showText
(uri
);
}
catch
(Exception
e
) {
Log
.
d
(LOG_TAG
,
"Exception"
,
e
);
}
return
null
;
}
}
@Override
public
void
onPreOnDraw
(int
bottom
) {
mCurBottom
=
bottom
-
mScrollView
.
getHeight
();
if
(mHaveNewText
&&
!
TextUtils
.
isEmpty
(mStringShow
)) {
mHaveNewText
=
false
;
Message
msg
=
mHandler
.
obtainMessage
(SHOW_TXT
);
msg
.
obj
=
CharBuffer
.
wrap
(mStringShow
);
mHandler
.
sendMessage
(msg
);
}
}
}
这个为了得到TextView底部的位置而扩展了TextView类:
import
android.content.Context
;
import
android.graphics.Canvas
;
import
android.util.AttributeSet
;
import
android.widget.TextView
;
public class SwanTextView extends TextView {
private
int
mPreBottom
=
-
1
;
private
OnTextChangedListener
textChangedListener
=
null
;
public
SwanTextView
(Context
context
) {
super
(context
);
}
public
SwanTextView
(Context
context
,
AttributeSet
attrs
) {
super
(context
,
attrs
);
}
public
SwanTextView
(Context
context
,
AttributeSet
attrs
,
int
defStyle
) {
super
(context
,
attrs
,
defStyle
);
}
@Override
protected
void
onDraw
(Canvas
canvas
) {
if
(mPreBottom
!=
getBottom
()) {
mPreBottom
=
getBottom
();
if
(textChangedListener
!=
null
)
textChangedListener
.
onPreOnDraw
(mPreBottom
);
}
super
.
onDraw
(canvas
);
}
public
static
interface
OnTextChangedListener
{
public
void
onPreOnDraw
(int
bottom
);
}
public
void
setOnTextChangedListener
(OnTextChangedListener
listener
) {
textChangedListener
=
listener
;
}
}
这个就是资源文件了:
<LinearLayout xmlns:android= "http://schemas.android.com/apk/res/android"
android:id= "@+id/text_show_linear" android:layout_width= "wrap_content"
android:layout_height= "wrap_content" >
<ScrollView android:id= "@+id/text_show_scroll"
android:layout_width= "fill_parent" android:layout_height= "fill_parent" >
<net.wangliping.filemanager.SwanTextView
android:id= "@+id/text_show" android:layout_width= "fill_parent"
android:layout_height= "wrap_content" android:scrollbars= "none" >
</net.wangliping.filemanager.SwanTextView>
</ScrollView>
</LinearLayout>
代码不成熟,见笑了
发表评论
-
<转载>实现android的AES加密技术
2012-01-06 17:29 663原文地址:实现android的AES加密技术作者:大牛 ... -
致国内提供安卓应用内容服务商的一封信
2011-12-31 11:07 161安卓应用内容服务商是指提供安卓客户端下载,通过安卓客户端可以访 ... -
致国内1000万中小安卓应用开发者的一封信
2011-12-30 14:53 258基于安卓应用持久健康的发展,以及保护依赖广告嵌入来获得收入的广 ... -
致国内移动广告平台、广告聚合平台及统计平台的一封信
2011-12-30 14:49 1015基于安卓应用持久健康的发展,以及保护依赖广告嵌入来获得收入的广 ... -
致国内提供安卓应用内容服务商的一封信
2011-12-30 14:29 623安卓应用内容服务商是指提供安卓客户端下载,通过安卓客户端可以访 ... -
致国内1000万中小安卓应用开发者的一封信
2011-12-30 14:18 4基于安卓应用持久健康的发展,以及保护依赖广告嵌入来获得收入的广 ... -
致国内移动广告平台、广告聚合平台及统计平台的一封信
2011-12-30 14:13 3基于安卓应用持久健康的发展,以及保护依赖广告嵌入来获得收入的广 ... -
<转载>andriod 断点续传和下载原理分析
2011-12-21 21:48 966最近做一个文件上传和下载的应用对文件上传和下载进行了一个完整的 ... -
《转载》Android大TXT文本文档读取(续)
2011-12-20 10:32 1164原文地址:http://wangliping.net/read ... -
文件 批量重命名
2011-12-19 20:59 925前几天要处理一些图片资料,从看到有人提供了一个批处理的方法,但 ... -
发布应用的一点小感想(一)
2011-12-09 18:08 773<!-- @pa ... -
博客文章搬家成功
2011-12-08 11:33 730博客文章从csdn上搬家成功了~~ 不过博客分类没有导入进来 ... -
android中嵌入广告的小发现
2011-12-07 18:03 1013虽是个新手,前段时间 ... -
android用于打开各种文件的intent,包括以下文件PDF,PPT,WORD,EXCEL,CHM,HTML,TEXT,AUDIO,VIDEO
2011-12-07 17:26 2174以下代码未经测试。但是有我想找的,先贴过来,慢慢了解~~ i ... -
移动互联网个体户
2011-12-06 11:07 1128在网上查了查,现在 还没有人提出过移动互联网个体户这个概念,以 ... -
tabhost里解决按键事件捕获的问题
2011-12-03 16:58 3942这几天参照好多人的代码,改造了一个小程序,咱也使用一下TabH ... -
Android中Fragment的应用
2011-11-21 18:11 806http://blog.sina.com.cn/s/blog_ ... -
在webview中访问互联网应用,碰到弹出窗口怎么办?
2011-11-21 15:12 8739webview加载了一个页面,页面里点某一个button时候弹 ...
相关推荐
在Android平台上,开发人员经常遇到一个棘手的问题,那就是如何正确地读取包含中文字符的TXT文件,因为不恰当的处理往往会导致乱码。本文将深入探讨如何彻底解决这一问题,包括自动判断文档编码类型以及进行转码操作...
以下将详细介绍如何在Android中读取和保存GBK编码的TXT文档。 首先,我们需要了解GBK编码。GBK是GB2312的扩展,它包含了GB2312中的所有字符,并增加了许多其他汉字和符号,总计约20902个汉字。在Java和Android中,...
在Android平台上,对TXT文件进行保存和读取是常见的数据持久化操作,尤其适用于存储少量结构化的文本数据。本文将详细讲解如何在Android应用中实现TXT文件的保存和读取功能,以及涉及到的相关知识点。 首先,我们...
在Android平台上,开发人员经常需要处理各种文件,其中包括文本文件,如TXT文件。这些文件可能包含用户数据、日志信息或者其他应用程序需要解析的数据。本文将详细介绍如何在Android应用中读取TXT文件,并将其内容...
在Android平台上,读取Word文档是一项常见的需求,特别是在开发企业级应用或文件处理类应用时。这个主题主要涉及如何在Android环境下使用各种库和API来实现Word文档的读取功能。下面将详细介绍这一过程。 首先,...
这些文档通常用于展示和传达信息,而Android应用程序可能需要读取或显示这些内容。在这种情况下,Apache POI库是一个常用的解决方案,虽然它在Android上的应用可能面临一些挑战,比如界面渲染效果不佳。 Apache POI...
在Android平台上,开发人员...通过以上步骤,你可以在Android应用中实现读取和显示Word文档的功能,覆盖了从doc到docx的格式,并能正确处理图文混排的内容。实际开发中,可以根据需求进行调整,优化性能和用户体验。
而TXT阅读器作为最基础的文本阅读应用之一,其源代码的学习对于Android开发者来说,是深入理解Android系统、UI设计以及文件处理等方面的重要途径。本文将围绕"Android TXT阅读器"的源代码进行详细解析,探讨其实现的...
“AndroidTXT文本阅读器源码”是一个专门用于阅读TXT格式文本文件的应用程序,它允许用户在Android设备上方便地浏览和管理TXT文档。通过这个项目,我们可以学习到如何在Android平台上进行文本渲染、页面滚动、文件...
在Android平台上,由于原生系统并不支持直接读取Microsoft Office的DOC文件,因此开发者通常需要借助第三方库来实现这一功能。本主题的核心是利用Java的API和特定的库来处理DOC文档,以便在Android应用中展示或操作...
在Android平台上,读取Word文档是一项常见...以上是关于Android平台读取.txt和Word文档的核心知识点,涵盖了文件访问、解析、查找和错误处理等多个方面。在实际开发中,应根据具体需求和项目规模进行适当的调整和优化。
在Android平台上,调用系统内置的应用程序来打开Word文档是一个常见的需求。这涉及到Android的Intent机制,通过Intent我们可以启动各种系统服务或者应用,包括查看、编辑文档等。下面将详细介绍如何实现这一功能。 ...
总的来说,使用Apache POI在Android中生成Word和Excel文档涉及了多个步骤,包括数据读取、文件操作、文档结构构建以及格式化。这个过程需要对XML、Java I/O、Android文件系统权限管理和POI API有深入理解。开发者...
这篇文档将深入解析《Android应用源码之TXT文本阅读器源码》的开发细节,适合于正在学习Android应用开发的学生,尤其是那些准备进行毕业设计的同学。Android平台为开发者提供了丰富的API和工具,使得构建功能丰富的...
`doc`是早期版本的Microsoft Word文档,而`docx`是基于XML的较新格式,包含文本、样式、图像等元素。`xls`是老版Excel表格文件,而`xlsx`同样是XML为基础的新格式,用于存储表格数据和格式。 要解析这些文件,我们...
在Android平台上,对`.txt`文件进行数据查询和记录写入是常见的操作,尤其是在处理文本日志、配置文件或者简单的数据存储时。本教程将详细讲解如何实现这一功能,涉及的主要知识点包括Android的文件系统操作、文件...
在Android平台上,通常我们会使用Java库来处理与Microsoft Office文档相关的任务,如读取和修改Word文档。Apache POI是一个广泛使用的开源库,它允许开发者用纯Java代码操作微软的Office格式,包括Word(.doc)、...
在本场景中,我们将重点讨论如何在Android应用中使用Apache POI的XWPFDocument类来读取和修改Word(.docx)文档。 1. **Apache POI介绍** Apache POI是一个开源项目,主要目的是使Java开发者能够读写Microsoft ...
1. **Android SDK**:所有Android应用都基于Android SDK,它包含了开发Android应用所需的工具、库和API文档。开发者需要熟悉Java或Kotlin编程语言,并了解如何在Android Studio环境下构建项目。 2. **Activity和...
《AndroidTXT文本阅读器源码解析与学习指南》 在当今信息化时代,移动设备上的应用程序已经成为我们生活的重要组成部分。对于IT计算机专业的学生来说,毕业设计是提升技能、展示能力的关键环节。本文将深入剖析...