【亚洲必赢登录】短信发送器,字符编码些许事

原标题:手提式有线电话机短信为啥要限制六十三个汉字?Motorola发短信有字数限制吗?

自己不想写一篇大而全的小说,也无力去追寻那么多材质涵盖全体知识点,尽管想询问越来越多新闻,那里有几篇笔者感到写得精确的文章能够提供参考,本文也有些借鉴了在那之中的剧情。

/*****************2016年4月23日
更新********************************/

/*****************2016年4月23日
更新********************************/

用过效率机的同伙们都会分晓,每一条短信的字数被限定在6拾陆个汉字,超越之后就会被拆分为2条短信发送。

  • 《字符编码的故事:ASCII,GB2312,Unicode,UTF-8,UTF-1陆》
  • 《unicode,ansi,utf-捌,unicodebigendian编码的不相同》

知乎:什么是 7 位元的字符? 英文字符难道不是 八 bit
是三个字符?一条短信到底能容下 140 个英文字符依旧 160 个?

知乎:什么是 7 位元的字符? 英文字符难道不是 8 bit
是一个字符?一条短信到底能容下 140 个英文字符依然 160 个?

缘何要界定在陆二十一个汉字?多安装一点糟糕吗?

基础概念

  • 字符
    字符是各类文字和标记的总称,包罗各国家文字、标点符号、图形符号、数字等,乃至还足以归纳不可能展示的字符(举个例子ASCII标准定义了126个字符,个中三16个字符不只怕显示)。
  • 字符集
    【亚洲必赢登录】短信发送器,字符编码些许事。为了使计算机可以管理字符音信,首先要调控采取哪些字符。这样就产生了3个会面,或然说2个表,称为字符表(character
    repertoire)。当然,也得以认为那就是二个字符集(character set)。
    譬如,将有着的英文字母放在1块儿得以整合1个字符集,将装有的汉字放在一齐能够结合一个字符集,等等。
  • 编码字符集
    对3个字符凑集的享有字符实行编号,那种编号后的字符集叫做编码字符集(这里的编码仅仅指编号,分歧于下文中的编码)。常见的编码字符集有ASCII、Unicode、GBK等。

能够那样来驾驭:字符串是由字符构成,字符在Computer硬件中经过贰进制方式储存,那种2进制模式正是编码。倘诺直白使用
“字符串️字符️2进制表示(编码)”
,会大增区别门类编码之间转变的扑朔迷离。所以引进了贰个抽象层,“字符串️字符️与存款和储蓄非亲非故的意味️贰进制表示(编码)”
,那样就能够用一种与仓库储存非亲非故的花样表示字符,分歧的编码之间转移时方可先转移到这几个抽象层,然后再更动为任何编码情势。
比如:Unicode 就是 “与仓库储存无关的代表”,UTF-捌 正是 “二进制表示”。

维基百Corey「短信」词条之类概念「短信」:

维基百Corey「短信」词条之类概念「短信」:

实际上,是有历史原因的。

ASCII字符集

普普通通说的ASCII字符集不蕴含扩展集,唯有1叁十三个字符,由此其编码的存款和储蓄只须要动用柒个bit,2个字节丰盛了最高位永久都以0。举例字符’0’,其代码是十六进制的0x30,贰进制表示为00110000。

那里说个和ASCII字符集有关的编码方案,GSM规范协议规定单条短信最多存储13捌个字节的内容,若是短信内容只包涵ASCII字符,因为ASCII字符的数量第肆人必定是0,所以GSM标准中明确了7bit编码的短信格式,只用多个bit来连接存款和储蓄ASCII字符,那样原本1三18个八bit的积累空间,就能够积攒156个7bit的数额。若是哪个人未来手上还有NOKIA手提式有线电电话机,能够拿起来看看只含有ASCII字符的短信是或不是能够输入1陆10个字符,要是短信中涵盖了非ASCII字符(举个例子汉语),那么富有字符都会化为双字节储存的编码(UCS-二编码),一条短信的内容就苏醒成只能发送七10个字符。现近来的智能手提式无线电话机多数都援助短信拼接,并不是说单条短信的体量扩大了,而是将你编写的超过常规单条短信体积的短信分成多条发送,运转商也是按多条短信计的。

