您的位置:首页 > 移动开发 > 微信开发

微信主界面开发知识点

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:自定义view

attr.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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: