Android: 布局;xml生成与解析;测试

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/TopWilling/article/details/63428895

Android: 布局;xml生成与解析;测试


**1.android布局
2.Android中发送短信
3.android中开发和调试的相关工具
4.测试相关概念和android测试工具
5.android中点击事件四种处理方法
6.xml介绍和用法以及xml生成和解析**

**具体实例包括:
布局;
短讯发送实例;
junit单元测试;
事件响应的方法;
xml的生成和解析**

android:gravity=”center” 控件内容对齐
android:layout_gravity=”center”控件本身在父窗体中的对齐方法

布局

帧布局

1.帧布局
控件是一层一层的叠;

1.1案例 view.setVisibility (view.INVISIBLE);
暂停按钮点击事件;view参数就是被点击的控件对象

短讯发送

1.权限:

<uses-permission android:name="android.permission.SEND_SMS"/>

2.代码只有两三行

    //发送短信
        SmsManager smsManager = SmsManager.getDefault();

        //发送短信
        smsManager.sendTextMessage(
                "5556",//destinationAddress, 目标号码
                null,//scAddress, 哪个号码发送
                "hello",//text,短信内容 
                null,//sentIntent, 发送报告
                null);//deliveryIntent);送达报告

开发环境和调试工具## (DDMS和ADT)

R文件找不到的问题如何解决?问题出现res目录有资源名或者属性名有错误,这就会造成R文件无法自动生成
DDMS: Dalvik Debug Monitor Service android调试的工具
/data/data/应用程序包名命名的文件夹是私有目录

测试相关概念

1.按照是否知道源码

1.黑盒测试:从用户的角度来测试程序的功能是否符合要求;
2.白盒测试:知道源码;结构测试,测试程序的代码是否正确是否执行过一次;(技术含量更高一些)

测试的粒度划分

1.单元测试:对方法测试,junit test
2.集成测试:几个模块的测试,Integration test
3.系统测试:对整个系统进行测试 System test

测试的力度

1.压力测试:pressure test;一般针对服务器的测试
2冒烟测试:压力测试到了极端的程序;极端压力测试;

android中的压力测试工具 mokey

**1.adb shell 进入android底层linux 命令行
2.# monkey 200(测试次数) 让monkey产生200次用户操作;
3. #monkey -P 应用包名200,只测试指定应用;**

android 中junit单元测试

**1.编写业务代码
2.编写测试代码,新建测试类需要继承AndroidTestCase,测试的方法需要抛出异常
此处是代码

//测试代码
        public class TestCalcService extends AndroidTestCase {

            //测试add方法   注意抛出异常
            public void testAdd() throws Exception {

                CalcService calcService = new CalcService();

                int result = calcService.add(3, 5);

                //利用断言测试
                assertEquals(8, result);
            }
        }

3.在清单文件中配置instrumentation和users-library;
此处是代码

        <instrumentation
            android:name="android.test.InstrumentationTestRunner"
            android:targetPackage="com.itheima.junit" >
        </instrumentation>

        <application
            android:allowBackup="true"
            android:icon="@drawable/ic_launcher"
            android:label="@string/app_name"
            android:theme="@style/AppTheme" >
            <uses-library android:name="android.test.runner"/>

4.选中要被测试的方法 testAdd,运行测试,查看结果;**

android中点击事件的写法

android中时间处理机制.基于监听的事件处理机制
步骤:
*1.获得监听对象(事件源),被监听对象;
*2.实现监听器类,实现接口,实现xxxListener接口;
*3.利用监听对象的setxxxListener方法设置监听器;

写法1

1.在xml文件中添加onClick属性指定处理方法

        <Button
            android:onClick="click1"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:text="button1" />

        //直接在xml布局中指定点击事件处理方法
        public void click1(View v) {
            Toast.makeText(this, "button1被翻牌子了", Toast.LENGTH_SHORT).show();
        }

写法2

2.基于监听的点击事件处理步骤;


        public class MainActivity extends Activity {

            @Override
            protected void onCreate(Bundle savedInstanceState) {
                super.onCreate(savedInstanceState);
                setContentView(R.layout.activity_main);

                // 写法2 基于监听事件处理,内部类实现接口
                // 1.找监听对象
                Button btn2 = (Button) findViewById(R.id.btn2);

                // 2.实现监听器,XxxListener OnClickListener
                MyOnClickListener listener = new MyOnClickListener();


                // 3.利用监听对象的setXxxListener方法设置监听器
                btn2.setOnClickListener(listener);
            }

            class MyOnClickListener implements OnClickListener {

                @Override
                public void onClick(View v) {
                    Toast.makeText(MainActivity.this, "btn2被点击了", Toast.LENGTH_SHORT)
                            .show();
                }
            }
        }

写法3

3.使用匿名内部类实现xxxListener;

        // 写法3 基于监听事件处理,匿名内部类实现接口
        // 1.找监听对象
        Button btn3 = (Button) findViewById(R.id.btn3);

        // 2.实现监听器,XxxListener OnClickListener

        // 3.利用监听对象的setXxxListener方法设置监听器
        btn3.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View v) {
                Toast.makeText(MainActivity.this, "btn3被点击了", Toast.LENGTH_SHORT).show();

            }
        });

