金沙娱乐

短信发送器,手提式有线电电话机短信为啥要限制六十四个汉字

四月 18th, 2019  |  金沙娱乐

原标题:手机短信为啥要限量六十八个汉字?Motorola发短信有字数限制吗?

金沙娱乐 ,自个儿不想写壹篇大而全的稿子,也无力去搜寻那么多材料涵盖全部知识点,若是想打听越多音讯,那里有几篇小编以为写得没有错的稿子能够提供参考,本文也部分借鉴了内部的剧情。

/*****************短信发送器,手提式有线电电话机短信为啥要限制六十四个汉字。2016年4月23日
更新********************************/

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

用过功用机的同伙们都会分晓,每一条短信的字数被限定在6八个汉字,超过之后就会被拆分为贰条短信发送。

  • 《字符编码的旧事:ASCII,GB2312,Unicode,UTF-八,UTF-1六》
  • 《unicode,ansi,utf-八,unicodebigendian编码的界别》

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

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

怎么要限量在67个汉字?多设置一点不好呢?

基础概念

  • 字符
    字符是种种文字和符号的总称,包罗各国家文字、标点符号、图形符号、数字等,甚至还足以回顾不能够出示的字符(比如ASCII标准定义了1二十六个字符,当中35个字符不能显示)。
  • 字符集
    为了使计算机能够处理字符音讯,首先要调控选取哪些字符。那样就变成了3个凑合,大概说2个表,称为字符表(character
    repertoire)。当然,也能够以为那正是二个字符集(character set)。
    譬如说,将具备的英文字母放在一块儿可以组成2个字符集,将持有的方块字放在一块儿得以整合三个字符集,等等。
  • 编码字符集
    对3个字符集中的全部字符进行编号,这种编号后的字符集叫做编码字符集(那里的编码仅仅指编号,不相同于下文中的编码)。常见的编码字符集有ASCII、Unicode、GBK等。

能够如此来通晓:字符串是由字符构成,字符在Computer硬件中经过二进制格局储存,那种二进制格局就是编码。假设直白使用
“字符串️字符️2进制表示(编码)”
,会大增差异品类编码之间调换的复杂性。所以引进了八个抽象层,“字符串️字符️与储存非亲非故的意味️二进制表示(编码)”
,那样就可以用一种与仓储非亲非故的样式表示字符,不一样的编码之间转换时能够先转移到这几个抽象层,然后再转移为任何编码格局。
举个例子:Unicode 正是 “与存款和储蓄毫不相关的表示”,UTF-八 正是 “2进制表示”。

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

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

实际,是有历史原因的。

ASCII字符集

平常说的ASCII字符集不包蕴扩展集,唯有1三十个字符,由此其编码的贮存只要求动用多少个bit,三个字节丰裕了最高位长久都是0。比如字符’0’,其代码是十6进制的0x30,2进制表示为001一千0。

那里说个和ASCII字符集有关的编码方案,GSM标准协议规定单条短信最多囤积1四十个字节的剧情,若是短信内容只含有ASCII字符,因为ASCII字符的数额第肆位必定是0,所以GSM标准中规定了七bit编码的短信格式,只用八个bit来一而再存款和储蓄ASCII字符,那样原本13十八个八bit的蕴藏空间,就足以储存16八个柒bit的数量。假设何人以后手上还有NOKIA手提式有线电话机,能够拿起来看看只含有ASCII字符的短信是还是不是能够输入1五拾陆个字符,借使短信中蕴藏了非ASCII字符(比如中文),那么富有字符都会成为双字节囤积的编码(UCS-二编码),一条短信的故事情节就过来成只可以发送陆十八个字符。现目前的智能手提式有线电话机多数都帮忙短信拼接,并不是说单条短信的体积扩充了,而是将你编写的跨越单条短信体积的短信分成多条发送,运转商也是按多条短信计的。

一则短信能够容纳140字节,也正是约1五16个7个人元的字符、或是1316个八-bit的字符,中文字、乌克兰语字与日文字那一个占二-byte的字符则可容纳615个。(使用Unicode系统)。那么些不包涵额外的系统情报。

1则短信能够容纳140字节,也正是约1陆11个7个人元的字符、或是1三17个8-bit的字符,粤语字、意大利语字与日文字这么些占二-byte的字符则可容纳陆拾7个。(使用Unicode系统)。那些不包蕴额外的类别情报。

原因要追溯到上世纪80年间,Friedhelm
希尔ebrand是前些天手提式有线电话机短信技巧的主发明人,6二十个汉字(16二十个英文字符)正是她挑起的。

GB类别字符集