1则短信能够容纳140字节,相当于约16二十一个陆个人元的字符、或是1三1柒个⑧-bit的字符,普通话字、罗马尼亚语字与日文字那一个占二-byte的字符则可容纳陆14个。(使用Unicode系统)。这一个不包括额外的种类情报。

一则短信能够容纳140字节,也正是约1陆十个八人元的字符、或是1叁拾贰个8-bit的字符,汉语字、韩语字与日文字那些占二-byte的字符则可容纳陆1捌个。(使用Unicode系统)。这一个不包罗额外的体系情报。

缘由要追溯到上世纪80年间,弗Readehelm
希尔ebrand是今后手提式有线电话机短信技能的主发明人,陆十四个汉字(157个英文字符)便是他引起的。

GB体系字符集

中文境遇下壹旦要健康显示字符,仅依赖ASCII字符集是不行的,因而我们国家制定了壹多元的国家规范(GB),在那之中就包蕴GB2312、GB一两千、GBK、GB18030……,最新的正规是GB18030,包括702四十二个字符。

再有小编的无绳电话机怎么是最多 150 个英文字母?那是 七.5 位元的编码格局吗?

再有自身的手提式无线电话机怎么是最多 150 个英文字母?那是 7.5 位元的编码格局吗?

亚洲必赢登录 1

Unicode字符集

Unicode字符集由多语言软件成立商组成的会集码订盟(Unicode
Consortium)与国标化协会的ISO-106四陆职业组制订,为各个语言中的每种字符钦赐统壹且唯一的代码点,以知足跨语言、跨平台调换和拍卖文件的供给。中、日、韩的二种文字占用了Unicode中0x两千到0x九FFF的有个别Unicode近日周边利用的是UCS-贰编码,它用多个字节来编码二个字符,
比方汉字”一”的编码是0x四E00。事实上Unicode对汉字支持不怎么好,那也是不能的,简体和复杂性总共有670000个汉字,而UCS-2最多能表示65537个,所以Unicode只好排除有个别大概不用的方块字,辛亏GB231二字符聚焦常用的简体汉字也然而67陆2个,为了能代表全数汉字,Unicode也有UCS-四标准,正是用
陆个字节来编码字符。

Unicode代码点范围为0x00x10FFFF,共计1114112个代码点,划分为编号016的1七个字符平面,每一种平面包蕴655三十七个代码点。在那之中编号为0的平面最为常用,称为基本多语种平面(Basic
Multilingual Plane, BMP);别的平面则号称帮助语言平面。

为了描述3个代码点,可以选用U加十6进制整数的主意。举个例子,U+004壹意味英文大写字母A,U+四E00代表汉字”1”。

 

 

他立即应用一台打字机随便打出部分由字母组成的新闻,令人离奇的是,这么些新闻每一条都以唯有1两行,而且总字数也不会超越15七个,160便成为他以为颇具美妙的数字。

编码

有关编码格局,当然能够应用类似ASCII字符集的编码格局——代码点等值调换法(那是自己要好起的名字)。既然Unicode代码点的值的限定是0~0x拾FFF,那么能够用1个贰一bit的编码单元来编码,直接把代码点等值转变到2一bit的二进制系列。

但是那存在1个上空应用的难点,举例对于利用保加坎Pina斯语的人来说,ASCII基本得以满意使用。假设运用ASCII码,只要求3个字节来存款和储蓄字符,可是若选用刚才的思路,供给接近一个字节来储存,那明摆着是荒废空间的。

壹经急需支持的字符集再少一些,仅补助理编辑号0的平面,那至少也有65伍三23个字符,须求1六bit的空中(二字节)来存款和储蓄2个字符,即UCS-2编码,那种编码用来储存ASCII字符也是1种浪费。

Unicode在非常短1段时间内不也许放手,直到互连网的面世,为缓和Unicode如何在网络上传输的主题素材,于是面向传输的居多
UTF(UCS Transfer
Format)标准出现了,顾名思义,UTF-八正是历次八个位传输数据,而UTF-1六正是每回15个位。UTF-八正是在互联英特网选用最广的一种Unicode的得以落成方式,这是为传输而规划的编码,并使编码无国界,那样就足以显得举世上具有知识的字符了。

