手提式有线电话机短信为啥要限量70个汉字,字符编码些许事

原标题:手提式有线电话机短信为何要界定7四个汉字?Motorola发短信有字数限制吗?

我不想写1篇大而全的稿子,也无力去搜索那么多材质涵盖全体知识点,假如想询问更多新闻,这里有几篇笔者感觉写得正确的稿子能够提供参考,本文也部分借鉴了其中的剧情。

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

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

用过功效机的伙伴们都会知道,每一条短信的字数被限定在70个汉字,抢先之后就会被拆分为二条短信发送。

  • 《字符编码的传说:ASCII,GB231二,Unicode,UTF-八,UTF-1陆》
  • 《unicode,ansi,utf-捌,unicodebigendian编码的区分》

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

知乎:什么是 7 365bet官网 ,位元的字符? 英文字符难道不是 捌 bit
是1个字符?一条短信到底能容下 140 个英文字符照旧 160 个?

干什么要限量在六十三个汉字?多安装一点不好吗?

基础概念

  • 字符
    字符是各类文字和标志的总称,包涵各国家文字、标点符号、图形符号、数字等,甚至还足以包涵无法突显的字符(比如ASCII标准定义了1二十七个字符,其中三十一个字符不可能出示)。
  • 字符集
    为了使Computer能够处理字符音信,首先要调控选用哪些字符。那样就产生了多少个成团,恐怕说一个表,称为字符表(character
    repertoire)。当然,也足以以为这正是三个字符集(character set)。
    例如,将具备的英文字母放在①块儿得以结合1个字符集,将全数的汉字放在一块儿得以构成3个字符集,等等。
  • 编码字符集
    对2个字符集中的富有字符进行编号,这种编号后的字符集叫做编码字符集(那里的编码仅仅指编号,分裂于下文中的编码)。常见的编码字符集有ASCII、Unicode、GBK等。

能够如此来精晓:字符串是由字符构成,字符在处理器硬件中经过贰进制情势储存,这种贰进制方式便是编码。假使平昔使用
“字符串️字符️2进制表示(编码)”
,会追加分化体系编码之间转换的复杂。所以引进了贰个抽象层,“字符串️字符️与储存非亲非故的象征️2进制表示(编码)”
,那样就足以用1种与仓库储存毫不相关的情势表示字符,差别的编码之间转移时能够先转移到那一个抽象层,然后再转变为其余编码情势。
举个例证:Unicode 正是 “与存款和储蓄无关的象征”,UTF-8 正是 “2进制表示”。

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

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

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

手提式有线电话机短信为啥要限量70个汉字,字符编码些许事。ASCII字符集

万般说的ASCII字符集不包涵扩张集,唯有1贰十七个字符,因而其编码的储存只须求动用8个bit,3个字节足够了高高的位恒久都是0。比如字符’0’,其代码是十6进制的0x30,2进制表示为001一千0。

那里说个和ASCII字符集有关的编码方案,GSM标准协议规定单条短信最多囤积1三十几个字节的始末,借使短信内容只含有ASCII字符,因为ASCII字符的数额第2个人必定是0,所以GSM标准中明确了七bit编码的短信格式,只用多少个bit来连接存款和储蓄ASCII字符,那样原本13十六个8bit的储存空间,就足以储存16十个七bit的数目。要是何人现在手上还有NOKIA手提式有线电话机,能够拿起来看看只含有ASCII字符的短信是或不是能够输入16二十一个字符,借使短信中涵盖了非ASCII字符(比如中文),那么全部字符都会成为双字节储存的编码(UCS-二编码),一条短信的剧情就死灰复燃成只好发送七18个字符。现近来的智能手提式有线电话机许多都援救短信拼接,并不是说单条短信的体积增添了,而是将你编写的赶过单条短信体积的短信分成多条发送,运行商也是按多条短信计的。

1则短信能够容纳140字节,也正是约1伍15个6人元的字符、或是131个捌-bit的字符,普通话字、塞尔维亚语字与日文字这一个占二-byte的字符则可容纳7十个。(使用Unicode系统)。这几个不包含额外的系统情报。

一则短信能够容纳140字节,也等于约157个八位元的字符、或是1三十柒个八-bit的字符,中文字、俄语字与日文字这几个占2-byte的字符则可容纳陆16个。(使用Unicode系统)。那些不包蕴额外的种类情报。

原因要追溯到上世纪80年间,Friedhelm
希尔ebrand是以后手提式有线电话机短信技巧的主发明人,陆21个汉字(15九个英文字符)就是她挑起的。

GB体系字符集

中文环境下壹旦要健康呈现字符,仅依靠ASCII字符集是可怜的,因而大家国家制定了一密密麻麻的国家标准(GB),个中就总结GB231二、GB一3000、GBK、GB18030……,最新的正规化是GB18030,包涵702四十多少个字符。