中文环境下1旦要正规展现字符,仅依靠ASCII字符集是十三分的,因而大家国家制定了一多种的国家标准(GB),其中就包含GB231二、GB1三千、GBK、GB18030……,最新的科班是GB18030,包括70二四十二个字符。

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

再有笔者的手机怎么是最多 150 个英文字母?那是 7.伍 位元的编码格局吗?

金沙娱乐 1

Unicode字符集

Unicode字符集由多语言软件创立商组成的统一码联盟(Unicode
Consortium)与国标化组织的ISO-十6四六事业组制订,为各类语言中的各样字符钦定统1且唯1的代码点,以满意跨语言、跨平台转变和拍卖公事的渴求。中、日、韩的两种文字占用了Unicode中0x贰仟到0x玖FFF的1对
Unicode如今常见应用的是UCS-二编码,它用多少个字节来编码二个字符,
比如汉字”一”的编码是0x四E00。事实上Unicode对汉字支持不怎么好,那也是不能够的,简体和错综复杂总共有6陆万个汉字,而UCS-2最多能表示655三拾四个,所以Unicode只好排除部分大致不用的方块字,辛亏GB231二字符集中常用的简体汉字也不过67陆二个,为了能表示具有汉字,Unicode也有UCS-4规范,正是用
陆个字节来编码字符。

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

为了描述3个代码点,能够选择U加十6进制整数的章程。比如,U+004一象征英文大写字母A,U+四E00表示汉字”1”。

 

 

他二话没说接纳1台打字机随意打出部分由字母组成的音信,令人诡异的是,这一个音信每一条都以唯有壹两行,而且总字数也不会超过1五15个,160便成为他备感颇具玄妙的数字。

编码

有关编码格局,当然能够利用类似ASCII字符集的编码情势——代码点等值调换法(那是本人本身起的名字)。既然Unicode代码点的值的限制是0~0x拾FFF,那么可以用一个二1bit的编码单元来编码,直接把代码点等值调换到二1bit的二进制系列。

只是那存在一个空中利用的标题,例如对于利用越南语的人来说,ASCII基本能够满意使用。假若采取ASCII码,只必要1个字节来囤积字符,不过若使用刚才的笔触,需求将近一个字节来存款和储蓄,那显然是浪费空间的。

若是急需匡助的字符集再少一些,仅辅助理编辑号0的平面,那至少也有65536个字符,要求1陆bit的上空(二字节)来存款和储蓄三个字符,即UCS-2编码,那种编码用来存款和储蓄ASCII字符也是1种浪费。

Unicode在相当长壹段时间内不可能松开,直到互连网的产出,为焚薮而田Unicode怎么样在互连网上传输的难题,于是面向传输的成都百货上千
UTF(UCS Transfer
Format)标准出现了,顾名思义,UTF-八正是每一次七个位传输数据,而UTF-1陆正是历次十八个位。UTF-捌正是在互连网上选择最广的一种Unicode的落实格局,那是为传输而设计的编码,并使编码无国界,那样就足以显得全球上装有知识的字符了。

yskin:

yskin:

Friedhelm
希尔ebrand四四虚岁的时候,他感觉近期手提式有线电电话机短信1伍十五个字符已经丰富使用,于是决定把这一个数字定为一条短信内容的字数上线。

UTF-8

UTF-8最大的贰个特点,正是它是壹种变长的编码格局。它能够动用一~四个字节表示二个符号,依据分歧的符号而变化字节长度,当字符在ASCII
码的限定期,就用三个字节表示,保留了ASCII字符七个字节的编码做为它的一片段,注意的是Unicode2个国语字符占二个字节,而UTF-八1个中文字符占2个字节)。从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

举个例证:
要么用中文“壹”,其Unicode值为0x肆E00,落在0800-FFFF的界定内,事实上汉语基本上都在那些区域。0x肆E00的2进制表示为010011一千000000,调换到UTF-八正是11100100 1011一千一千0000,对应的十陆进制表示是0xE四 0xB8 0x80。

5位元字符正是目标准ASCII去掉最高位的0。以那种格局张开编码,在United States如此的国家,发送的短信字符都以ASCII码表里的,所以没要求浪费三个字位。

5人元字符正是目的准ASCII去掉最高位的0。以那种格局打开编码,在United States如此的国家,发送的短信字符都以ASCII码表里的,所以没要求浪费一个字位。

乘机短信技艺的前进,各小运营商也滋扰把1五17个字符作为单条短信的上线。

UTF-16

UTF-1六的编码单元是1陆bit,对于各种代码点,选拔2个可能3个编码单元来表示,因而那是一个变长表示。

 

 

