20169219 實驗四Android程序設計

1、實現Linux下dc的功能,計算後綴表達式的值html

public int evaluate(String expr) {
        int op1, op2, result = 0;
        String token;
        StringTokenizer tokenizer = new StringTokenizer(expr);

        while (tokenizer.hasMoreTokens()) {
            token = tokenizer.nextToken();

    //若是是運算符,調用isOperator
            if (isOperator(token)) {
                //從棧中彈出操做數2
                op2 = (stack.pop()).intValue();
                //從棧中彈出操做數1
                op1 = (stack.pop()).intValue();
                //根據運算符和兩個操做數調用evalSingleOp計算result;
                result = evalSingleOp(token.charAt(0), op1, op2);
                //計算result入棧;
                stack.push(new Integer(result));
            } else {//若是是操做數
                //操做數入棧;
                stack.push(new Integer(Integer.parseInt(token)));
            }
        }
        return result;
    }

2、完成Hello World, 要求修改res目錄中的內容,Hello World後要顯示本身的學號android

3、修改代碼讓MainActivity啓動ThirdActivity框架

@Override
    public boolean onTouch(View arg0, MotionEvent event) {
        Intent intent = new Intent(this, ThirdActivity.class);
        intent.putExtra("message", "Message from First Screen");
        startActivity(intent);
        return true;
    }

爲了觸碰事件,MainActivity類實現OnTouchListener接口。ide

4、修改代碼讓Toast消息中顯示本身的學號信息佈局

在Android開發中,咱們常常會遇到須要給用戶一個提示,可是又不想影響總體的體驗,那麼Toast出現了。Toast是Android中用來顯示顯示信息的一種機制,和Dialog不同的是,Toast是沒有焦點的,並且Toast顯示的時間有限,過必定的時間就會自動消失。並且Toast主要用於向用戶顯示提示消息。測試

  • 傳參介紹

Toast.makeText(Context context, CharSequence text, @Duration int duration)this

  • contentx : 當前的上下文環境。可用getApplicationContext()或this
  • text : 要顯示的字符串。
  • duration : 顯示的時間長短,以毫秒爲單位。Toast默認的有兩個LENGTH_LONG(長)和LENGTH_SHORT(短),也可使用毫秒如2000

顯示的幾種方式lua

一、默認
二、自定義位置
三、帶圖片
四、徹底自定義
徹底自定義頁面翻譯

<ImageView android:layout_width="wrap_content"
               android:layout_height="wrap_content"
               android:id="@+id/imageView"
    />
    <TextView android:layout_width="wrap_content"
              android:layout_height="wrap_content"
              android:id="@+id/textView"
              android:layout_below="@id/imageView"
    />

5、修改佈局讓P290頁的界面與教材不一樣code

LinearLayout 線性佈局
FrameLayout 單幀佈局,也有中文翻譯爲幀佈局、框架佈局。
RelativeLayout 相對佈局
AbsoluteLayout 絕對佈局
TableLayout 表格佈局

每種佈局都有一行重要的代碼來設置:

LinearLayout 中的 android:orientation="vertical"

詳細使用方法可參考Android 開發之旅:view的幾種佈局方式及實踐

6、監聽器的使用

Android提供的基於事件監聽接口有OnClickListener、OnLongClickListener、OnFocusChangeListener、OnKeyListener、OnTouchListener、OnCreateContextMenuListener等。

1)OnClickListener接口:該接口處理的是點擊事件。在觸摸模式下,是在某個View上按下並擡起的組合動做,而在鍵盤模式下,是某個View得到焦點後點擊肯定鍵或者按下軌跡球事件。
2)OnLongClickListener接口: OnLongClickListener接口與上述的OnClickListener接口原理基本相同,只是該接口爲View長按事件的捕捉接口,即當長時間按下某個View時觸發的事件。
3)OnFocusChangeListener接口:OnFocusChangeListener接口用來處理控件焦點發生改變的事件。若是註冊了該接口,當某個控件失去焦點或者得到焦點時都會觸發該接口中的回調方法。
4)OnKeyListener接口:是對手機鍵盤進行監聽的接口,經過對某個View註冊並監聽,當View得到焦點並有鍵盤事件時,便會觸發該接口中的回調方法。
5)OnTouchListener接口:是用來處理手機屏幕事件的監聽接口,當爲View的範圍內觸摸按下、擡起或滑動等動做時都會觸發該事件。
6)OnCreateContextMenuListener接口:是用來處理上下文菜單顯示事件的監聽接口。該方法是定義和註冊上下文菜單的另外一種方式。

public class MainActivity extends Activity {

    int counter = 0;
    int[] colors = {Color.BLACK, Color.BLUE, Color.CYAN,
            Color.DKGRAY, Color.GRAY, Color.GREEN, Color.LTGRAY,
            Color.MAGENTA, Color.RED, Color.WHITE, Color.YELLOW};

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

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it /
        // / is present.
        getMenuInflater().inflate(R.menu.menu_main, menu);
        return true;
    }

    public void changeColor(View view) {
        if (counter == colors.length) {
            counter = 0;
        }
        view.setBackgroundColor(colors[counter++]);
    }
}

7、簡易計算器
參考了一個android開發視頻編寫計算器。

switch (opt){
                case Types.ADD:
                    items.add(new Item(a+b,Types.NUM));
                    break;
                case Types.SUB:
                    items.add(new Item(a-b,Types.NUM));
                    break;
                case Types.X:
                    items.add(new Item(a*b,Types.NUM));
                    break;
                case Types.DIV:
                    items.add(new Item(a/b,Types.NUM));
                    break;
            }

出現的問題

一、測試MyDCTest老是出錯,顯示報錯信息是0 test classes found in package 'exp4'
檢查屢次發現測試類的名稱有錯誤,以前寫的是MyDCTest,須要改爲MyDCTester

二、報錯「no resource identifier found for attribute 'weight' in package 'android'」
代碼

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 

......

<Button
            android:id="@+id/btn1"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:weight="1"
            android:text="1"/>

解決方法:在android:weight="1"處應該改成android:layout_weight="1",同時,layout_weight只適用於LinearLayout

參考資料

Android 開發之旅:view的幾種佈局方式及實踐

Android 中 Toast用法

相關文章
相關標籤/搜索