20169207 2016-2017-2 《移動平臺開發實踐》 第十週做業

實驗一 提交測試截圖和碼雲練習項目連接,實現Linux下dc的功能,計算後綴表達式的值

實現代碼以下:java

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和操做數的順序,否則在減法和除法上會出現問題。linux

實驗二 實現一個簡易計算器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目錄中的內容,


這裏須要修改佈局文件。android

實驗四 建立 ThirdActivity, 在ThirdActivity中顯示本身的學號,修改代碼讓MainActivity啓動ThirdActivity

android 界面跳轉的幾種方式:git

第一種方式,用action來跳轉。
 
一、使用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文件中創建關聯關係。express

第二種方式,用類名跳轉。
 
Intent負責對應用中一次操做的動做、動做涉及數據、附加數據進行描述,Android則根據此Intent的描述,負責找到對應的組件,將 Intent傳遞給調用的組件,並完成組件的調用。Intent在這裏起着實現調用者與被調用者之間的解耦做用。
Intent傳遞過程當中,要找到目標消費者(另外一個Activity,IntentReceiver或Service),也就是Intent的響應者。ide

所用核心代碼:佈局

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。this

默認樣式: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的點擊事件實現google

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


碼雲連接

實驗六 修改佈局讓P290頁的界面與教材不一樣

針對六種佈局進行了瞭解,並嘗試了基本操做。

  • 1、LinearLayout
          線性佈局,這個東西,從外框上能夠理解爲一個div,他首先是一個一個從上往下羅列在屏幕上。每個LinearLayout裏面又可分爲垂直佈局(android:orientation="vertical")和水平佈局(android:orientation="horizontal" )。當垂直佈局時,每一行就只有一個元素,多個元素依次垂直往下;水平佈局時,只有一行,每個元素依次向右排列。
      linearLayout中有一個重要的屬性 android:layout_weight="1",這個weight在垂直佈局時,表明行距;水平的時候表明列寬;weight值越大就越大。
    線形佈局中預覽和真機中徹底同樣。
    TextView佔必定的空間,沒有賦值也有必定的寬高,要特別注意。
  • 2、FrameLayout
          FrameLayout是最簡單的一個佈局對象。它被定製爲你屏幕上的一個空白備用區域,以後你能夠在其中填充一個單一對象 — 好比,一張你要發佈的圖片。全部的子元素將會固定在屏幕的左上角;你不能爲FrameLayout中的一個子元素指定一個位置。後一個子元素將會直接在前一個子元素之上進行覆蓋填充,把它們部份或所有擋住(除非後一個子元素是透明的)。    
  • 3、AbsoluteLayout
       AbsoluteLayout 這個佈局方式很簡單,主要屬性就兩個 layout_x 和 layout_y 分別定義 這個組件的絕對位置。 即,以屏幕左上角爲(0,0)的座標軸的x,y值,當向下或向右移動時,座標值將變大。AbsoluteLayout 沒有頁邊框,容許元素之間互相重疊(儘管不推薦)。咱們一般不推薦使用 AbsoluteLayout ,除非你有正當理由要使用它,由於它使界面代碼太過剛性,以致於在不一樣的設備上可能不能很好地工做。
  • 4、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的控件上端對齊。
  • 5、TableLayout
           表格佈局相似Html裏面的Table。每個TableLayout裏面有表格行TableRow,TableRow裏面能夠具體定義每個元素。每一個TableRow 都會定義一個 row (事實上,你能夠定義其它的子對象,這在下面會解釋到)。TableLayout 容器不會顯示row 、cloumns 或cell 的邊框線。每一個 row 擁有0個或多個的cell ;每一個cell 擁有一個View 對象。表格由列和行組成許多的單元格。表格容許單元格爲空。單元格不能跨列,這與HTML 中的不同。
      TabRow只論行,不論列(列自定義)。

  每個佈局都有本身適合的方式,另外,這五個佈局元素能夠相互嵌套應用,作出美觀的界面

碼雲連接

試驗七 第二十八章:構建項目,運行教材相關代碼

這裏嘗試添加了兩種監聽器,點擊和長按。
第一種:  在Test類中  定義一個類接口OnClickListener

第二種:直接在Test類上寫一個接口

第三種:  匿名內部類

點擊事件截圖:

長按監聽截圖:

碼雲連接

相關文章
相關標籤/搜索