Monitor项目开发走过的路~实现一个类似命令行形式的TextView

  在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());
                        }
                  }
});

  下面是最后的实现效果,看起来也是相当不错的。

这里写图片描述

这里写图片描述

这里写图片描述

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值