Android仿微信主界面设计

2019-12-10 19:13:10刘景俊

1.android:actionViewClass="android.widget.SearchView"调用系统的搜索栏样式,
2.android:showAsAction="always|collapseActionView"使其可以铺满整个ActionBar.这样就能模仿出微信的效果了
3.再者overflow里面的带图标+title效果,需要自定义一个item包裹一个单独的menu,这样的话就不需要用代码就能实现图标+title的效果
4.android:actionProviderClass="develop.niuli.com.weixin.PlusActionProvider"这个使用的ActionProvider,也就相当于自定义另一个菜单实现加号功能,而PlusActionProvider是自己单独写的一个类

 

/**
 *主要用于模仿微信上+号实现的菜单
 */
public class PlusActionProvider extends ActionProvider {

  private Context context;
  public PlusActionProvider(Context context) {
    super(context);
    this.context = context;
  }

  @Override
  public View onCreateActionView() {
    return null;
  }

  @Override
  public void onPrepareSubMenu(SubMenu subMenu) {
    //移除已经存在的项
    subMenu.clear();
    //为菜单添加图片和文字,并且加入监听事件
    subMenu.add(context.getString(R.string.plus_group_chat))
        .setIcon(R.drawable.ofm_group_chat_icon)
        .setOnMenuItemClickListener(new MenuItem.OnMenuItemClickListener() {
          @Override
          public boolean onMenuItemClick(MenuItem item) {
            return false;
          }
        });
    //剩下的如法炮制就好了
    subMenu.add(context.getString(R.string.plus_add_friend))
        .setIcon(R.drawable.ofm_add_icon)
        .setOnMenuItemClickListener(new MenuItem.OnMenuItemClickListener() {
          @Override
          public boolean onMenuItemClick(MenuItem item) {
            return false;
          }
        });
    subMenu.add(context.getString(R.string.plus_video_chat))
        .setIcon(R.drawable.ofm_video_icon)
        .setOnMenuItemClickListener(new MenuItem.OnMenuItemClickListener() {
          @Override
          public boolean onMenuItemClick(MenuItem item) {
            return false;
          }
        });
    subMenu.add(context.getString(R.string.plus_scan))
        .setIcon(R.drawable.ofm_qrcode_icon)
        .setOnMenuItemClickListener(new MenuItem.OnMenuItemClickListener() {
          @Override
          public boolean onMenuItemClick(MenuItem item) {
            return false;
          }
        });
    subMenu.add(context.getString(R.string.plus_take_photo))
        .setIcon(R.drawable.ofm_camera_icon)
        .setOnMenuItemClickListener(new MenuItem.OnMenuItemClickListener() {
          @Override
          public boolean onMenuItemClick(MenuItem item) {
            return false;
          }
        });
  }

  @Override
  public boolean hasSubMenu() {
    return true;
  }
}