Monitor项目开发走过的路~实现一个类似命令行形式的TextView
来源:互联网 发布:sql 不等于空字符串 编辑:程序博客网 时间:2024/06/01 22:29
在Monitor项目开发过程中我们想实现一个类似于电脑上Dos命令行形式的窗口,功能是实现向服务器提交命令,然后将服务器返回的结果以字符形式显示在一个窗口中,可以不断地追加。最开始我思考之后的想法是利用一个RecyclerView来实现,就像QQ发送与接收消息那样子。但是很快这个方案就被团队的成员否定了,因为不太符合APP的整体风格,于是就只能按照最初的想法来用做一个只显示文本的界面,那毫无疑问就选择用TextView了,它有一个append()方法可以随时追加字符串。
try { InputStream responseIn = mControlOtherMode.resultTranIn; final byte[] buffer = new byte[1024]; while (true) { int length = responseIn.read(buffer); System.out.println(length); final String resonse = new String(buffer, 0, length, "GBK"); runOnUiThread(new Runnable() { @Override public void run() { mTextView.append(resonse); } }); if (length == -1) break; } System.out.print("网络断开333");} catch (UnsupportedEncodingException e) { e.printStackTrace();} catch (IOException e) { e.printStackTrace();}
如上代码在while循环中不断地从输入流读取数据然后用mTextView.append(resonse)来添加到TextView中,你可以在数据上做一些处理,例如每次返回的数据后都加一个换行。为了效果更加的接近命令行,你可能会想到TextView的内容多到占满整个屏幕时怎么办,其实只要加入下面的代码即可让你的TextView可以滑动起来,扩展它的显示范围。
mTextView = (TextView) findViewById(R.id.msg_textView);mTextView.setMovementMethod(ScrollingMovementMethod.getInstance());
当然还可以将你的命令行进一步优化,设想在你调用软键盘输入命令后如果命令行能自动滑动到刚刚返回的消息位置时那不是很好,那么只要在你调用append()之后计算要移动的目标位置接着调用mTextView.scrollTo()方法即可。
runOnUiThread(new Runnable() { @Override public void run() { mTextView.append(resonse); //自动移动到文字的最低端 offset = mTextView.getLineCount() * mTextView.getLineHeight(); if (offset > mTextView.getHeight()) { mTextView.scrollTo(0, offset - mTextView.getHeight() + mTextView.getLineHeight()); } }});
下面是最后的实现效果,看起来也是相当不错的。
阅读全文
0 0
- Monitor项目开发走过的路~实现一个类似命令行形式的TextView
- Monitor项目开发走过的路~透明效果的实现
- Monitor项目开发走过的路~定义启动展览页
- Monitor项目开发走过的路~RecyclerView添加子项分割线
- Monitor项目开发走过的路~透明Dialog型Activity
- Monitor项目开发走过的路~android:windowFullscreen与软键盘冲突问题
- Monitor项目开发走过的路~子线程Toast全解析
- Monitor项目开发走过的路~自定义AlertDialog,设置子view
- Monitor项目开发走过的路~一键关闭APP(所有Activity)
- 一个程序员走过的路
- 一个类似node.js的项目fibjs,国人开发
- android如果重写onDraw实现一个类似TextView可以显示表情和链接的控件(一)
- android如果重写onDraw实现一个类似TextView可以显示表情和链接的控件(二)
- Android:一个TextView分段改变样式、添加监听事件的实现方式(类似朋友圈评论)
- android 实现TextView实现跑马灯形式的字体
- 自定义UITableViewCell实现ibooks类似的图书列表形式
- 自定义UITableViewCell实现ibooks类似的图书列表形式
- 自定义Textview实现类似电池进度条的效果
- 蓝牙5.0 mesh技术分享(二)
- 变量比较
- Training Set
- GCC 内存对齐
- ssh_day01_07-eclipse的svn操作(添加项目到svn)
- Monitor项目开发走过的路~实现一个类似命令行形式的TextView
- 数据库的数据类型优化
- ssh_day01_08-eclipse的svn操作(下载项目到工作空间)
- 学习路线
- 解救臃肿的代码,代码封装利器自定义注解深入剖析
- 用形参操控实参时区分地址和内容
- Python&Opencv&Pycharm安装及环境配置
- 简述重载与重写的区别
- C6748_EMIF_NandFlash_访问异步地址