編輯:關於Android編程
1、一些文件夾的作用===================================== res/assets 文件夾放音樂,不會被編譯 res/raw 放音樂,會被編譯 res/drawable 放圖片 2、主Activity聲明=====================================3、隱藏標題欄===================================== 在 onCreate()方法中添加如下代碼: requestWindowFeature(Window.FEATURE_NO_TITLE) 標題欄,注意這句代碼一定要在 setContentView()之前執行 4、Toast===================================== public void onClick(View v) { Toast.makeText(FirstActivity.this, "You clicked Button 1", Toast.LENGTH_SHORT).show(); } 5、在活動中使用 Menu===================================== 6、播放音樂===================================== 7、銷毀一個Activity 兩種方式 :第一種 按back鍵就可以銷毀當前活動 第二種代碼如下 button1.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { finish(); } }); 8、使用 Intent 在活動之間穿梭===================================== 使用顯式 Intent button1.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { Intent intent = new Intent(FirstActivity.this, SecondActivity.class); startActivity(intent); } }); 使用隱式 Intent button1.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { Intent intent = new Intent("com.example.activitytest.ACTION_START"); intent.addCategory("com.example.activitytest.MY_CATEGORY"); startActivity(intent); } }); 9、調用系統浏覽器===================================== button1.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { Intent intent = new Intent(Intent.ACTION_VIEW); intent.setData(Uri.parse("http://www.baidu.com")); startActivity(intent); } }); 10、調用系統撥號界面===================================== button1.setOnClickListener(new OnClickListener() { @Override 第 2 章 先從看得到的入手,探究活動 51 public void onClick(View v) { Intent intent = new Intent(Intent.ACTION_DIAL); intent.setData(Uri.parse("tel:10086")); startActivity(intent); } }); 11、向下一個活動傳遞數據===================================== 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); } }); 下一個活動接收數據 @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); } 12、返回數據給上一個活動===================================== 第一個活動代碼 button1.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { Intent intent = new Intent(FirstActivity.this, SecondActivity.class); startActivityForResult(intent, 1); } }); 第二個活動代碼 @Override public void onClick(View v) { Intent intent = new Intent(); intent.putExtra("data_return", "Hello FirstActivity"); setResult(RESULT_OK, intent); finish(); } 然後第一個活動獲取返回數據重寫下面方法 @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: } } 13、活動的生命周期 開始運行主活動 依次運行 onCreate onStart onResume 然後點擊一個按鈕跳轉到另一個活動(完全蓋住主活動) 此時運行 onPause onStop 然後返回 就會 onRestart onStart onResume 再點擊另一個按鈕彈出框 此時就會 onPause 然後再返回 只有 onResume 最後主活動返回 onPause onStop onDestroy 13、活動被回收了怎麼辦===================================== 如果上一個活動被回收,那麼返回上一個活動依然會看見,但是這時 調用的不是onRestart 而是 onCreate 但是這樣不能保存數據會影響用戶體驗 好在有另一個方法可以用來回收前調用保存數據,onSaveInstanceState(Bundle outState) 數據保存在Bundle對象中 那麼如何取出Bundle , 就在onCreate(Bundle savedInstanceState) 14、活動的啟動模式 standard 默認模式,傻瓜添加模式,該模式系統不會在乎這個活動是否已經在返回棧中存在,啟動一次添加一次 singleTop 單棧頂模式,該模式如果當前活動在棧頂就不會再添加了,但是如果不是在棧頂還會添加 singleTask 單活動模式,全棧只出現一次 singleInstance 這個能實現應用程序共享活動 因為它用了特殊的共享返回棧 15、如果R文件丟失===================================== Build--> Rebuild Project 16、廣播的類型============================== 標准廣播 完全異步 發出廣播之後所有接收器同時接收 有序廣播 同步 優先級高的接收器先接收 注意:廣播是跨進程的,即一個應用發出的廣播,不同的應用都可以接收 17、動態注冊廣播接收器============================== @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); intentFilter = new IntentFilter(); intentFilter.addAction("android.net.conn.CONNECTIVITY_CHANGE"); networkChangeReceiver = new NetworkChangeReceiver(); registerReceiver(networkChangeReceiver, intentFilter); } 最後要記得,動態注冊的廣播接收器一定都要取消注冊才行。 @Override protected void onDestroy() { super.onDestroy(); unregisterReceiver(networkChangeReceiver); } 18、創建廣播接收器===================================== 只需要新建一個類, 讓它繼承自BroadcastReceiver, 並重寫父類的 onReceive()方法就行了。 這樣當有廣播到來時, onReceive()方法就會得到執行, 具體的邏輯就可以在這個方法中處理。 class NetworkChangeReceiver extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { Toast.makeText(context, "network changes", Toast.LENGTH_SHORT).show(); } } 19、注冊靜態廣播接收器============================== 20、發送自定義廣播=================================== 一、發送標准廣播 先注冊一個靜態廣播接收器 public class MyBroadcastReceiver extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { Toast.makeText(context, "received in MyBroadcastReceiver",Toast.LENGTH_SHORT).show(); } } 發送廣播代碼如下 button.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { Intent intent = new Intent("com.example.broadcasttest. MY_BROADCAST"); sendBroadcast(intent); } }); 二、發送有序廣播 button.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { Intent intent = new Intent("com.example.broadcasttest. MY_BROADCAST"); sendOrderedBroadcast(intent, null); } }); 更改有序廣播先後順序 可以看到,我們通過 android:priority 屬性給廣播接收器設置了優先級,優先級比較高的 廣播接收器就可以先收到廣播。 這裡將 MyBroadcastReceiver的優先級設成了 100 三、廣播截斷 public class MyBroadcastReceiver extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { Toast.makeText(context, "received in MyBroadcastReceive", Toast.LENGTH_SHORT).show(); abortBroadcast(); } } 如果在 onReceive()方法中調用了 abortBroadcast()方法, 就表示將這條廣播截斷, 後面的 廣播接收器將無法再接收到這條廣播 21、使用本地廣播===================================== 為了能夠簡單地解決廣播的安全性問題,Android 引入了一套本地廣播機制,使用這個 機制發出的廣播只能夠在應用程序的內部進行傳遞, 並且廣播接收器也只能接收來自本應用 程序發出的廣播,這樣所有的安全性問題就都不存在了。 本地廣播的用法並不復雜,主要就是使用了一個 LocalBroadcastManager 來對廣播進行 管理,並提供了發送廣播和注冊廣播接收器的方法。 public class MainActivity extends Activity { private IntentFilter intentFilter; private LocalReceiver localReceiver; private LocalBroadcastManager localBroadcastManager; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); localBroadcastManager = LocalBroadcastManager.getInstance(this); // 獲取實例 Button button = (Button) findViewById(R.id.button); button.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { Intent intent = new Intent("com.example.broadcasttest. LOCAL_BROADCAST"); localBroadcastManager.sendBroadcast(intent); // 發送本地廣播 } }); intentFilter = new IntentFilter(); intentFilter.addAction("com.example.broadcasttest.LOCAL_BROADCAST"); localReceiver = new LocalReceiver(); localBroadcastManager.registerReceiver(localReceiver, intentFilter); // 注冊本地廣播監聽器 } @Override protected void onDestroy() { super.onDestroy(); localBroadcastManager.unregisterReceiver(localReceiver); } class LocalReceiver extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { Toast.makeText(context, "received local broadcast", Toast.LENGTH_SHORT).show(); } } }
DrawerLayout顧名思義就是一個管理布局的。使用方式可以與其它的布局類類似。DrawerLayout帶有滑動的功能。只要按照drawerLayout的規定布局方式
1、AppBarLayout、ToolBarAppBarLayout 是繼承LinerLayout實現的一個ViewGroup容器組件,它是為了Material Desi
效果圖如下所述:布局<?xml version=1.0 encoding=utf-8?><LinearLayoutxmlns:andro
開門見山:這裡給出rk 在cameraHAL層的camera數據結構:typedef struct FramInfo{ int phy_addr; int v
問題背景: 參考鏈接 做了一個圖片浏覽,用ContentResolver