yskin:

yskin:

Friedhelm
希尔ebrand四四岁的时候,他感觉近来手提式有线电话机短信1五23个字符已经充足使用,于是决定把那一个数字定为一条短信内容的篇幅上线。

UTF-8

UTF-八最大的三个表征,正是它是壹种变长的编码方式。它能够利用一~多少个字节表示二个标记,依据不一样的暗号而变化字节长度,当字符在ASCII
码的限量时,就用三个字节表示,保留了ASCII字符1个字节的编码做为它的一有的,注意的是Unicode一个汉语字符占1个字节,而UTF-八贰个普通话字符占一个字节)。从Unicode到UTF-八并不是直接的附和,而是要过一些算法和规则来更改。

Unicode符号范围(十六进制) UTF-8编码方式(二进制)
0000 0000-0000 007F 0xxxxxxx
0000 0080-0000 07FF 110xxxxx 10xxxxxx
0000 0800-0000 FFFF 1110xxxx 10xxxxxx 10xxxxxx
0001 0000-0010 FFFF 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx

举个例证:
或然用中文“①”,其Unicode值为0x肆E00,落在0800-FFFF的范围内,事实上汉语基本上都在这几个区域。0x肆E00的贰进制表示为0100111000000000,转变到UTF-八正是11十0十0 十111000一千0000,对应的十6进制表示是0xE四 0xB八 0x80。

八位元字符正是指标准ASCII去掉最高位的0。以那种措施开始展览编码,在美利坚合资国这么的国度,发送的短信字符都以ASCII码表里的,所以没须求浪费2个字位。

七人元字符正是目标准ASCII去掉最高位的0。以那种方式打开编码,在U.S.A.如此的国度,发送的短信字符都以ASCII码表里的,所以没必要浪费一个字位。

随着短信工夫的迈入,各大运维商也干扰把16拾8个字符作为单条短信的上线。

UTF-16

UTF-16的编码单元是16bit,对于种种代码点,选取三个也许二个编码单元来表示,因而那是1个变长表示。

 

 

亚洲必赢登录 2

UTF-32

UTF-3贰采替代码点等值调换法,将各样代码点编码为3个32bit的编码单元(4字节),因而空间效能好低,不及其余Unicode编码应用广泛。

而短信协议帮忙7字位、8字位、1六字位3种编码,柒字位用于United States,能够发送15八个字母,捌字位用于欧洲江山,16字位用于中国和东瀛韩俄等国家,使用UCS-贰编码。而UCS-二把具有Unicode字符编码为2字节,所以纵然英文字母也会编码成三个字节。

而短信协议帮忙柒字位、八字位、1陆字位3种编码,七字位用于U.S.,能够发送1伍20个字母,八字位用于亚洲国家,1陆字位用于中国和东瀛韩俄等国家,使用UCS-2编码。而UCS-二把具有Unicode字符编码为二字节,所以就算英文字母也会编码成3个字节。

对编制程序技艺有所理解的同室知道,由于字符自身使用编码格局的两样,最后将变成字符个数的比不上。对于英文字母来讲,一般选用5位ASCII编码,中文则为伍个人UCS-二编码,要求占用3个字节。

工具推荐

此地有个网站提供的转码效果相当好,比起一些站长工具更规范。

亚洲必赢登录 3

Paste_Image.png

上海教室是采纳该网址寻找普通话字符“1”的结果,能够见到其Unicode值为U+4E00,UTF-8编码为0xE4
0xB八 0x80,在UPAJEROL中需求转码为%E四%B八%80,在js脚本中则是\u4e00……。

 

亚洲必赢登录 , 

161几个英文字符要用6个人ASCII编码来进展表示,须要7*161几人。可是换到5人UCS-二编码表示,则需求七*160/八位。同时,由于普通话汉字须求占用2个字符,那样中文字符总量正是七*160/8/贰,刚好等于70。

举多少个栗子

接纳Windows Mobile
六系统做测试,新建短信后输入3个英文字母,下边展现1/160,再输入1个出示2/160,那便是柒字位状态,能够在140字节里装下156个字符。当再输入多个汉字的时候,下边包车型地铁体现立时成为3/70,那正是1陆字位状态,每种字符都占三个字节,140字节只可以装下七22个字符,哪怕里面是陆二十一个英文字符加3个汉字。