写法4

4.让当前的mainactivity来实现xxxListenner接口;

        public class MainActivity extends Activity implements OnClickListener {

            @Override
            protected void onCreate(Bundle savedInstanceState) {
                super.onCreate(savedInstanceState);
                setContentView(R.layout.activity_main);

                // 写法2 基于监听事件处理,实现接口
                // 1.找监听对象
                Button btn1 = (Button) findViewById(R.id.btn1);
                Button btn2 = (Button) findViewById(R.id.btn2);




                // 3.利用监听对象的setXxxListener方法设置监听器
                btn1.setOnClickListener(this);
                btn2.setOnClickListener(this);
            }

            @Override
            public void onClick(View v) {

                //根据id判断是哪个btn被点击了
                switch (v.getId()) {
                case R.id.btn1:
                    Toast.makeText(this, "btn1被点击了", 0).show();
                    break;
                case R.id.btn2:

                    Toast.makeText(this, "btn2被点击了", 0).show();
                    break;

                default:
                    break;
                }
            }
        }

在eclipse中搜索

**ctrl + h 可以在工程中搜索;
ctrl + k 可以在文件中查找,向下;
Ctrl + shift + k 向下查找;**

xml介绍

**XML 指可扩展标记语言 Extensible Markup Language ;
xml用于传输和保存语言,html用于显示数据;
xml可以用于保存软件的配置,服务器返回格式化的数据;**

xml语法要点

**XML 的开头要有文档声明,
XML 文档必须要有根元素,并且只能有一个根源素;
XML 必须有关闭标签;
XML 标签对大小写敏感
XML 元素必须被正确的嵌套
XML 属性必须加引号 例如 version = “2.0”
XML 特殊字符必须转义
XML 中的空格,回车换行解析式会保留**

xml的约束

约定xml的文档中可以出现的元素和顺序,属性;

android中SharedPreferences用法

写入xml

        //将状态写入xml保存
        //1.获得sharedPreferences,指定要操作文件,和私有模式
        SharedPreferences sp = getSharedPreferences("config", MODE_PRIVATE);

        //2.获得编辑器
        Editor editor = sp.edit();

        //3.以key-value形式写入数据
        editor.putBoolean("isChecked", isChecked);

        //4.提交修改
        editor.commit();

从xml中读出设置


        //读出xml中配置,回显到checkBox
        //1.获得SharedPreferences对象,指定文件及模式
        SharedPreferences sp = getSharedPreferences("config", 0);

        //2.读数据
        boolean isChecked = sp.getBoolean("isChecked", false);

        cb.setChecked(isChecked);

xml的生成

用的是序列化器

### xml生成 ###

        try {
            //1.利用XmlSerializer生成xml文件
            XmlSerializer xmlSerializer = Xml.newSerializer();

            File file = new File("/data/data/com.itheima.xmlgen/config.xml");

            FileOutputStream fos = new FileOutputStream(file);
            //2.指定生成什么文件
            xmlSerializer.setOutput(fos, "utf-8");

            //3.写文档开头
            xmlSerializer.startDocument("utf-8", true);//<?xml version='1.0' encoding='utf-8' standalone='yes' ?>

            //5.写开标标签
            xmlSerializer.startTag(null, "map");//<map>

            xmlSerializer.startTag(null, "boolean");//<boolean>

            //写属性 name="isChecked"
            xmlSerializer.attribute(null, "name", "isChecked");
            //写属性 value="true"
            xmlSerializer.attribute(null, "value", "true");

            xmlSerializer.endTag(null, "boolean");//</boolean>

            //6.结束标签</map>
            xmlSerializer.endTag(null, "map");

            //4.写文档结束
            xmlSerializer.endDocument();

            fos.close();

xml的解析

pull解析原理:基于 事件的解析方式;开始和结束标签,标签包围的文本都看做事件;
核心的方法1:parser.next();指针从前往后移动
核心的方法2:getEventType();获得当前指针指向的事件类型;
取标签包围的文本;张三
指针指向取后面的text文本”张三”;
name的开始标签 后面必然后面跟着文本;

pull解析过程

        // person.xml要放在assets资产目录下

        try {
            // 1.获得pull解析器
            XmlPullParser parser = Xml.newPullParser();

            // 利用上下文获得资产目录管理器并打开文件
            InputStream inputStream = getAssets().open("person.xml");

            // 2.指定解析目录
            parser.setInput(inputStream, "utf-8")

            // 获得初始指针指向事件类型
            int eventType = parser.getEventType();

            System.out.println(getEventName(eventType));

            //循环移动指针,直到文档结束
            while (eventType != XmlPullParser.END_DOCUMENT) {
                //指针向下一个事件移动,返回下一个事件类型
                eventType = parser.next();
                System.out.println(getEventName(eventType));
            }

        } catch (Exception e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

猜你喜欢

转载自blog.csdn.net/TopWilling/article/details/63428895
今日推荐