編輯:關於android開發
原文鏈接:http://www.orlion.ga/427/
一、隱藏activity的標題
在activity的java代碼的onCreate()方法中入requestWindowFeature(Window.FEATURE_NO_TITLE);如下:
@Override public void onCreate(Bundle savedInstanceState){ super.onCreate(savedInstanceState); requestWindowFeature(Window.FEATURE_NO_TITLE); setContentView(R.layout.first_layout); }
二、在Activity中使用Toast
首先給button綁定點擊事件,然後在button被點擊時候彈出toast:
@Override public void onCreate(Bundle savedInstanceState){ super.onCreate(savedInstanceState); requestWindowFeature(Window.FEATURE_NO_TITLE); setContentView(R.layout.first_layout); // 點擊按鈕彈出Toast Button button1 = (Button) findViewById(R.id.button_1); button1.setOnClickListener(new View.OnClickListener(){ @Override public void onClick(View v){ Toast.makeText(FirstActivity.this, "You chick button 1" , Toast.LENGTH_SHORT).show(); } }); }
解釋:在活動中,可以通過 findViewById()方法獲取到在布局文件中定義的元素,這裡我們傳入 R.id.button_1,來得到按鈕的實例,這個值是剛才在 first_layout.xml中通過 android:id屬性指定的。findViewById()方法返回的是一個 View對象,我們需要向下轉型將它轉成 Button對象。得到了按鈕的實例之後,我們通過調用 setOnClickListener()方法為按鈕注冊一個監聽器,點擊按鈕時就會執行監聽器中的 onClick()方法。因此,彈出 Toast的功能當然是要在nClick()方法中編寫了。
Toast的用法非常簡單, 通過靜態方法makeText()創建出一個Toast對象, 然後調用show()將 Toast顯示出來就可以了。這裡需要注意的是,makeText()方法需要傳入三個參數。第一個參數是 Context,也就是 Toast要求的上下文,由於活動本身就是一個 Context對象,因此這裡直接傳入FirstActivity.this即可。 第二個參數是Toast顯示的文本內容, 第三個參數是Toast顯示的時長,有兩個內置常量可以選擇 Toast.LENGTH_SHORT和 Toast.LENGTH_LONG。
如果你需要在 XML中引用一個 id,就使用@id/id_name這種語法,而如果你需要在 XML中
定義一個 id,則要使用@+id/id_name這種語法。
三、使用Intent
怎樣才能由主活動跳轉到其他活動呢?我們現在就來一起看一看。
1、使用顯式Intent
在 ActivityTest項目中再創建一個活動。新建一個 second_layout.xml布局文件,代碼如下:
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" > <Button android:id="@+id/button_2" android:layout_width="match_parent" android:layout_height="wrap_content" android:text="Button 2"/> </LinearLayout>
新建活動 SecondActivity繼承自Activity,代碼如下:
package ga.orlion.activitydemo1; import android.app.Activity; import android.os.Bundle; import android.view.Window; public class SecondActivity extends Activity { @Override public void onCreate(Bundle savedInstanceState){ super.onCreate(savedInstanceState); requestWindowFeature(Window.FEATURE_NO_TITLE); setContentView(R.layout.second_layout); } }
最後在 AndroidManifest.xml中為 SecondActivity進行注冊。
<activity android:name=".SecondActivity"> </activity>
由於 SecondActivity不是主活動,因此不需要配置<intent-filter>標簽裡的內容,注冊活動的代碼也是簡單了許多。現在第二個活動已經創建完成,剩下的問題就是如何去啟動這第二個活動了,這裡我們需要引入一個新的概念,Intent。
Intent是 Android程序中各組件之間進行交互的一種重要方式,它不僅可以指明當前組件想要執行的動作,還可以在不同組件之間傳遞數據。Intent一般可被用於啟動活動、啟動服務、以及發送廣播等場景,由於服務、廣播等概念你暫時還未涉及,麼本章我們的目光無疑就鎖定在了啟動活動上面。Intent的用法大致可以分為兩種,顯式 Intent和隱式 Intent,我們先來看一下顯式 Intent如何使用。
Intent有多個構造函數的重載,其中一個是 Intent(Context packageContext, Class<?> cls)。這個構造函數接收兩個參數,第一個參數 Context要求提供一個啟動活動的上下文,第二個參數Class則是指定想要啟動的目標活動, 通過這個構造函數就可以構建出Intent的 “意圖” 。然後我們應該怎麼使用這個 Intent呢?Activity類中提供了一個 startActivity()方法, 這個方法是專門用於啟動活動的, 它接收一個Intent參數, 這裡我們將構建好的Intent傳入startActivity()
方法就可以啟動目標活動了。修改 FirstActivity中按鈕的點擊事件,代碼如下所示:
button1.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { Intent intent = new Intent(FirstActivity.this, SecondActivity.class); startActivity(intent); } });
我們首先構建出了一個Intent,傳入FirstActivity.this作為上下文,傳入SecondActivity.class作為目標活動,這樣我們的“意圖”就非常明顯了,即在 FirstActivity這個活動的基礎上打開 SecondActivity這個活動。然後通過 startActivity()方法來執行這個 Intent。重新運行程序,在 FirstActivity的界面點擊一下按鈕我們已經成功啟動 SecondActivity這個活動了。如果你想要回到上一個活動怎麼辦呢?很簡單,按下 Back鍵就可以銷毀當前活動,從而回到上一個活動了。使用這種方式來啟動活動,Intent的“意圖”非常明顯,因此我們稱之為顯式 Intent。
2、使用隱式Intent
相比於顯式 Intent,隱式 Intent則含蓄了許多,它並不明確指出我們想要啟動哪一個活
動, 而是指定了一系列更為抽象的action和category等信息, 然後交由系統去分析這個Intent,並幫我們找出合適的活動去啟動。什麼叫做合適的活動呢?簡單來說就是可以響應我們這個隱式 Intent的活動,那麼目前SecondActivity可以響應什麼樣的隱式 Intent呢?額,現在好像還什麼都響應不了,不過很快就會有了。通過在<activity>標簽下配置<intent-filter>的內容,可以指定當前活動能夠響應的 action和 category,打開 AndroidManifest.xml,添加如下代碼:
<activity android:name=".SecondActivity" > <intent-filter> <action android:name="com.example.activitytest.ACTION_START" /> <category android:name="android.intent.category.DEFAULT" /> </intent-filter> </activity>
在<action>標簽中我們指明了當前活動可以響應 com.example.activitytest.ACTION_START這個 action,而<category>標簽則包含了一些附加信息,更精確地指明了當前的活動能夠響應的 Intent中還可能帶有的 category。只有<action>和<category>中的內容同時能夠匹配上 Intent中指定的 action和 category時,這個活動才能響應該 Intent。修改 FirstActivity中按鈕的點擊事件,代碼如下所示:
button1.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { Intent intent = new Intent("com.example.activitytest.ACTION_START"); startActivity(intent); } });
可以看到,我們使用了 Intent的另一個構造函數,直接將 action的字符串傳了進去,表明我們想要啟動能夠響應 com.example.activitytest.ACTION_START這個 action的活動。那前面不是說要<action>和<category>同時匹配上才能響應的嗎?怎麼沒看到哪裡有指定category 呢?這是因為 android.intent.category.DEFAULT 是一種默認的 category,在調用startActivity()方法的時候會自動將這個 category添加到 Intent中。重新運行程序,在 FirstActivity的界面點擊一下按鈕,同樣成功啟動 SecondActivity了。
3、使用Intent傳遞數據
Intent還可以在啟動活動的時候傳遞數據的,我們來一起看一下。在啟動活動時傳遞數據的思路很簡單,Intent中提供了一系列 putExtra()方法的重載,可以把我們想要傳遞的數據暫存在 Intent中,啟動了另一個活動後,只需要把這些數據再從Intent中取出就可以了。比如說 FirstActivity中有一個字符串,現在想把這個字符串傳遞到SecondActivity中,你就可以這樣編寫:
button1.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { String data = "Hello SecondActivity"; Intent intent = new Intent(FirstActivity.this, SecondActivity.class); intent.putExtra("extra_data", data); startActivity(intent); } });
這裡我們還是使用顯式 Intent的方式來啟動 SecondActivity,並通過 putExtra()方法傳遞了一個字符串。注意這裡putExtra()方法接收兩個參數,第一個參數是鍵,用於後面從 Intent中取值,第二個參數才是真正要傳遞的數據。然後我們在 SecondActivity中將傳遞的數據取出,並打印出來,代碼如下所示:
public class SecondActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); requestWindowFeature(Window.FEATURE_NO_TITLE); setContentView(R.layout.second_layout); Intent intent = getIntent(); String data = intent.getStringExtra("extra_data"); Log.d("SecondActivity", data); } }
首先可以通過 getIntent()方法獲取到用於啟動 SecondActivity 的 Intent,然後調用getStringExtra()方法,傳入相應的鍵值,就可以得到傳遞的數據了。這裡由於我們傳遞的是字符串,所以使用 getStringExtra()方法來獲取傳遞的數據,如果傳遞的是整型數據,則使用getIntExtra()方法,傳遞的是布爾型數據,則使用 getBooleanExtra()方法,以此類推。
4、返回數據給上一個活動
既然可以傳遞數據給下一個活動, 那麼能不能夠返回數據給上一個活動呢?答案是肯定的。不過不同的是,返回上一個活動只需要按一下 Back鍵就可以了,並沒有一個用於啟動活動 Intent來傳遞數據。通過查閱文檔你會發現,Activity中還有一個 startActivityForResult()方法也是用於啟動活動的, 但這個方法期望在活動銷毀的時候能夠返回一個結果給上一個活動。毫無疑問,這就是我們所需要的。startActivityForResult()方法接收兩個參數,第一個參數還是 Intent,第二個參數是請求碼,用於在之後的回調中判斷數據的來源。我們還是來實戰一下,修改 FirstActivity中按鈕的點擊事件,代碼如下所示:
button1.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { Intent intent = new Intent(FirstActivity.this, SecondActivity.class); startActivityForResult(intent, 1); } });
這裡我們使用了 startActivityForResult()方法來啟動 SecondActivity,請求碼只要是一個唯一值就可以了,這裡傳入了 1。接下來我們在 SecondActivity中給按鈕注冊點擊事件,並在點擊事件中添加返回數據的邏輯,代碼如下所示:
public class SecondActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); requestWindowFeature(Window.FEATURE_NO_TITLE); setContentView(R.layout.second_layout); Button button2 = (Button) findViewById(R.id.button_2); button2.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { Intent intent = new Intent(); intent.putExtra("data_return", "Hello FirstActivity"); setResult(RESULT_OK, intent); finish(); } }); } }
可以看到,我們還是構建了一個 Intent,只不過這個 Intent僅僅是用於傳遞數據而已,它沒有指定任何的“意圖” 。緊接著把要傳遞的數據存放在 Intent中,然後調用了 setResult()方法。這個方法非常重要,是專門用於向上一個活動返回數據的。setResult()方法接收兩個參數,第一個參數用於向上一個活動返回處理結果,一般只使用 RESULT_OK 或RESULT_CANCELED這兩個值,第二個參數則是把帶有數據的 Intent傳遞回去,然後調用了 finish()方法來銷毀當前活動。由於我們是使用startActivityForResult()方法來啟動 SecondActivity的, 在 SecondActivity被銷毀之後會回調上一個活動的onActivityResult()方法,因此我們需要在 FirstActivity中重寫這個方法來得到返回的數據,如下所示:
@Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { switch (requestCode) { case 1: if (resultCode == RESULT_OK) { String returnedData = data.getStringExtra("data_return"); Log.d("FirstActivity", returnedData); } break; default: } }
onActivityResult()方法帶有三個參數,第一個參數 requestCode,即我們在啟動活動時傳入的請求碼。 第二個參數 resultCode, 即我們在返回數據時傳入的處理結果。 第三個參數 data,即攜帶著返回數據的 Intent。由於在一個活動中有可能調用 startActivityForResult()方法去啟動很多不同的活動,每一個活動返回的數據都會回調到 onActivityResult()這個方法中,因此我們首先要做的就是通過檢查 requestCode 的值來判斷數據來源。確定數據是從SecondActivity返回的之後,我們再通過 resultCode的值來判斷處理結果是否成功。最後從data中取值並打印出來,這樣就完成了向上一個活動返回數據的工作。
如果用戶在 SecondActivity中並不是通過點擊按鈕,而是通過按下Back鍵回到 FirstActivity,這樣數據不就沒法返回了嗎?沒錯,不過這種情況還是很好處理的,我們可以通過重寫 onBackPressed()方法來解決這個問題,代碼如下所示:
@Override public void onBackPressed() { Intent intent = new Intent(); intent.putExtra("data_return", "Hello FirstActivity"); setResult(RESULT_OK, intent); finish(); }
單機搭建Android開發環境(二),單機搭建android開發 前文介紹了如何優化SSD和內存,以發揮開發主機的最佳性能,
安卓--shape簡單使用,安卓--shapeshape 先看下,系統自帶的EditText和Button的外形 下面看加了shape後的效
Android 采用get方式提交數據到服務器,androidget首先搭建模擬web 服務器,新建動態web項目,servlet代碼如下: package com.w
Android性能優化的淺談,android性能優化一、概要: 本文主要以Android的渲染機制、UI優化、多線程的處理、緩存處理、電量優化以及代碼規范等幾方面