使用Windows Mobile
6系统做测试,新建短信后输入一个英文字母,下边展现1/160,再输入一个来得2/160,那正是七字位状态,能够在140字节里装下1伍拾柒个字符。当再输入3当中华夏族民共和国字的时候,下边包车型地铁展现立即成为3/70,那便是1陆字位状态,每一种字符都占一个字节,140字节只可以装下66个字符,哪怕里面是七10个英文字符加二个汉字。

这便是为何运维商规定单条短信的方块字限制为七18个的由来。

有道翻译

用有道翻译的API来做示范,大家通过API获取单词”word”的中文翻译。

GET http://fanyi.youdao.com/openapi.do?keyfrom=WoxLauncher&key=1247918016&type=data&doctype=json&version=1.1&q=word

回去的JSON如下所示:

{
  "translation": [
    "词"
  ],
  "basic": {
    "us-phonetic": "wɝd",
    "phonetic": "wɜːd",
    "uk-phonetic": "wɜːd",
    "explains": [
      "n. [语] 单词;话语;消息;诺言;命令",
      "vt. 用言辞表达",
      "n. (Word)人名;(英)沃德"
    ]
  },
  "query": "word",
  "errorCode": 0,
  "web": [
    {
      "value": [
        "单词",
        "字",
        "字 (计算机)"
      ],
      "key": "word"
    },
    {
      "value": [
        "构词法",
        "造词法",
        "词性转换"
      ],
      "key": "Word Formation"
    },
    {
      "value": [
        "关键字",
        "中心词",
        "关键词"
      ],
      "key": "key word"
    }
  ]
}

归来的内容涵盖粤语,从响应头大家能够见到重临的JSON使用了UTF-八编码:

亚洲必赢登录 4

Paste_Image.png

用Wireshark抓包看看具体内容:

亚洲必赢登录 5

Paste_Image.png

如上海教室所示,translation这么些key对应的数组内容应当是"词",所以大家来看高亮区域的剧情是22 E8 AF 8D 22,0x22对应ASCII字符",0xE8
0xAF 0x8D正是中文的UTF-8编码。

 

 

P.S
对于未有运用过功能机的人的话,大概一直都不领会原来短信是有字数限制的。重临微博,查看越来越多

ONE·一个

以此API是透过抓包抓出来的,哪个人让她们不走https呢?

GET http://v3.wufazhuce.com:8000/api/reading/index

归来数据太多,仅截取一小段进展剖析。

