【美高梅4858官方网站】短信发送器,字符编码些许事

原标题:手提式有线电话机短信为何要限制六十二个汉字?魅族发短信有字数限制吗?

本人不想写1篇大而全的小说,也无力去追寻那么多材料涵盖全体知识点,即使想明白更加多信息,那里有几篇小编感觉写得不错的小说能够提供参考,本文也某些借鉴了个中的始末。

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

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

用过功用机的伙伴们都会通晓,每一条短信的篇幅被限定在陆拾伍个汉字,超过之后就会被拆分为二条短信发送。

  • 《字符编码的逸事:ASCII,GB231二,Unicode,UTF-八,UTF-1陆》
  • 《unicode,ansi,utf-8,unicodebigendian编码的分裂》

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

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

为啥要限制在陆16个汉字?多设置一点不好吗?

【美高梅4858官方网站】短信发送器,字符编码些许事。基本功概念

  • 字符
    字符是各类文字和符号的总称,蕴含各国家文字、标点符号、图形符号、数字等,以至还足以回顾不或许出示的字符(举个例子ASCII标准定义了1三十多少个字符,在那之中310个字符不恐怕显示)。
  • 字符集
    为了使计算机能够管理字符新闻,首先要调节选用哪些字符。这样就形成了一个汇集,或然说1个表,称为字符表(character
    repertoire)。当然,也足以感觉那正是贰个字符集(character set)。
    比如,将兼具的英文字母放在一块儿得以组合贰个字符集,将具备的方块字放在一齐能够构成1个字符集,等等。
  • 编码字符集
    对二个字符集中的有所字符进行编号,这种编号后的字符集叫做编码字符集(那里的编码仅仅指编号,区别于下文中的编码)。常见的编码字符集有ASCII、Unicode、GBK等。

能够那样来精通:字符串是由字符构成,字符在计算机硬件中经过二进制情势储存,那种贰进制格局正是编码。借使直接使用
“字符串️字符️贰进制表示(编码)”
,会大增不相同门类编码之间转移的纷纭。所以引进了二个抽象层,“字符串️字符️与积存非亲非故的意味️二进制表示(编码)”
,那样就可以用一种与仓储毫不相关的款型表示字符,分歧的编码之间转移时能够先转移到这几个抽象层,然后再转变为任何编码格局。
举例:Unicode 便是 “与存款和储蓄非亲非故的代表”,UTF-捌 便是 “二进制表示”。

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

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

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

ASCII字符集

平常说的ASCII字符集不包涵扩张集,唯有12十八个字符,由此其编码的蕴藏只须求选取三个bit,3个字节丰硕了参天位恒久都以0。比方字符’0’,其代码是十陆进制的0x30,二进制表示为001一千0。

此地说个和ASCII字符集有关的编码方案,GSM标准协议规定单条短信最多存款和储蓄1317个字节的剧情,要是短信内容只包括ASCII字符,因为ASCII字符的数量第一位必定是0,所以GSM标准中明确了7bit编码的短信格式,只用七个bit来连接存款和储蓄ASCII字符,这样原本13几个八bit的积攒空间,就可以储存15九个7bit的数额。假若什么人现在手上还有NOKIA手提式有线电话机,能够拿起来看看只含有ASCII字符的短信是否能够输入1五十多个字符,假使短信中涵盖了非ASCII字符(举个例子汉语),那么富有字符都会成为双字节储存的编码(UCS-二编码),一条短信的剧情就过来成只好发送6十两个字符。现近来的智能手提式有线话机诸多都匡助短信拼接,并不是说单条短信的体量增添了,而是将您编写的越过单条短信容积的短信分成多条发送,运维商也是按多条短信计的。

一则短信能够容纳140字节,也便是约1五16个八个人元的字符、或是1四十多个8-bit的字符,汉语字、爱尔兰语字与日文字这么些占二-byte的字符则可容纳陆二十一个。(使用Unicode系统)。那几个不包含额外的系统情报。

一则短信能够容纳140字节,也正是约1五二十个5个人元的字符、或是1四十多个8-bit的字符,中文字、马耳他语字与日文字这个占2-byte的字符则可容纳7七个。(使用Unicode系统)。那个不包含额外的种类情报。

缘由要追溯到上世纪80年份,Friedhelm
希尔ebrand是当今手提式有线话机短信手艺的主发明人,七1贰个汉字(1五十七个英文字符)正是他挑起的。

GB种类字符集

华语情状下壹旦要健康显示字符,仅依靠ASCII字符集是格外的,由此大家国家制定了壹雨后冬笋的国家标准(GB),当中就包涵GB231二、GB壹三千、GBK、GB18030……,最新的正经是GB18030,蕴含70241个字符。

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

再有本身的手提式有线话机怎么是最多 150 个英文字母?那是 七.五 位元的编码格局吗?

美高梅4858官方网站 1

Unicode字符集