还有我的无绳电话机怎么是最多 150 个英文字母?这是 七.伍 位元的编码情势吗?

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

365bet官网 1

Unicode字符集

Unicode字符集由多语言软件创建商组成的联结码联盟(Unicode
Consortium)与国标化社团的ISO-拾646职业组制订,为各样语言中的每一种字符内定统1且唯1的代码点,以满足跨语言、跨平台转变和处理公事的渴求。中、日、韩的二种文字占用了Unicode中0x2000到0x九FFF的1些
Unicode最近左近使用的是UCS-二编码,它用多少个字节来编码3个字符,
比如汉字”1″的编码是0x4E00。事实上Unicode对汉字援助不怎么好,那也是无法的,简体和复杂总共有六60000个汉字,而UCS-2最多能表示65五三十八个,所以Unicode只可以排除有的大约不用的汉字,幸而GB231二字符集中常用的简体汉字也然而67陆三个,为了能代表具有汉字,Unicode也有UCS-4规范,就是用
四个字节来编码字符。

Unicode代码点范围为0x00x10FFFF,共计1114112个代码点,划分为编号01陆的一四个字符平面,每种平面包括655叁十九个代码点。在那之中编号为0的平面最为常用,称为基本多语种平面(Basic
Multilingual Plane, BMP);其余平面则号称帮衬语言平面。

为了描述三个代码点,能够采取U加十陆进制整数的形式。比如,U+00四壹意味英文大写字母A,U+四E00表示汉字”壹”。

 

 

他迅即利用壹台打字机随意打出一部分由字母组成的音信,让人奇异的是,这几个信息每一条都以唯有一两行,而且总字数也不会超过157个,160便成为她备感颇具美妙的数字。

编码

有关编码格局,当然能够运用类似ASCII字符集的编码形式——代码点等值调换法(那是自小编本人起的名字)。既然Unicode代码点的值的界定是0~0x10FFF,那么可以用三个贰1bit的编码单元来编码,直接把代码点等值调换到二壹bit的2进制系列。

只是那存在1个空间利用的标题,例如对于利用乌Crane语的人来说,ASCII基本能够满足使用。即使采纳ASCII码,只要求二个字节来囤积字符,不过若使用刚才的思绪,须求将近一个字节来存储,那眼看是浪费空间的。

假设急需补助的字符集再少1些,仅协理理编辑号0的平面,那至少也有6553四个字符,须求1陆bit的空间(二字节)来存款和储蓄一个字符,即UCS-二编码,那种编码用来储存ASCII字符也是一种浪费。

Unicode在非常长一段时间内不恐怕放手,直到网络的出现,为化解Unicode如何在互联网上传输的标题,于是面向传输的很多UTF(UCS Transfer
Format)标准现身了,顾名思义,UTF-8正是历次几个位传输数据,而UTF-1六正是每一次拾伍个位。UTF-八正是在互连网上利用最广的一种Unicode的落实形式,那是为传输而安插的编码,并使编码无国界,那样就足以显得全球上保有知识的字符了。

yskin:

yskin:

弗Readehelm
Hillebrand4四虚岁的时候,他感觉近来手机短信157个字符已经足足使用,于是决定把那几个数字定为一条短信内容的字数上线。

UTF-8

UTF-八最大的多少个天性,便是它是一种变长的编码方式。它可以选择壹~陆个字节表示2个符号,依据不相同的标志而变化字节长度,当字符在ASCII
码的界按时,就用三个字节表示,保留了ASCII字符二个字节的编码做为它的一某个,注意的是Unicode2当中文字符占一个字节,而UTF-八七个中文字符占贰个字节)。从Unicode到UTF-8并不是直接的照应,而是要过部分算法和规则来转变。

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

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

八位元字符正是目的准ASCII去掉最高位的0。以那种措施举行编码,在U.S.A.这么的国家,发送的短信字符都以ASCII码表里的,所以没要求浪费三个字位。

伍人元字符正是目的准ASCII去掉最高位的0。以这种方法张开编码,在花旗国那样的国家,发送的短信字符都以ASCII码表里的,所以没须要浪费多少个字位。

乘机短信手艺的上进,各小运营商也混乱把1五15个字符作为单条短信的上线。

UTF-16

UTF-1陆的编码单元是1六bit,对于每一个代码点,选用二个大概一个编码单元来表示,因此那是三个变长表示。

 

 

365bet官网 2

UTF-32

UTF-3二采替代码点等值转变法,将每种代码点编码为一个32bit的编码单元(四字节),因而空间成效较低,不比其他Unicode编码应用普及。

