关闭

Android进阶(十五)socket通信——聊天室

标签: layoutandroid软件开发聊天
50077人阅读 评论(0) 收藏 举报
分类:

想做一个聊天室,花费了将近一天的时间,各种错误。讲解知识点之前,絮叨几句:动手能力还是很重要的,有时看似简单的一个问题,当你真正着手去解决的时候就有可能会遇到各种各样的问题,原因之一就是因为你的知识储备出现了问题。

其实做软件开发做的多了,自己就应该将一些常用的功能封装成为一个工具类,例如网络检查退出APP确认信息开场动画屏幕适配等。

另外,APPLogo对于细心的开发者也很重要,最起码Logo应该是圆角的,这样就会让人看着很舒服,看看别人制作的Logo就会深有体会。

java.net.SocketException: Socket is closed

原因:反复开启同一个应用程序,服务器端产生混淆。

解决方法:重新打开服务器端与客户端

屏幕适配

一、关于布局适配

1、不要使用绝对布局

2、尽量使用match_parent 而不是fill_parent 

3、能够使用权重的地方尽量使用权重(android:layout_weight

4、如果是纯色背景,尽量使用androidshape 自定义。

5、如果需要在特定分辨率下适配,可以在res目录上新建layout-HxW.xml的文件夹。比如要适配1080*1800的屏幕(魅族MX3采用此分辨率)则新建layout-1800x1080.xml的文件夹,然后在下面定义布局。

Android系统会优先查找分辨率相同的布局,如果不存在则换使用默认的layout下的布局。

解决方法:

1. 有的教程(如以上第五条建议)采用的是为不同分辨率的屏幕设置不同的布局,系统加载APP时进行自动选择。

评价:简单情况可取,即只需要适应几种布局时。总总的来看,此方法太笨拙,若要适应100种屏幕,岂不是要设置100种甚至更多的布局!对于复杂情况不可取。

2. 禁止采用硬编码,即固定的数值。可以使用 “wrap_content”,系统就会将视图的宽度或高度设置成所需的最小尺寸以适应视图中的内容,而 “match_parent”(在低于 API 级别 的级别中称为“fill_parent”)则会展开组件以匹配其父视图的尺寸。

如果使用 “wrap_content”和“match_parent” 尺寸值而不是硬编码的尺寸,视图就会相应地仅使用自身所需的空间或展开以填满可用空间。此方法可让布局正确适应各种屏幕尺寸和屏幕方向。

   3. weight是线性布局的一个独特的属性,我们可以使用这个属性来按照比例对界面进行分配,完成一些特殊的需求。我们在布局里面设置为线性布局,横向排列,然后放置两个宽度为0dp的按钮,

分别设置weight12,在效果图中,我们可以看到两个按钮按照12的宽度比例正常排列了,这也是我们经常使用到的场景。

下图为各屏幕分辨率:



0
0
查看评论

socket通信实例(简单的聊天室)

这次程序运用socket通信实现一个简单的聊天室。 一开始是想在控制台实现,但遇到问题是输出和输入都在一个界面上,最后还是编一个swing程序来实现。 服务器对每一个客户端分配一个线程,run函数实现不断从客户端输入数据,然后广播给所有客户端。 下面是服务器端的代码。 public clas...
  • vwwyohann
  • vwwyohann
  • 2015-11-22 09:24
  • 626

Unity3D教程:实现基于Socket通讯的公共聊天室

多个客户端一同使用就是一个简单的公共聊天室。服务端为一个控制台程序使用C#实现,当然,在Unity3D中也相应地使用了C#语言实现客户端,服务端和客户端能实现消息的互通,当服务端接收到某客户端发送过来的消息时将会对客户端列表成员进行广播,这是公共聊天室的最基本的形式。Socket通讯是网络游戏最为基...
  • a787188834
  • a787188834
  • 2017-02-07 03:10
  • 281

网络十五年,从交流方式的变迁看永恒人性,并预测未来交流工具的发展方向

我97年从学校毕业,到现在2012已经整整十五年了。十五年一直从事IT方面的工作,科技进步真可谓是月新日异,交流工具用过BP机、固定电话、二哥大、移动电话、手机等等。比起科技的进步,这十五年中人性的改变几乎微乎其微。   对靓号非理性追求。现在跟十五年前相比,丝毫没变。15年前,我的一...
  • zjyklwg
  • zjyklwg
  • 2012-01-22 15:02
  • 723

前端基础进阶(十四):es6常用基础合集

ES6基础智商划重点 在实际开发中,ES6已经非常普及了。掌握ES6的知识变成了一种必须。尽管我们在使用时仍然需要经过babel编译。 ES6彻底改变了前端的编码风格,可以说对于前端的影响非常巨大。值得高兴的是,如果你熟悉ES5,学习ES6并不需要花费太多的时间就可以掌握,因为常用的...
  • Fuohua
  • Fuohua
  • 2017-04-28 17:08
  • 529

使用android进行Socket通信实现多人聊天应用

先看一下效果图 使用Socket实现多人聊天应用     在讲scoket通信器先可以先了解一下网络协议 手机能够使用联网功能是因为手机底层实现了TCP/IP协议,可以使手机终端通过无线网络建立TCP连接。TCP协议可以对上层网络提供接口,使上层网络数据的传输建立在“无差别”的...
  • mxcsdn
  • mxcsdn
  • 2016-05-25 09:45
  • 3880

Java Socket实现的一个简易聊天室

Java Socket实现的一个简易聊天室 大体思路:用一个ServerSocket来接收所有Client的消息,然后转发给其他Client。在Server端,每个Client对应一个ServerHandleThread线程。在Client端,开一个线程来接收Server端的消息,main线程来接收...
  • u014285517
  • u014285517
  • 2015-07-20 17:38
  • 799

Android进阶十五:Notification进阶

基本使用见Android 通知栏Notification总结一:基本用法 还是引用那张图: 一、使用RemoteViews自定义布局 因为notification所在的进程和应用程序所在的进程不是同一个进程,所以如果notification要使用自定义布局,需要借助RemoteViews来...
  • lixpjita39
  • lixpjita39
  • 2018-01-20 20:54
  • 28

使用WebSocket实现即使通讯(实现一个群聊的聊天室)

随着互联网的发展,传统的HTTP协议已经很难满足Web应用日益复杂的需求了。近年来,随着HTML5的诞生,WebSocket协议被提出,它实现了浏览器与服务器的全双工通信,扩展了浏览器与服务端的通信功能,使服务端也能主动向客户端发送数据
  • canot
  • canot
  • 2016-04-13 09:53
  • 19506

android socket聊天室——也不仅仅是聊天室

前提概要笔者很久之前其实就已经学习过了socket,当然也是用socket做过了聊天室,但是觉得此知识点比较一般,并无特别难的技术点,于是也并未深究。 然而近期一个项目中对socket的使用却让笔者感觉socket强大无比,可以实现诸多功能。个人Socket体验项目主要有关智能家居,需要实现多台手...
  • Double2hao
  • Double2hao
  • 2016-11-21 16:26
  • 5223

Android 进阶12:进程通信之 Socket (顺便回顾 TCP UDP)

不要害怕困难,这是你进步的机会! 读完本文你将了解: OSI 七层网络模型 TCPIP 四层模型 TCP 协议 TCP 的三次握手 TCP 的四次挥手 UDP 协议 Socket 简介 Socket 的基本操作 使用 TCP 通信的 Socket 流程 使用 UDP 通信的 Socket 流程 使用...
  • u011240877
  • u011240877
  • 2017-06-04 18:18
  • 5723
    个人资料
    • 访问:23689160次
    • 积分:58047
    • 等级:
    • 排名:第55名
    • 原创:473篇
    • 转载:41篇
    • 译文:2篇
    • 评论:417条
    流量统计
    你问我答
     有问题?联系我。

    博客专栏
    汪国真--《热爱生命》
          热 爱 生 命
           汪国真

        我不去想是否能够成功

        既然选择了远方

        便只顾风雨兼程

        我不去想能否赢得爱情

        既然钟情于玫瑰

        就勇敢地吐露真诚

        我不去想身后会不会袭来寒风冷雨

        既然目标是地平线

        留给世界的只能是背影

        我不去想未来是平坦还是泥泞

        只要热爱生命

        一切都在意料之中
    最新评论
    轻松一下