Unicode字符集由多语言软件创设商组成的统1码结盟(Unicode
Consortium)与国标化协会的ISO-106四六事业组制订,为各样语言中的每一个字符钦赐统壹且唯一的代码点,以满足跨语言、跨平台调换和拍卖文件的渴求。中、日、韩的二种文字占用了Unicode中0x三千到0x九FFF的有的
Unicode近来周边使用的是UCS-二编码,它用多个字节来编码2个字符,
比如汉字”1″的编码是0x4E00。事实上Unicode对汉字帮助不怎么好,那也是不能够的,简体和错综复杂总共有陆七万个汉字,而UCS-二最多能表示65538个,所以Unicode只可以排除有的大概不用的汉字,还好GB231二字符聚集常用的简体汉字也可是676二个,为了能表示具备汉字,Unicode也有UCS-四标准,正是用
三个字节来编码字符。

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

为了描述几个代码点,可以选用U加十6进制整数的措施。举例,U+00四一代表英文大写字母A,U+四E00代表汉字”1”。

 

 

她即时选取一台打字机随意打出有些由字母组成的新闻,令人奇怪的是,那几个音信每一条都是唯有壹两行,而且总字数也不会超越1陆拾二个,160便成为她感到颇具巧妙的数字。

编码

关于编码格局,当然能够应用类似ASCII字符集的编码格局——代码点等值转变法(那是本身自个儿起的名字)。既然Unicode代码点的值的界定是0~0x10FFF,那么能够用二个二1bit的编码单元来编码,直接把代码点等值调换成2一bit的二进制种类。

可是这存在二个空间利用的标题,比方对于利用丹麦语的人来讲,ASCII基本能够满意使用。假诺选取ASCII码,只供给3个字节来储存字符,不过若使用刚才的思绪,须求将近三个字节来存储,这明摆着是浪费空间的。

若是要求支持的字符集再少一些,仅协助理编辑号0的平面,那至少也有65伍312个字符,须要16bit的长空(2字节)来囤积两个字符,即UCS-二编码,那种编码用来囤积ASCII字符也是1种浪费。

Unicode在非常长壹段时间内不可能推广,直到网络的产出,为消除Unicode怎么着在互联网上传输的标题,于是面向传输的居多
UTF(UCS Transfer
Format)标准出现了,顾名思义,UTF-八就是每一次柒个位传输数据,而UTF-1陆正是历次17个位。UTF-八正是在互联网络使用最广的一种Unicode的达成格局,那是为传输而安顿的编码,并使编码无国界,那样就能够来得满世界上装有知识的字符了。

yskin:

yskin:

Friedhelm
希尔ebrand肆四岁的时候,他以为最近手机短信161几个字符已经够用使用,于是决定把这一个数字定为一条短信内容的字数上线。

UTF-8

UTF-捌最大的八个特色,正是它是一种变长的编码格局。它能够利用一~五个字节表示一个标识,依据分歧的号子而变化字节长度,当字符在ASCII
码的范围时,就用贰个字节表示,保留了ASCII字符二个字节的编码做为它的1部分,注意的是Unicode二在那之中文字符占1个字节,而UTF-86当中文字符占2个字节)。从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的贰进制表示为0拾0111000000000,转变到UTF-八便是11100十0 十11一千一千0000,对应的十陆进制表示是0xE4 0xB捌 0x80。

七人元字符正是目标准ASCII去掉最高位的0。以那种格局打开编码,在United States那样的国度,发送的短信字符都以ASCII码表里的,所以没必要浪费二个字位。

八位元字符正是指标准ASCII去掉最高位的0。以那种办法实行编码,在U.S.这么的国家,发送的短信字符都以ASCII码表里的,所以没供给浪费2个字位。

乘机短信本事的迈入,各流年营商也困扰把1五1九个字符作为单条短信的上线。

UTF-16

UTF-1陆的编码单元是1陆bit,对于每一个代码点,选拔1个或然2个编码单元来表示,由此那是1个变长表示。

 

 

美高梅4858官方网站 2

UTF-32

UTF-32采纳代码点等值调换法,将种种代码点编码为2个3贰bit的编码单元(四字节),由此空间功效相当低,不比别的Unicode编码应用布满。

而短信协议帮忙柒字位、捌字位、16字位叁种编码,柒字位用于美利哥,能够发送1五十四个字母,捌字位用于亚洲国家,16字位用于中国和东瀛韩俄等国家,使用UCS-二编码。而UCS-贰把具有Unicode字符编码为二字节,所以固然英文字母也会编码成二个字节。

而短信协议支持柒字位、8字位、1⑥字位三种编码,七字位用于美利坚合众国,能够发送1伍1八个字母,8字位用于亚洲国家,1六字位用于中国和东瀛韩俄等国家,使用UCS-2编码。而UCS-2把具有Unicode字符编码为2字节,所以就算英文字母也会编码成1个字节。

对编制程序才干有所通晓的同室知道,由于字符本人使用编码方式的不等,最后将产生字符个数的不等。对于英文字母来讲,一般选拔5人ASCII编码,粤语则为六个人UCS-二编码,必要占用二个字节。

工具推荐

此处有个网站提供的转码效果拾叁分好,比起一些站长工具更标准。

美高梅4858官方网站 3

Paste_Image.png

