微信主界面开发知识点

来源:互联网 发布:截铃声软件 编辑:程序博客网 时间:2024/06/05 01:54

微信主页面开发weixin6.0版

主要功能点:

  1. 实现ActionBar:利用到反射知识,替换默认的overflowButton
  2. 实现viewPager
  3. 实现底部的tab:利用到自定义view的知识
  4. 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@Overridepublic 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

  1. 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>
  1. 布局文件中使用 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>
  1. 构造方法中获取自定义属性 参考:com/xswx/view/ChangeColorWithText.java
  2. onMeasure: 绘制view大小
  3. 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

0 0
原创粉丝点击