四種基本布局
layout_gravity 指定控件位置weight 按照比例指定控件的大小layout_span 創建自定義控件
固定布局,通過layout布局文件自定義控件
LayoutInflater.from(context).inflate(R.layout.activity_main_layout,this);ListView優化使用ViewHolderview.setTag(viewHolder)單位dp代替dx動態獲取屏幕密度值getResources().getDisplayMetrics().xdpi;getResources().getDisplayMetrics().ydpi;.9圖
碎片Fragment
新建類繼承Fragment,重寫onCreateView ,使用參數中的inflate.inflate()方法填充布局, 返回view layout布局中添加fragment指定name屬性為新建類
碎片動態添加
把Fragment布局放在FrameLayout布局中替換fragment布局
先new出繼承Fragment,新實例FragmentManager manager = getFragmentManager();FragmentTransaction transaction = manager.beginTransaction();transaction.replace(R.id.content ,fragment);transaction.commit();按back鍵返回上一個fragment,可transaction.addToBackStack(null);
getActivity()可獲得與此fragment相關聯的activity實例 getFragmentManager().findFragmentById()獲取碎片的實例
碎片的生命周期
onAttach 碎片與活動相關聯的時候調用onCreateView 碎片創建視圖(加載視圖)時候調用onActivityCreated 確保與碎片相關聯的活動一定已經創建完畢的時候調用onDestroyView 當與碎片相關聯的視圖被移除的時候調用onDetach 當碎片與活動解除關聯的時候調用碎片完整的生命周期 添加一個碎片
onAttachonCreateonCreateViewonActivityCreatedonStartonResume碎片已激活onPauseonStoponDestroyViewonDestroyonDetach碎片被銷毀廣播接收器
標準廣播 異步執行,所有廣播接收器幾乎同一時間接收到廣播,沒有先后順序可言有序廣播 同步執行,同一時刻只有一個廣播接收器能收到這條廣播消息,有先后順序,并可以截斷正在傳遞的廣播。動態注冊監聽網絡變化
代碼中注冊為動態注冊, AndroidManifest.xml中注冊為靜態注冊
創建廣播接收器
繼承BroadcastReceiver重寫父類onReceive方法
MainActivity中代碼`onCreate`方法中IntentFilter intentFilter = new IntentFilter();intentFileter.addAction("android.net.conn.CONNECTIVITY_CHANGE");netChangeReceiver(new 新對象)registerReceiver(netChangeReceiver, intentFilter);`onDestroy`方法中unRegisterReceiver(newChangeReceiver);重寫`onReceive`方法ConnectivityManager cm = getSystemService(Context.CONNECTIVITY_SERVICE);NetworkInfo info = cm.getActiveNetworkInfo();此服務監聽需要申請權限。access_NETWORK_STATE開機啟動權限BOOT_COMPLETED開機監聽RECEIVE_BOOT_COMPLETED后臺運行allowBackup自定義廣播消息new Intent("消息的字段內容");sendBroadcast(intent);發送有序廣播sendOrderedBroadcaset(intent, null);第二個參數是與權限相關的字符串abortBroadcast攔截廣播
以上為系統廣播,下面為本地廣播。
LocalBroadcastManager對廣播進行管理廣播的最佳實踐,強制下線alertDialog.getWindow().setType(WindowManager.LayoutParams.TYPE_SYSTEM_ALERT);需要申請權限。廣播里面啟動活動,需要intent.addFlag(Intent.FLAG_ACTIVITY_NET_TASK);新聞熱點
疑難解答