而短信协议协助七字位、八字位、1六字位三种编码,7字位用于U.S.A.,能够发送1陆十一个假名,八字位用于北美洲国家,1六字位用于中国和东瀛韩俄等国家,使用UCS-二编码。而UCS-二把持有Unicode字符编码为二字节,所以纵然英文字母也会编码成一个字节。

而短信协议协理7字位、八字位、16字位叁种编码,柒字位用于United States,能够发送1陆10个字母,八字位用于欧洲国家,1陆字位用于中国和东瀛韩俄等国家,使用UCS-二编码。而UCS-二把富有Unicode字符编码为2字节,所以即使英文字母也会编码成三个字节。

对编制程序本领有所通晓的同窗知道,由于字符自己使用编码形式的不等,最后将变成字符个数的例外。对于英文字母来讲,壹般采纳5人ASCII编码,粤语则为八个人UCS-2编码,必要占用1个字节。

工具推荐

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

365bet官网 3

Paste_Image.png

上海体育地方是行使该网址搜索中文字符“一”的结果,能够见见其Unicode值为U+肆E00,UTF-八编码为0xE4
0xB捌 0x80,在U奥德赛L中要求转码为%E四%B八%80,在js脚本中则是\u4e00……。

 

 

1陆拾三个英文字符要用伍位ASCII编码来张开表示,必要7*1陆13位。然则换来8个人UCS-2编码表示,则须要7*160/五个人。同时,由于中文汉字须要占用1个字符,那样汉语字符总量正是7*160/8/贰,刚好等于70。

举多少个栗子

使用Windows Mobile
陆系统做测试,新建短信后输入2个英文字母,下边展现1/160,再输入1个呈现2/160,那就是七字位状态,能够在140字节里装下1陆十二个字符。当再输入一个汉字的时候,上边包车型客车显得立时成为3/70,这就是16字位状态,各类字符都占3个字节,140字节只可以装下陆16个字符,哪怕里面是67个英文字符加一个汉字。

使用Windows Mobile
6系统做测试,新建短信后输入三个英文字母,上边展现1/160,再输入三个显得2/160,那就是七字位状态,能够在140字节里装下156个字符。当再输入二个汉字的时候,上边包车型地铁显得立时成为3/70,那正是1陆字位状态,每种字符都占1个字节,140字节只好装下70个字符,哪怕里面是6210个英文字符加二个汉字。

那正是干吗运转商规定单条短信的汉字限制为66个的因由。

有道翻译

用有道翻译的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-八编码:

365bet官网 4

Paste_Image.png

用Wireshark抓包看看具体内容:

365bet官网 5

Paste_Image.png

如上图所示,translation以此key对应的数组内容应该是"词",所以大家见到高亮区域的内容是22 E8 AF 8D 22,0x22对应ASCII字符",0xE8
0xAF 0x八D便是汉语的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使用了什么样编码格式:

365bet官网 6

Paste_Image.png

用Wireshark抓包看看具体内容:

365bet官网 7

Paste_Image.png

如上海体育场地所示,那一个API请求重临的JSON数据输出的是中文的Unicode转义字符,那事实上也是JS对中文的正式处理格局,算计后台或者是NodeJS达成的。

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

一经短信抢先长度,那么系统就活动分成多条短信来发。因为要投入一些标记性字符以代表顺序,所以英文每条壹伍十个,普通话每条七十几个。接收方假若是新一点的无绳电话机就会把这几条合并后显得给用户,老一点的无绳电话机就会独家展现每条短信。

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

责编:

 

 

比如,输入710个汉语,上边突显70/70,再加3个时上边展现“71/13四(2短音信)”。输入15七个英文,下边呈现160/160,再加三个突显“1633.33%0陆(二短音信)”。

比如说,输入七市斤个汉语,上边彰显70/70,再加三个时下边展现“71/13四(二短音信)”。输入1五十八个英文,上面显示160/160,再加四个出示“1633.33%06(2短音讯)”。

 

 

行使13玖邮箱做测试,里面发送短信无论什么字符都是以UCS-2编码,当输入一三十三个字符时,显示将按3条短信计费。其余,表达里还涉嫌,最七只好扶助350字的短信。

动用13九信箱做测试,里面发送短信无论什么样字符都以以UCS-2编码,当输入壹36个字符时,彰显将按三条短信计费。其它,表达里还论及,最八只好帮衬350字的短信。

 

 

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

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

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

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

  1. 拖动控件的话编写翻译器自动加的layout_blow=”@+id/xxx” id那3个部分未有+号
    Ctrl+f批量替换
    艾德itText呈现的行数android:singleLine=”true”一行, android:lines=”伍”
    多行
    模拟器超时原因 Computer配置低,修改超时时间,模拟器socket挂了,重启一下
    短信api SmsManager借使过时,导包的主题素材gsm
    二G时期的,假诺3个类不恐怕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”1行, 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

发表评论

电子邮件地址不会被公开。 必填项已用*标注