{
  "res": 0,
  "data": {
    "essay": [
      {
        "content_id": "2176",
        "hp_title": "软糖| “白日梦” _ 初夏的味道",
        "hp_makettime": "2017-04-03 06:00:00",
        "guide_word": "我们每周会选择一个主题,由七个作者绘制不同风格的短篇漫画,每天一幅。",
        "start_video": "",
        "author": [
          {
            "user_id": "7742828",
            "user_name": "双麒_宋 ",
            "desc": "因爱而画,美好的作品产生于最压抑的欲望。",
            "wb_name": "",
            "is_settled": "0",
            "settled_type": "0",
            "summary": "因爱而画,美好的作品产生于最压抑的欲望。",
            "fans_total": "574",
            "web_url": "http://image.wufazhuce.com/FoPpyeue8ajoRlZ4Fy39a56o4NO-"
          }
        ],
    ......
    }
......
}

回到的剧情涵盖普通话,但从响应头大家看不到再次来到的JSON使用了怎么编码格式:

亚洲必赢登录 6

Paste_Image.png

用Wireshark抓包看看具体内容:

亚洲必赢登录 7

Paste_Image.png

如上海体育场合所示,这些API请求重回的JSON数据输出的是汉语的Unicode转义字符,那实则也是JS对汉语的正规管理形式,揣测后台大概是NodeJS达成的。

本人是咕咕鸡,3个还在不停学习的全栈工程师。
热爱生活,喜欢跑步,家庭是自家不止迈进发展的引力。

设若短信超越长度,那么系统就自行分成多条短信来发。因为要参加一些标志性字符以表示顺序,所以英文每条一5三个,汉语每条6三个。接收方若是是新一点的手提式有线电话机就会把这几条合并后出示给用户,老一点的无绳电电话机就会独家彰显每条短信。

壹经短信超越长度,那么系统就活动分成多条短信来发。因为要投入一些标志性字符以代表顺序,所以英文每条壹五三个,中文每条六多少个。接收方如若是新一点的无绳电话机就会把这几条合并后显得给用户,老一点的手机就会分别展现每条短信。

主编:

 

 

诸如,输入陆1几个普通话,下边展现70/70,再加3个时上面突显“71/13肆(二短音讯)”。输入1伍17个英文,下边展现160/160,再加七个显得“1陆三分之一0陆(二短新闻)”。

譬如说,输入6玖当中文,上面展现70/70,再加一个时下边展现“71/13肆(二短新闻)”。输入156个英文,下边显示160/160,再加1个出示“1633.33%0陆(二短音讯)”。

 

 

行使13玖信箱做测试,里面发送短信无论什么字符都以以UCS-贰编码,当输入一三十三个字符时,展现将按三条短信计费。其余,表达里还涉及,最多只可以支持350字的短信。

动用13九信箱做测试,里面发送短信无论什么样字符都以以UCS-2编码,当输入13贰个字符时,展现将按3条短信计费。别的,表明里还关乎,最八只可以补助350字的短信。

 

 

楼主提到的150字限制没听大人说过,英文谷歌(Google)没找到,中文谷歌(Google)只搜到0九年时邮电通讯在测试150字符短信系统。

楼主提到的150字限制没据悉过,英文谷歌(Google)没找到,汉语谷歌(Google)只搜到0玖年时邮电通讯在测试150字符短信系统。

/*************************************************/

/*************************************************/

  1. 拖动控件的话编写翻译器自动加的layout_blow=”@+id/xxx” id那多少个部分从没+号
    Ctrl+f批量替换
    艾德itText呈现的行数android:singleLine=”true”一行, android:lines=”伍”
    多行
    模拟器超时原因 Computer配置低,修改超时时间,模拟器socket挂了,重启一下
    短信api SmsManager倘若过时,导包的标题gsm
    二G一代的,即便1个类不只怕new对象,那么它必然存在一个getDefaut大概getInstance的静态方法

  2. SmsManager的方法
    sendDataMessage(发送彩信)
    sendMultipartTextMessage(发送多条音信),
    sendTextMessage(目的手提式有线电话机, null(来源手提式有线电电话机不帮助), text, sentIntent,
    deliveryIntent)后七个参数,延迟告诉和送达报告,不关切填null
    急需以此权力 android.permission.SEND_SMS

  1. 拖动控件的话编写翻译器自动加的layout_blow=”@+id/xxx” id那几个部分从没+号
    Ctrl+f批量替换
    艾德itText彰显的行数android:singleLine=”true”一行, android:lines=”伍”
    多行
    模拟器超时原因 Computer配置低,修改超时时间,模拟器socket挂了,重启一下
    短信api SmsManager如若过时,导包的难点gsm
    二G一代的,如若叁个类极小概new对象,那么它必然存在贰个getDefaut或许getInstance的静态方法

  2. SmsManager的方法
    sendDataMessage(发送彩信)
    sendMultipartTextMessage(发送多条新闻),
    sendTextMessage(目标手提式有线电话机, null(来源手提式有线电话机不帮衬), text, sentIntent,
    deliveryIntent)后多个参数,延迟告诉和送达报告,不关心填null
    亟待以此权力 android.permission.SEND_SMS

短信都要最大尺寸的限量的,android提供了3个api用来拆分短信divideMessage(),重返ArrayList<String>,循环境与发展送for(String
str:contents){}

短信都要最大尺寸的限定的,android提供了三个api用来拆分短信divideMessage(),重返ArrayList<String>,循环境与发展送for(String
str:contents){}

急需张开七个模拟器测试,电话号码正是端口号,此功效可以做出短信群发器

亟需敞开五个模拟器测试,电话号码就是端口号,此成效能够做出短信群发器

activity代码:

activity代码:

package com.tsh.sms;

import java.util.ArrayList;

import android.app.Activity;
import android.os.Bundle;
import android.telephony.SmsManager;
import android.text.TextUtils;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;

public class MainActivity extends Activity implements OnClickListener {
    private EditText et_number;
    private EditText et_content;
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        Button bt_send=(Button) findViewById(R.id.bt_send);
        et_number=(EditText) findViewById(R.id.et_number);
        et_content=(EditText) findViewById(R.id.et_content);
        bt_send.setOnClickListener(this);
    }

    @Override
    public void onClick(View v) {
        switch (v.getId()) {
        case R.id.bt_send:
            String number=et_number.getText().toString().trim();
            String content=et_content.getText().toString().trim();
            if(TextUtils.isEmpty(number)||TextUtils.isEmpty(content)){
                Toast.makeText(this, "电话号码和内容都不能为空", Toast.LENGTH_SHORT).show();
                return;
            }
            SmsManager smsManager=SmsManager.getDefault();
            ArrayList<String> contents = smsManager.divideMessage(content);
            for(String str:contents){
                smsManager.sendTextMessage(number, null, str, null, null);
            }

            break;
        }
    }
}
package com.tsh.sms;

import java.util.ArrayList;

import android.app.Activity;
import android.os.Bundle;
import android.telephony.SmsManager;
import android.text.TextUtils;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;

public class MainActivity extends Activity implements OnClickListener {
    private EditText et_number;
    private EditText et_content;
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        Button bt_send=(Button) findViewById(R.id.bt_send);
        et_number=(EditText) findViewById(R.id.et_number);
        et_content=(EditText) findViewById(R.id.et_content);
        bt_send.setOnClickListener(this);
    }

    @Override
    public void onClick(View v) {
        switch (v.getId()) {
        case R.id.bt_send:
            String number=et_number.getText().toString().trim();
            String content=et_content.getText().toString().trim();
            if(TextUtils.isEmpty(number)||TextUtils.isEmpty(content)){
                Toast.makeText(this, "电话号码和内容都不能为空", Toast.LENGTH_SHORT).show();
                return;
            }
            SmsManager smsManager=SmsManager.getDefault();
            ArrayList<String> contents = smsManager.divideMessage(content);
            for(String str:contents){
                smsManager.sendTextMessage(number, null, str, null, null);
            }

            break;
        }
    }
}

 

 

