微信主界面开发知识点
2016-07-27 19:27
483 查看
微信主页面开发weixin6.0版
主要功能点:实现ActionBar:利用到反射知识,替换默认的overflowButton
实现viewPager
实现底部的tab:利用到自定义view的知识
Activity回收
大概开发步骤思维导图:
1、实现ActionBar
java反射机制,可以查看http://www.cnblogs.com/octobershiner/archive/2012/03/18/2404751.html此功能中,主要是利用反射机制修改一些属性参数和方法的值,两个方法如下:
setChangeOverflowButtonAlways()方法就是为了让默认的overflowButton一直显示:
private void setChangeOverflowButtonAlways(){ try{ ViewConfiguration configuration = ViewConfiguration.get(this); Field menukey = configuration.getClass().getDeclaredField("sHasPermanentMenuKey");//获取MainActivity中的sHasPermanentMenuKey属性 menukey.setAccessible(true); //要强制系统显示menu图标,可以用反射的方法,把ViewConfiguration对象的sHasPermanentMenuKey属性设为false,让系统以为没有硬件菜单键 menukey.setBoolean(configuration, false); }catch(Exception ex){ ex.printStackTrace(); } }
onMenuOpened(int,Menu)设置menu显示”+”icon
//设置menu显示icon @Override public boolean onMenuOpened(int featureId, Menu menu) { if(featureId == Window.FEATURE_ACTION_BAR && menu!=null){ if (menu.getClass().getSimpleName().equals("MenuBuilder")) { try { Method m = menu.getClass().getDeclaredMethod("setOptionalIconsVisible", Boolean.TYPE); m.setAccessible(true); m.invoke(menu, true); } catch (Exception e) { e.printStackTrace(); } } } return super.onMenuOpened(featureId, menu); }
2、实现ViewPager
就是之前ElaineMoMO小项目中的页面滑动实现基本一致,这里就不再重复了。这次用到了Bundle传值,待会再说Bundle传值和intent传值的区别
3、实现底部tab(重点)
重点1:自定义viewattr.xml
代码参考:
<?xml version="1.0" encoding="utf-8"?> <resources> <attr name="icon_" format="reference"></attr> <attr name="color" format="color"></attr> <attr name="text" format="string"></attr> <attr name="text_size" format="dimension"/> <declare-styleable name="ChangeColorWithText"> <attr name="icon_"/> <attr name="color"/> <attr name="text"/> <attr name="text_size"/> </declare-styleable> </resources>
布局文件中使用 eg: activity_main.xml
代码参考:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" xmlns:自定义名="http://schemas.android.com/apk/res/com.xswx(包名)" ...> ... <LinearLayout ..> <!-- 微信tab --> <com.xswx.view.ChangeColorWithText ... 自定义名:icon_="@drawable/ic_menu_start_conversation" 自定义名:color="#ff45c01a" 自定义名:text="@string/app_name" 自定义名:text_size="12sp"> </com.xswx.view.ChangeColorWithText> </LinearLayout> </LinearLayout>
构造方法中获取自定义属性 参考:com/xswx/view/ChangeColorWithText.java
onMeasure: 绘制view大小
onDraw:绘制view内容
个人在自定义View中,抽象理解一些对象可以方便自己的理解,例如:将Paint理解为画纸,Canvas理解为画笔,Bitmap理解为最终的画像
重点2:android.graphics.Xfermode使用
这里用到的是DST_IN混合模式,即呈现叠加部分的图
4、Activity回收
屏幕旋转会先销毁当前的Activity,再重建解决办法:在manifest中配置固定呈现的方式:水平或垂直
eg: android:screenOrientation = “portrait”
当应用长期处于后台时依旧有被杀死的可能
解决方法:可以实现Activity中的两个方法
1、onSaveInstanceState()
2、onRestoreInstanceState()
总结:源码:https://github.com/ElaineYan489/WX6_0
相关文章推荐
- 用java写的打印日历小程序
- 微信开发整理
- MFC和GDI+制作雪花飞舞小程序
- Android 记录一次开发微信分享功能的吐槽与思考
- 解决UC浏览器、微信浏览器使用display:flex;的兼容性问题
- 高仿微信摇一摇功能
- 微信网页授权
- 微信打包签名
- Android微信分享和邮件分享
- 微信热修复开源库 Tinker imitator 原理篇
- [置顶] android studio 打包签名apk,完成微信和qq的的第三方分享功能
- 实验一:写一个hello world小程序
- 怎么成为一个微信开发者
- 微信红包问题求前K个元素(即堆排序的应用)
- [置顶] 关于微信公众号开发的Token验证失败该如何解决?
- 新版Android studio导入微信支付和支付宝官方Demo问题解决大全
- 微信分享菜单栏显示,隐藏
- 安卓版微信内置浏览器,<a href="tel:电话号码"></a> 这个链接失效,不能跳到拨号界面?
- Android 开发微信分享功能遇到的问题
- 微信中获取部门成员信息