1.首先要在activity_main.xml文件里新建兩個button標簽。
1 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 2 xmlns:tools="http://schemas.android.com/tools" 3 android:layout_width="match_parent" 4 android:layout_height="match_parent" 5 android:orientation="vertical" 6 android:paddingBottom="@dimen/activity_vertical_margin" 7 android:paddingLeft="@dimen/activity_horizontal_margin" 8 android:paddingRight="@dimen/activity_horizontal_margin" 9 android:paddingTop="@dimen/activity_vertical_margin" 10 tools:context="com.fate.testproject.MainActivity" > 11 12 <TextView 13 android:layout_width="match_parent" 14 android:layout_height="wrap_content" 15 android:text="@string/total" 16 android:textSize="45sp" 17 android:layout_gravity="center" 18 android:gravity="center" 19 android:id="@+id/tvTotal" 20 /> 21 22 <Button 23 android:layout_width="250sp" 24 android:layout_height="wrap_content" 25 android:text="@string/addOne" 26 android:layout_gravity="center" 27 android:textSize="20sp" 28 android:id="@+id/bAddOne" 29 /> 30 <Button 31 android:layout_width="250sp" 32 android:layout_height="wrap_content" 33 android:text="@string/subOne" 34 android:layout_gravity="center" 35 android:textSize="20sp" 36 android:id="@+id/bSubOne" 37 /> 38 39 40 </LinearLayout>
這里出現了幾個問題。
1)布局問題:我現在用的Android環境是最新的,新建工程下activity_main.xml文件自帶布局並非LinearLayout線性布局。之前對照書上的內容跟網上視頻教程總感覺不對勁。之后,改成了LinearLayout線性布局之后,又發現幾個控件擠成一橫排,控件甚至被擠出視圖外面。原來線性布局默認的是橫向的,不是我們所認為的豎向。這里添加一句
android:orientation="vertical",所有空間依次豎向排列。
2)硬性編碼問題:在定義控件的寬度(width)和高度(height)的時候我使用了數值。一般人現在都知道如果用像素dx作為單位來定義控件的寬和高會出現warning的黃色警告。但是我在使用dp作為單位的時候也出現了warning,最后在提示下使用的是sp。還有,在定義Android:text的時候,不引用string下的元素而直接輸入內容也會出現warning警告。這種硬性編碼引起warning警告一般不會導致整個程序出錯,但是良好的習慣和編程思路會減少出錯的概率。
3)我在設置id的時候出現了個小毛病,寫錯了,將android:id="@+id/bSubOne"寫成了android:id="@id/bSubOne"少了一個+號,導致程序完全運行不了,出現紅色警報。千萬細心。
2.其次在resources下的string.xml文件里添加元素
1 <?xml version="1.0" encoding="utf-8"?> 2 <resources> 3 4 <string name="app_name">TestProject</string> 5 <string name="hello_world">Hello world!</string> 6 <string name="action_settings">Settings</string> 7 <string name="total">總數為:0</string> 8 <string name="subOne">數值減一</string> 9 <string name="addOne">數值加一</string> 10 11 </resources>
將button的部分信息在這里添加,更加方便修改和管理。如果需要使用,直接引用。
3.在MainActivity函數中添加響應函數
1 package com.fate.testproject; 2 3 import android.app.Activity; 4 import android.os.Bundle; 5 import android.view.Menu; 6 import android.view.MenuItem; 7 import android.view.View; 8 import android.widget.Button; 9 import android.widget.TextView; 10 11 12 public class MainActivity extends Activity { 13 14 int counter;//創建int變量counter 15 Button mAddOne, mSubOne;//創建兩個button變量,分別是加一button和減一button 16 TextView mTotal;//創建TextView類型的變量mTotal 17 18 @Override 19 protected void onCreate(Bundle savedInstanceState) { 20 super.onCreate(savedInstanceState); 21 setContentView(R.layout.activity_main); 22 23 24 //初始化變量的值 25 counter = 0; 26 27 //關聯兩個button和TextView變量 28 mAddOne = (Button)findViewById(R.id.bAddOne); 29 mSubOne = (Button)findViewById(R.id.bSubOne); 30 mTotal = (TextView)findViewById(R.id.tvTotal); 31 32 //添加按鈕單機響應函數 33 mAddOne.setOnClickListener(new View.OnClickListener() { 34 35 @Override 36 public void onClick(View v) { 37 // TODO Auto-generated method stub 38 counter++; 39 mTotal.setText("總數為:" + counter); 40 } 41 }); 42 43 mSubOne.setOnClickListener(new View.OnClickListener() { 44 45 @Override 46 public void onClick(View v) { 47 // TODO Auto-generated method stub 48 counter--; 49 mTotal.setText("總數為:" + counter); 50 } 51 }); 52 } 53 54 55 @Override 56 public boolean onCreateOptionsMenu(Menu menu) { 57 // Inflate the menu; this adds items to the action bar if it is present. 58 getMenuInflater().inflate(R.menu.main, menu); 59 return true; 60 } 61 62 @Override 63 public boolean onOptionsItemSelected(MenuItem item) { 64 // Handle action bar item clicks here. The action bar will 65 // automatically handle clicks on the Home/Up button, so long 66 // as you specify a parent activity in AndroidManifest.xml. 67 int id = item.getItemId(); 68 if (id == R.id.action_settings) { 69 return true; 70 } 71 return super.onOptionsItemSelected(item); 72 } 73 }
簡單的添加button只需要修改這三個工程下的文件就可以了。
這里我為了養成自己的習慣,讓我寫出來的代碼更具有易讀性。我在定義各個變量的時候是這樣的。
1)遵循定義名有意義,基本代表控件的內容或含義,並且盡量使用英文代表其含義。如:加一我會定義成addone
2)一個控件的id,name,或者其他函數相關關聯的定義會采用稍微不同的定義。如在string里的string name一般為小寫字母開頭,之后的每個單詞首個大寫;設置id則在前面添加其標簽的縮寫字母(如,button標簽下的就在string name 前面添加字母b,並將b后第一個字母大寫,TextView標簽下則添加字母tv,並將tv后第一個字母大寫);在其他函數如MainActivity函數中使用相關聯的變量時,則在string name前面添加字母m,並將m后第一個字母大寫。
實例:創建一個加一按鈕則string name就是addOne,id就是bAddOne,主函數相關聯的函數變量就是mAddOne。
3)注意分段,分行,讓整個代碼看起來有層次。方便閱讀,方便修改。也能讓自己寫代碼的時候心情更好,因為代碼不可能是一次性寫好寫完,總要回頭來修改查看,如果沒有好的層次感,很難在看自己寫的代碼的時候有好心情,這不但影響工作和學習,還打擊我們對開發的熱情。