实验一 提交测试截图和码云练习项目链接,实现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类上写一个接口

第三种:  匿名内部类

点击事件截图:

长按监听截图:

码云链接

posted on 2017-05-06 14:57  唐宋5231  阅读(219)  评论(0编辑  收藏  举报