金沙娱乐 2

UTF-32

UTF-32采代替码点等值转换法,将各种代码点编码为3个3二bit的编码单元(4字节),因而空间功用较低,不比其余Unicode编码应用广泛。

而短信协议补助7字位、八字位、1陆字位叁种编码,7字位用于美利哥,能够发送1陆二十一个字母,八字位用于亚洲江山,16字位用于中国和日本韩俄等国家,使用UCS-2编码。而UCS-贰把装有Unicode字符编码为二字节,所以即使英文字母也会编码成一个字节。

而短信协议协理7字位、8字位、1陆字位叁种编码,7字位用于美利坚独资国,可以发送15几个假名,捌字位用于澳洲国家,1陆字位用于中国和东瀛韩俄等国家,使用UCS-2编码。而UCS-2把具有Unicode字符编码为2字节,所以正是英文字母也会编码成一个字节。

对编制程序才能有所精晓的同班知道,由于字符自个儿使用编码形式的分歧,末了将促成字符个数的比不上。对于英文字母来说,一般选择7人ASCII编码,汉语则为七位UCS-贰编码,要求占用三个字节。

工具推荐

此间有个网站提供的转码效果越来越好,比起1些站长工具更标准。

金沙娱乐 3

Paste_Image.png

上图是行使该网址寻找粤语字符“一”的结果,能够观看其Unicode值为U+4E00,UTF-八编码为0xE4
0xB8 0x80,在U智跑L中需求转码为%E四%B捌%80,在js脚本中则是\u4e00……。

 

 

15几个英文字符要用8位ASCII编码来进展表示,需求七*1陆拾陆个人。然则换到伍个人UCS-2编码表示,则必要七*160/六位。同时,由于中文汉字要求占用二个字符,那样中文字符总量就是柒*160/8/2,刚好等于70。

举多少个栗子

行使Windows Mobile
6系统做测试,新建短信后输入1个英文字母,下边展现1/160,再输入一个人作品体现2/160,那就是七字位状态,能够在140字节里装下1五17个字符。当再输入二其中华夏族民共和国字的时候,上边包车型客车来得立即成为3/70,那就是16字位状态,每种字符都占3个字节,140字节只好装下七10几个字符,哪怕里面是6十多个英文字符加一个汉字。

接纳Windows Mobile
6系统做测试,新建短信后输入1个英文字母,下边展现1/160,再输入2个出示2/160,那正是柒字位状态,能够在140字节里装下1五十四个字符。当再输入二当中华夏族民共和国字的时候,上边包车型地铁突显即刻成为3/70,那正是1六字位状态,每一个字符都占3个字节,140字节只好装下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-八编码:

金沙娱乐 4

Paste_Image.png

用Wireshark抓包看看具体内容:

金沙娱乐 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使用了怎么样编码格式:

金沙娱乐 6

Paste_Image.png

用Wireshark抓包看看具体内容:

金沙娱乐 7

Paste_Image.png

如上海教室所示,那些API请求再次来到的JSON数据输出的是中文的Unicode转义字符,那实质上也是JS对中文的正儿八经处理格局,测度后台只怕是NodeJS完毕的。

自个儿是咕咕鸡,1个还在不停学习的全栈工程师。
热爱生活,喜欢跑步,家庭是本人连连前行向上的重力。

假诺短信超过长度,那么系统就机关分成多条短信来发。因为要参加1些标志性字符以代表顺序,所以英文每条1五一个,普通话每条七二十一个。接收方假若是新一点的手机就会把这几条合并后出示给用户,老一点的手机就会分别显示每条短信。

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

主要编辑:

 

 

诸如,输入陆15个汉语,上边显示70/70,再加一个时上边呈现“71/134(二短消息)”。输入1五15个英文,下边彰显160/160,再加二个出示“1六叁分之一06(2短音讯)”。

比如,输入六十八当中文,下边呈现70/70,再加二个时下边展现“71/13四(二短新闻)”。输入1伍十九个英文,上面呈现160/160,再加2个出示“1633.33%0陆(二短新闻)”。

 

 

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

动用139信箱做测试,里面发送短信无论什么样字符都以以UCS-贰编码,当输入壹三十个字符时,展现将按3条短信计费。其它,表明里还关乎,最四只好辅助350字的短信。

 

 

楼主提到的150字限制没听别人说过,英文谷歌(Google)没找到,普通话谷歌(Google)只搜到09年时邮电通信在测试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时日的,假如三个类不能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提供了二个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

Your Comments

近期评论

    功能


    网站地图xml地图