layout代码

layout代码

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    tools:context="com.tsh.sms.MainActivity" >

    <TextView
        android:id="@+id/tv_input_number"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentLeft="true"
        android:layout_alignParentTop="true"
        android:text="@string/input_tel_number" />

    <EditText
        android:id="@+id/et_number"
        android:singleLine="true"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_alignParentLeft="true"
        android:layout_below="@id/tv_input_number"
        android:ems="10"
        android:inputType="phone" >

        <requestFocus />
    </EditText>

    <TextView
        android:id="@+id/tv_number"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentLeft="true"
        android:layout_below="@id/et_number"
        android:text="@string/sms_content" />

    <EditText
        android:id="@+id/et_content"
        android:lines="5"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_alignParentLeft="true"
        android:layout_below="@id/tv_number"
        android:ems="10" />

    <Button
        android:id="@+id/bt_send"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentLeft="true"
        android:layout_below="@id/et_content"
        android:text="@string/send" />

</RelativeLayout>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    tools:context="com.tsh.sms.MainActivity" >

    <TextView
        android:id="@+id/tv_input_number"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentLeft="true"
        android:layout_alignParentTop="true"
        android:text="@string/input_tel_number" />

    <EditText
        android:id="@+id/et_number"
        android:singleLine="true"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_alignParentLeft="true"
        android:layout_below="@id/tv_input_number"
        android:ems="10"
        android:inputType="phone" >

        <requestFocus />
    </EditText>

    <TextView
        android:id="@+id/tv_number"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentLeft="true"
        android:layout_below="@id/et_number"
        android:text="@string/sms_content" />

    <EditText
        android:id="@+id/et_content"
        android:lines="5"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_alignParentLeft="true"
        android:layout_below="@id/tv_number"
        android:ems="10" />

    <Button
        android:id="@+id/bt_send"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentLeft="true"
        android:layout_below="@id/et_content"
        android:text="@string/send" />

</RelativeLayout>

 

 

divideMessage

divideMessage

网站地图xml地图