四种基本布局
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);新闻热点
疑难解答