• 一涉及多个知识点的小测试程序


    一个用来测试Android震动功能的小测试程序,同时包含了如下知识点:

    1. 全屏显示
    2. 按键捕获
    3. 确认退出
    4. 终止进程
    5. 属性菜单
    6. 消息提示


    效果图展示如下:


    代码展示如下:

    布局文件就包含一行文本和两个按钮,当然还有一个背景图片(拷贝一张名为bg.jpg的桌面图片到res/drawable-hdpi目录下即可)

    <?xml version="1.0" encoding="utf-8"?>
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:background="@drawable/bg" >
    <TextView
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:text="Android震动测试程序"
    android:textColor="#000000"
    />
    <Button android:text="开 始"
    android:id="@+id/btnStart"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    />
    <Button android:text="停 止"
    android:id="@+id/btnStop"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    />
    </LinearLayout>


    在AndroidManifest.xml中添加震动权限的声明:

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


    然后就是主程序代码:

    import android.app.Activity;
    import android.app.AlertDialog;
    import android.content.DialogInterface;
    //import android.content.Intent;
    import android.os.Bundle;
    import android.os.Vibrator;
    import android.view.Gravity;
    import android.view.KeyEvent;
    import android.view.Menu;
    import android.view.MenuItem;
    import android.view.View;
    import android.view.WindowManager;
    import android.widget.Button;
    import android.widget.Toast;
     
    public class VTest extends Activity {
     
    private Vibrator vibrator = null;
    private Button btnStart;
    private Button btnStop;
     
    public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);
     
    //全屏显示
    getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);
     
    try{
    btnStart = (Button) this.findViewById(R.id.btnStart);
    btnStart.setOnClickListener(new ClickEvent());
    btnStop = (Button) this.findViewById(R.id.btnStop);
    btnStop.setOnClickListener(new ClickEvent());
    }catch(Exception ex){}
    }
     
    //自毁进程
    protected void onDestroy() {
    super.onDestroy();
    android.os.Process.killProcess(android.os.Process.myPid());
    }
     
    //终止震动
    protected void stop() {
    if(vibrator != null){
    vibrator.cancel();
    vibrator = null;
    }
    //super.onStop();
    }
     
    //开启震动
    protected void start() {
    if(vibrator == null){
    vibrator = (Vibrator) getSystemService(VIBRATOR_SERVICE);
    long[] pattern = {100, 5000, 100, 5000}; // OFF/ON/OFF/ON...
    vibrator.vibrate(pattern, 0); //-1不重复,非-1为从pattern的指定下标开始重复
    //vibrator.vibrate(10000);
    }
    //super.onStart();
    }
    //按键捕获
    public boolean onKeyDown(int keyCode, KeyEvent event) {
    if(keyCode==KeyEvent.KEYCODE_BACK){
    //弹出确定退出对话框
    new AlertDialog.Builder(this)
    .setTitle("退出")
    .setMessage("确定退出吗?")
    .setPositiveButton("确定", new DialogInterface.OnClickListener() {
    public void onClick(DialogInterface dialog, int which) {
    //退出时自毁进程
    onDestroy();
     
    //当然也可以在退出时保留进程
    //Intent exit = new Intent(Intent.ACTION_MAIN);
    //exit.addCategory(Intent.CATEGORY_HOME);
    //exit.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
    //startActivity(exit);
    //System.exit(0);
    }
    })
    .setNegativeButton("取消", new DialogInterface.OnClickListener() {
    public void onClick(DialogInterface dialog, int which) {
    dialog.cancel();
    }
    })
    .show();
    //这里不需要执行父类的点击事件,所以直接return
    return true;
    }
    //继续执行父类的其他点击事件
    return super.onKeyDown(keyCode, event);
    }
    //按钮响应类
    class ClickEvent implements View.OnClickListener {
    public void onClick(View v) {
    if (v == btnStart) {
    start();
    }
    if (v == btnStop) {
    stop();
    }
    }
    }
    //创建设置菜单
    public boolean onCreateOptionsMenu(Menu menu) {
    super.onCreateOptionsMenu(menu);
    /*
    * add()方法的四个参数,依次是:
    * 1、组别,如果不分组的话就写Menu.NONE,
    * 2、Id,这个很重要,Android根据这个Id来确定不同的菜单
    * 3、顺序,那个菜单现在在前面由这个参数的大小决定
    * 4、文本,菜单的显示文本
    *
    * setIcon()方法为菜单设置图标,这里使用的是系统自带的图标,以android.R开头的资源是系统提供的,我们自己提供的资源是以R开头的
    * setAlphabeticShortcut() - 设置选中此菜单项的快捷键
    *
    * 注:菜单项超过 6 个的话,第 6 个菜单将会变为 More 菜单,多余的菜单会在单击 More 菜单之后显示出来
    */

    menu.add(Menu.NONE, Menu.FIRST + 1, 5, "删除").setIcon(android.R.drawable.ic_menu_delete);
    menu.add(Menu.NONE, Menu.FIRST + 2, 2, "保存").setIcon(android.R.drawable.ic_menu_edit);
    menu.add(Menu.NONE, Menu.FIRST + 3, 6, "帮助").setIcon(android.R.drawable.ic_menu_help);
    menu.add(Menu.NONE, Menu.FIRST + 4, 1, "添加").setIcon(android.R.drawable.ic_menu_add);
    menu.add(Menu.NONE, Menu.FIRST + 5, 4, "详细").setIcon(android.R.drawable.ic_menu_info_details);
    menu.add(Menu.NONE, Menu.FIRST + 6, 3, "发送").setIcon(android.R.drawable.ic_menu_send);
    menu.add(Menu.NONE, Menu.FIRST + 7, 7, "快捷").setAlphabeticShortcut('a');
     
    /* return true才会起作用 */
    return true;
    }
     
     
    //重写on_Options_Item_Selected用以响应选项菜单
        public boolean on_Options_Item_Selected
    (MenuItem item){
    switch (item.getItemId()) {
    case Menu.FIRST + 1:
    makeToast("没有内容可以被删除!");
    break;
    case Menu.FIRST + 2:
    makeToast("没有内容可以被保存!");
    break;
    case Menu.FIRST + 3:
    makeToast("Email: zwang@ucrobotics.com");
    break;
    case Menu.FIRST + 4:
    makeToast("抱歉,没有新的组件可被添加!");
    break;
    case Menu.FIRST + 5:
    makeToast("这是一个关于Android组件的测试程序!");
    break;
    case Menu.FIRST + 6:
    makeToast("该发送功能尚未实现!");
    break;
    case Menu.FIRST + 7:
    makeToast("因为菜单总数超过六个,所以该菜单默认被隐藏。Menu+a可以快捷调出该菜单!");
    break;
    }
    return false;
    }
     
    //创建消息提示对象,设置在屏幕中间显示
    public void makeToast(String s){
    Toast toast = Toast.makeText(getApplicationContext(), s, Toast.LENGTH_LONG);
    toast.setGravity(Gravity.CENTER, 0, 0);
    toast.show();
    }
    }

    注意:主Java文件中有两行代码论坛无法显示,查看下面的附件!

    参考链接:
    [1] Android菜单详解:www.devdiv.com/home.php?mod=space&ui...;do=blog&id=3267
    [2] 按键监听:edu.gamfe.com/tutor/d/34365.html
    [3] Toast消息提示:www.cnblogs.com/GnagWang/archive/2010/11/26/1888762.html

  • 相关阅读:
    [上海线下活动]IT俱乐部新春首期活动: 高级Windows调试
    清除www.fa899.com
    [新功能]总是只列出标题
    [功能改进]更多的列表数定制
    新增Skin使用排行榜
    华硕P5GDCV Deluxe主板更换RAID 1中的故障硬盘步骤
    [WebPart发布]网站链接WebPart
    [通知]19:3020:30进行服务器维护
    [小改进]个人Blog首页显示随笔摘要
    新增两款Skin(clover与Valentine)
  • 原文地址:https://www.cnblogs.com/wzc0066/p/2948203.html
Copyright © 2020-2023  润新知