• 20169207 2016-2017-2 《移动平台开发实践》 第十周作业


    实验一 提交测试截图和码云练习项目链接,实现Linux下dc的功能,计算后缀表达式的值

    实现代码如下:

       if (isOperator(token))
                   {
                    //从栈中弹出操作数2
                    //从栈中弹出操作数1
                       int a = stack.pop();
                       int b = stack.pop();
    
                    //根据运算符和两个操作数调用evalSingleOp计算result;
                     //计算result入栈;
                       result=evalSingleOp (token.charAt(0), b, a);
                       stack.push(result);
                   }
                   else
                       //如果是操作数
                    //操作数入栈;
                  {
                      stack.push(Integer.parseInt(token));
                  }
                 }
    

    注意:这里需要注意的是操作数1和操作数的顺序,不然在减法和除法上会出现问题。

    实验二 实现一个简易计算器Calc,支持+ - * / 和%运算, 从命令行传入计算数据,比如:

     expression = args[0]+" "+args[2]+" "+args[1];
                      MyDC evaluator = new MyDC();
                      result = evaluator.evaluate (expression);
    //这里面负责传递参数,利用上个实验已经实现的计算器类mydc来完成工作
       private final char Modulo = '%';
       return ( token.equals("+") || token.equals("-") ||token.equals("*") || token.equals("/") )||token.equals("%");
       case Modulo :result = op1 % op2;
    //这里负责扩展模运算。
    
    

    实验三 完成Hello World, 要求修改res目录中的内容,


    这里需要修改布局文件。

    实验四 创建 ThirdActivity, 在ThirdActivity中显示自己的学号,修改代码让MainActivity启动ThirdActivity

    android 界面跳转的几种方式:

    第一种方式,用action来跳转。
     
    1、使用Action跳转,如果有一个程序的 AndroidManifest.xml中的某一个Activity的IntentFilter段中定义了包含了相同的Action那么这个Intent 就与这个目标Action匹配。如果这个IntentFilter段中没有定义 Type,Category,那么这个 Activity就匹配了。但是如果手机中有两个以上的程序匹配,那么就会弹出一个对话可框来提示说明。
    Action的值在Android中有很多预定义,如果你想直接转到你自己定义的Intent接收者,你可以在接收者的 IntentFilter中加入一个自定义的Action值(同时要设定 Category值为"android.intent.category.DEFAULT"),在你的Intent中设定该值为Intent的 Action,就直接能跳转到你自己的Intent接收者中。因为这个Action在系统中是唯一的。
     
    2,data/type,你可以用Uri来做为data,比如Uri uri = Uri.parse(http://www.google.com);
    Intent i = new Intent(Intent.ACTION_VIEW,uri);手机的Intent分发过程中,会根据http://www.google.com 的scheme判断出数据类型type
    手机的Brower则能匹配它,在Brower的Manifest.xml中的IntenFilter中首先有ACTION_VIEW Action,也能处理http:的type。
     
    3,至于分类Category,一般不要去在Intent中设置它,如果你写Intent的接收者,就在Manifest.xml的 Activity的 IntentFilter中包含android.category.DEFAULT,这样所有不设置 Category(Intent.addCategory(String c);)的Intent都会与这个Category匹配。
     
    4,extras(附加信息),是其它所有附加信息的集合。使用extras可以为组件提供扩展信息,比如,如果要执行“发送电子邮件”这个动作,可以将电子邮件的标题、正文等保存在extras里,传给电子邮件发送组件。

    这里需要重新建立一个布局文件,并在java文件中建立关联关系。

    第二种方式,用类名跳转。
     
    Intent负责对应用中一次操作的动作、动作涉及数据、附加数据进行描述,Android则根据此Intent的描述,负责找到对应的组件,将 Intent传递给调用的组件,并完成组件的调用。Intent在这里起着实现调用者与被调用者之间的解耦作用。
    Intent传递过程中,要找到目标消费者(另一个Activity,IntentReceiver或Service),也就是Intent的响应者。

    所用核心代码:

     t1.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                     Intent intent  = new Intent();
                    intent.setClass(MainActivity.this,ThirdActivity.class);
                    startActivity(intent);
                }
            });
    

    码云链接

    实验五 修改代码让Toast消息中显示自己的学号信息

    Toast是Android中用来显示显示信息的一种机制,和Dialog不一样的是,Toast是没有焦点的,而且Toast显示的时间有限,过一定的时间就会自动消失。下面用一个实例来看看如何使用Toast。

    默认样式:Toast.makeText(getApplicationContext(), "默认Toast样式",
         Toast.LENGTH_SHORT).show();
    自定义显示位置:toast = Toast.makeText(getApplicationContext(),
         "自定义位置Toast", Toast.LENGTH_LONG);
       toast.setGravity(Gravity.CENTER, 0, 0);
       toast.show();
    带图片效果:toast = Toast.makeText(getApplicationContext(),
         "带图片的Toast", Toast.LENGTH_LONG);
       toast.setGravity(Gravity.CENTER, 0, 0);
       LinearLayout toastView = (LinearLayout) toast.getView();
       ImageView imageCodeProject = new ImageView(getApplicationContext());
       imageCodeProject.setImageResource(R.drawable.icon);
       toastView.addView(imageCodeProject, 0);
       toast.show();
    
    完全自定义:LayoutInflater inflater = getLayoutInflater();
       View layout = inflater.inflate(R.layout.custom,
         (ViewGroup) findViewById(R.id.llToast));
       ImageView image = (ImageView) layout
         .findViewById(R.id.tvImageToast);
       image.setImageResource(R.drawable.icon);
       TextView title = (TextView) layout.findViewById(R.id.tvTitleToast);
       title.setText("Attention");
       TextView text = (TextView) layout.findViewById(R.id.tvTextToast);
       text.setText("完全自定义Toast");
       toast = new Toast(getApplicationContext());
       toast.setGravity(Gravity.RIGHT | Gravity.TOP, 12, 40);
       toast.setDuration(Toast.LENGTH_LONG);
       toast.setView(layout);
       toast.show();
    

    这里利用button的点击事件实现

       b1.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    Toast.makeText(MainActivity.this, "20169207 Toast test ", Toast.LENGTH_SHORT).show();
                }
            });
    


    码云链接

    实验六 修改布局让P290页的界面与教材不同

    针对六种布局进行了了解,并尝试了基本操作。

    • 一、LinearLayout
            线性布局,这个东西,从外框上可以理解为一个div,他首先是一个一个从上往下罗列在屏幕上。每一个LinearLayout里面又可分为垂直布局(android:orientation="vertical")和水平布局(android:orientation="horizontal" )。当垂直布局时,每一行就只有一个元素,多个元素依次垂直往下;水平布局时,只有一行,每一个元素依次向右排列。
        linearLayout中有一个重要的属性 android:layout_weight="1",这个weight在垂直布局时,代表行距;水平的时候代表列宽;weight值越大就越大。
      线形布局中预览和真机中完全一样。
      TextView占一定的空间,没有赋值也有一定的宽高,要特别注意。
    • 二、FrameLayout
            FrameLayout是最简单的一个布局对象。它被定制为你屏幕上的一个空白备用区域,之后你可以在其中填充一个单一对象 — 比如,一张你要发布的图片。所有的子元素将会固定在屏幕的左上角;你不能为FrameLayout中的一个子元素指定一个位置。后一个子元素将会直接在前一个子元素之上进行覆盖填充,把它们部份或全部挡住(除非后一个子元素是透明的)。
    • 三、AbsoluteLayout
         AbsoluteLayout 这个布局方式很简单,主要属性就两个 layout_x 和 layout_y 分别定义 这个组件的绝对位置。 即,以屏幕左上角为(0,0)的坐标轴的x,y值,当向下或向右移动时,坐标值将变大。AbsoluteLayout 没有页边框,允许元素之间互相重叠(尽管不推荐)。我们通常不推荐使用 AbsoluteLayout ,除非你有正当理由要使用它,因为它使界面代码太过刚性,以至于在不同的设备上可能不能很好地工作。
    • 四、RelativeLayout
          相对布局可以理解为某一个元素为参照物,来定位的布局方式。
                      android:layout_方向 = id  表示 在这个id对应的控件的方向上(上|下)
                      android:layout_align方向  = id 表示和这个控件的(上下左右)对齐
                      android:layout_to方向Of  = id 表示在这个控件的 左或者右
      eg:
                     android: layout_below="@id/la1"/>
                      将当前控件放置于id为la1 的控件下方。
                       android: layout_alignParentRight="true"
                      使当前控件的右端和父控件的右端对齐。这里属性值只能为true或false,默认false。
                       android:layout_marginLeft="10dip"
                      使当前控件左边空出相应的空间。
                      android: layout_toLeftOf="@id/true"
                      使当前控件置于id为true的控件的左边。
                       android: layout_alignTop="@id/ok"
                      使当前控件与id为ok的控件上端对齐。
    • 五、TableLayout
             表格布局类似Html里面的Table。每一个TableLayout里面有表格行TableRow,TableRow里面可以具体定义每一个元素。每个TableRow 都会定义一个 row (事实上,你可以定义其它的子对象,这在下面会解释到)。TableLayout 容器不会显示row 、cloumns 或cell 的边框线。每个 row 拥有0个或多个的cell ;每个cell 拥有一个View 对象。表格由列和行组成许多的单元格。表格允许单元格为空。单元格不能跨列,这与HTML 中的不一样。
        TabRow只论行,不论列(列自定义)。

    每一个布局都有自己适合的方式,另外,这五个布局元素可以相互嵌套应用,做出美观的界面

    码云链接

    试验七 第二十八章:构建项目,运行教材相关代码

    这里尝试添加了两种监听器,点击和长按。
    第一种:  在Test类中  定义一个类接口OnClickListener

    第二种:直接在Test类上写一个接口

    第三种:  匿名内部类

    点击事件截图:

    长按监听截图:

    码云链接

  • 相关阅读:
    python基础之元组,集合
    python列表补充、循环
    python基础之字典、赋值补充
    python基础2
    基本数据类型
    计算机基础与计算机硬件总结
    python基础
    操作系统
    Django APP打包重用
    PyCharm 使用Github托管Django项目
  • 原文地址:https://www.cnblogs.com/littletang/p/6815316.html
Copyright © 2020-2023  润新知