上海体育场所是行使该网址寻觅中文字符“1”的结果,能够观望其Unicode值为U+肆E00,UTF-八编码为0xE4
0xB八 0x80,在U君越L中须求转码为%E肆%B八%80,在js脚本中则是\u4e00……。

 

 

1五1捌个英文字符要用伍个人ASCII编码来开始展览表示,须要七*1陆10人。不过换来7人UCS-二编码表示,则需求7*160/六位。同时,由于粤语汉字须要占用一个字符,那样汉语字符总的数量就是7*160/8/二,刚好等于70。

举多少个栗子

利用Windows Mobile
六系统做测试,新建短信后输入二个英文字母,上面呈现1/160,再输入三个突显2/160,那便是7字位状态,可以在140字节里装下1五17个字符。当再输入多个汉字的时候,上面包车型大巴来得立时成为3/70,那就是1陆字位状态,每种字符都占二个字节,140字节只好装下陆拾七个字符,哪怕里面是陆1捌个英文字符加3个汉字。

选拔Windows Mobile
陆系统做测试,新建短信后输入1个英文字母,上面展现1/160,再输入多少人作品展示2/160,那就是柒字位状态,能够在140字节里装下1陆十个字符。当再输入2个汉字的时候,下面包车型大巴彰显登时成为3/70,这正是16字位状态,各个字符都占一个字节,140字节只可以装下616个字符,哪怕里面是7十一个英文字符加3个汉字。

那正是干什么运转商规定单条短信的汉字限制为6二十个的来头。

有道翻译

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

美高梅4858官方网站 4

Paste_Image.png

用Wireshark抓包看看具体内容:

美高梅4858官方网站 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使用了怎么样编码格式:

美高梅4858官方网站 6

Paste_Image.png

用Wireshark抓包看看具体内容:

美高梅4858官方网站 7

Paste_Image.png

如上海教室所示,那么些API请求重临的JSON数据输出的是中文的Unicode转义字符,那事实上也是JS对粤语的正规处理格局,估算后台大概是NodeJS完毕的。

本人是咕咕鸡,多个还在不停学习的全栈技术员。
热爱生活,喜欢跑步,家庭是笔者连连前行向上的重力。

设若短信超过长度,那么系统就机关分成多条短信来发。因为要进入一些标记性字符以代表顺序,所以英文每条一伍二个,汉语每条67个。接收方借使是新一点的手提式无线话机就会把这几条合并后出示给用户,老一点的无绳电话机就会独家显示每条短信。

1经短信当先长度,那么系统就自动分成多条短信来发。因为要投入一些标记性字符以象征顺序,所以英文每条一伍二个,普通话每条陆捌个。接收方借使是新一点的无绳电话机就会把这几条合并后显得给用户,老一点的手提式有线话机就会独家突显每条短信。

小编:

 

美高梅4858官方网站, 

譬如说,输入七十一个汉语,上边突显70/70,再加八个时上面呈现“71/134(2短音讯)”。输入1五1八个英文,下边彰显160/160,再加3个来得“1陆百分之三十三0陆(二短音讯)”。

譬如,输入70个中文,下边展现70/70,再加贰个时上边彰显“71/134(2短新闻)”。输入1伍21个英文,上面展现160/160,再加3个彰显“1陆百分之三十三06(二短音讯)”。

 

 

运用13九信箱做测试,里面发送短信无论怎么字符都以以UCS-二编码,当输入133个字符时,显示将按三条短信计费。此外,表达里还论及,最八只好帮忙350字的短信。

运用13玖信箱做测试,里面发送短信无论怎么字符都以以UCS-二编码,当输入13五个字符时,呈现将按3条短信计费。此外,表达里还涉及,最六只可以帮助350字的短信。

 

 

楼主提到的150字限制没传闻过,英文谷歌没找到,普通话谷歌只搜到0九年时邮电通信在测试150字符短信系统。

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

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

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

  1. 拖动控件的话编写翻译器自动加的layout_blow=”@+id/xxx” id那多少个部分未有+号
    Ctrl+f批量替换
    艾德itText显示的行数android:singleLine=”true”1行, android:lines=”5″
    多行
    模拟器超时原因 Computer配置低,修改超时时间,模拟器socket挂了,重启一下
    短信api SmsManager假诺过时,导包的主题素材gsm
    二G一时半刻的,假诺三个类无法new对象,那么它一定期存款在2个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=”5″
    多行
    模拟器超时原因 计算机配置低,修改超时时间,模拟器socket挂了,重启一下
    短信api SmsManager假使过时,导包的主题材料gsm
    2G一代的,假诺多个类不能够new对象,那么它必然存在一个getDefaut也许getInstance的静态方法

  2. SmsManager的方法
    sendDataMessage(发送彩信)
    sendMultipartTextMessage(发送多条消息),
    sendTextMessage(目的手提式有线电话机, null(来源手提式有线电话机不支持), text, sentIntent,
    deliveryIntent)后五个参数,延迟告诉和送达报告,不关注填null
    急需这几个权力 android.permission.SEND_SMS

短信都要最大尺寸的限量的,android提供了二个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地图