android菜鳥學習筆記5----第一個android程式,android5----

來源:互聯網
上載者:User

android菜鳥學習筆記5----第一個android程式,android5----

程式功能:點擊一個按鈕,然後彈出一個提示資訊

Step 1:在eclipse中建立一個android application project,在建立過程中不勾選create activity,這樣就建立了一個空的android工程。

 

此時,src及res/layout均為空白。

Step 2:在src中建立一個Activity繼承自android.app.Activity,點擊finish,產生代碼如下:

 1 package cn.csc.hello_world; 2  3   4  5 import android.app.Activity; 6  7   8  9 public class FirstActivity extends Activity {10 11  12 13 }

 

 

按下shift+alt+S,快顯功能表中選擇Override/Implement Methods:

 

勾選onCreate(Bundle),點OK,實現Activity的onCreate(Bundle)方法。自動產生代碼如下:

1     @Override2 3       protected void onCreate(Bundle savedInstanceState) {4 5            // TODO Auto-generated method stub6 7            super.onCreate(savedInstanceState);8 9       }

 

Step 3:在res/layout目錄下建立一個只有一個按鈕的布局檔案

右擊layout --》new --》 Android Xml File:

檔案名稱為first_layout

根節點選擇LinearLayout

然後點擊Finish完成

 

first_layout.xml中自動產生代碼如下:

 1 <?xml version="1.0" encoding="utf-8"?> 2  3 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 4  5     android:layout_width="match_parent"     寬度:填充父節點 6  7     android:layout_height="match_parent"    高度:填充父節點 8  9     android:orientation="vertical" >        子節點排列方向:垂直排列10 11 </LinearLayout>

 

在LinearLayout中添加一個Button子節點,輸入butt,然後alt+/,即可自動補全button子節點,要添加屬性,同樣可以輸入幾個首字母,然後alt+/補全

 1 <Button 2  3         android:id="@+id/btn"    添加一個id,以後引用這個button時,可用R.id.btn 4  5         android:layout_width="wrap_content"  包裹內容即可 6  7         android:layout_height="wrap_content" 包裹內容即可 8  9         android:text="I'm a button"            button上顯示的文本值10 11         />

 

這裡,text屬性直接設定為字串,寫入程式碼不太好,滑鼠點到”I’m a button”,使游標停留在字串任意位置,然後按下ctrl + 1(是數字1),在彈出的菜單中,選擇Extract Android String:

 

Replace by R.string.btnText,然後點擊OK,text屬性變為:android:text="@string/btnText",以後要引用這個字串,可以用R.string.btnText。

Step 4:給剛才建立的FirstActivity設定布局檔案,為first_layout.xml

在FirstActivity的onCreate()方法中,添加上:

1 protected void onCreate(Bundle savedInstanceState) {2 3            // TODO Auto-generated method stub4 5            super.onCreate(savedInstanceState);6 7            setContentView(R.layout.first_layout);8 9 }

 

此時,會發現R.layout.點不出來first_layout,setContentView()語句報錯

觀察FirstActivity代碼,會發現,多了一句import android.R;

把它刪掉,還是報錯,提示找不到R。

(注意,這裡若是按下Ctrl + 1進行代碼修複,import com.example.hello_world.R;

雖然不會再報錯,但是,後面註冊Activity時,若不指定完整的包名.類名會出現程式無法啟動並執行問題,報錯提示找不到所需的Activity。為了簡單起見可以進行下面的修改package屬性操作,當然,也可以不修改,後面註冊各個組件時,注意帶上包名即可)

找到Android Manifest.xml檔案,看到根節點manifest中package屬性:並不是我們設定的FirstActivity.java包名,而是建立工程時預設的那個包名,而包cn.csc.hello_world是之後才建立的。這就導致了R.java與FirstActivity.java不在同一個包中,因此無法直接存取。

1 <manifest xmlns:android="http://schemas.android.com/apk/res/android"2 3     package="com.example.hello_world"4 5     android:versionCode="1"6 7 android:versionName="1.0" >

 

把package屬性值修改為FirstActivity的包名即可:package="cn.csc.hello_world"。

這樣R.java與FirstActivity.java就在同一個包中了,可以直接存取。

然後回到FirstActivity代碼,發現就不再報錯了。

Step 5 :找到添加的按鈕,設定其單擊響應事件

onCreate()代碼修改如下:

 1 protected void onCreate(Bundle savedInstanceState) { 2  3            // TODO Auto-generated method stub 4  5            super.onCreate(savedInstanceState); 6  7            setContentView(R.layout.first_layout); 8  9            Button btn = (Button) findViewById(R.id.btn);10 11            btn.setOnClickListener(new OnClickListener() {12 13                      @Override14 15                      public void onClick(View arg0) {16 17               Toast.makeText(FirstActivity.this, "I was clicked", Toast.LENGTH_SHORT).show();18 19                      }20 21               });22 23 }

 

findViewById()根據Id找到需要的View

btn.setOnClickListener()設定單擊事件監聽,這裡選擇使用了匿名內部類實現。

Toast.makeText().show();彈出一個提示資訊

Step 6:註冊要使用的FirstActivity

完成Step 5之後,若是運行該程式,會發現沒有任何效果,這是因為沒有在Android Manifest.xml中註冊要使用的Activity。所以FirstActivity不會被使用,當然它的onCreate()方法也不會被調用。

註冊FirstActivity方法如下:

在application節點中添加activity子節點:

 1 <activity  android:name=".FirstActivity"      android:label="Hello world" > 2  3             <intent-filter > 4  5                 <action android:name="android.intent.action.MAIN"/> 6  7                 <category android:name="android.intent.category.LAUNCHER"/> 8  9             </intent-filter>10 11 </activity>

 

name屬性必須設定,指定註冊的是哪個Activity類,這裡簡寫為.FirstActivity,將與manifest節點中的package屬性拼接成完整的類名,也可以寫完整的類名,如:cn.csc.hello_world.FirstActivity

label屬性,設定應用的標題內容,若不設定,則標題為項目的名稱。

intent-filter設定啟動該activity的意圖,這裡將該activity設定為啟動activity。

至此,改程式就可以順利運行了。

 

若不想顯示應用程式標題欄,則可以在onCreate()方法中,添加requestWindowFeature(Window.FEATURE_NO_TITLE);

但是,需要注意的是,一定要在setContentView()之前添加該代碼,否則會報錯。

 

總結:

若出現這不到R的錯誤提示,則可以優先考慮是不是前後設定的包名不一致,導致R.java與自己寫的代碼不在同一個包中的問題。

Manifest.xml中的package屬性,是在建立工程中設定的,在手機中用於唯一標識當前應用,原始碼的包可以手工建立新的包名,若與manifest.xml中的不一致,則應注意註冊各個組件時,應使用完整的類限定名,即包名.類名。否則會將package屬性,與所註冊的組件的name屬性拼接成錯誤的類限定名,導致找不到組件的定義類。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.