最近一段时间进了Android的大坑,一门心思的学习Android大法,读了两三本书,就萌生了模仿微信界面的想法。

分析Android版本的微信界面需求就会发现它的核心,不得不佩服微信界面的简洁和灵活。腾讯的设计大法还是颇有一番味道的。目前我模仿的界面仅限于表面。核心部分只能说心有余力不足了。

滑动界面的实现是基于Fragment类实现的,但是它有先天不足,不能使用滑动转换界面。所以,我使用了Fragment和viewPager混合实现界面需求功能。

 

Android中微信主界面菜单栏的布局实现代码_第1张图片

 

Android中微信主界面菜单栏的布局实现代码_第2张图片

具体代码如下,仅仅提供大体思路。

1、主Activity的Java代码

 

package com.example.app_weixin;import android.content.Intent;import android.media.Image;import android.provider.SyncStateContract;import android.support.v4.app.Fragment;import android.support.v4.app.FragmentActivity;import android.support.v4.app.FragmentManager;import android.support.v4.app.FragmentPagerAdapter;import android.support.v4.app.FragmentTransaction;import android.os.Bundle;import android.support.v4.view.ViewPager;import android.view.KeyEvent;import android.view.Menu;import android.view.View;import android.view.ViewGroup;import android.widget.ImageView;import android.widget.PopupMenu;import android.widget.RelativeLayout;import android.widget.TextView;import java.lang.reflect.Method;import java.util.ArrayList;import java.util.List;public class MainActivity extends FragmentActivity {    private FragmentManager fragmentManager;    private FragmentTransaction transaction;    private Fragment wechatFragment;    private ImageView wechatImageView;    private TextView wechatTextView;    private Fragment contactFragment;    private ImageView contactImageView;    private TextView contactTextView;    private Fragment findFragment;    private ImageView findImageView;    private TextView findTextView;    private Fragment profileFragment;    private ImageView profileImageView;    private TextView profileTextView;    private RelativeLayout wechatLayout,contactLayout,findLayout,profileLayout;    private ViewPager viewPager;    private ImageView menuView,searchView;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        initView();        initFragmentView();    }    /*实例化控件*/    void initView(){        wechatImageView=(ImageView)findViewById(R.id.wechat_iv);        wechatTextView=(TextView)findViewById(R.id.wechat_tv);        contactImageView=(ImageView)findViewById(R.id.contact_iv);        contactTextView=(TextView)findViewById(R.id.contact_tv);        findImageView=(ImageView)findViewById(R.id.find_iv);        findTextView=(TextView)findViewById(R.id.find_tv);        profileImageView=(ImageView)findViewById(R.id.profile_iv);        profileTextView=(TextView)findViewById(R.id.profile_tv);        wechatLayout=(RelativeLayout)findViewById(R.id.re_wechat);        contactLayout=(RelativeLayout)findViewById(R.id.re_contact);        findLayout=(RelativeLayout)findViewById(R.id.re_find);        profileLayout=(RelativeLayout)findViewById(R.id.re_profile);        menuView=(ImageView)findViewById(R.id.add);        searchView=(ImageView)findViewById(R.id.search);        searchView.setOnClickListener(new View.OnClickListener() {            @Override            public void onClick(View v) {                Intent mintent=new Intent(MainActivity.this,SearchActivity.class);                startActivity(mintent);                overridePendingTransition(R.animator.animator_in,R.animator.animator_out);            }        });        menuView.setOnClickListener(new View.OnClickListener() {            @Override            public void onClick(View v) {                PopupMenu popupMenu=new PopupMenu(MainActivity.this,v);                popupMenu.getMenuInflater().inflate(R.menu.menu,popupMenu.getMenu());                /*暴力破解为menu添加icon问题。失败了。*/                /*if (popupMenu!=null){                    try {                        Method method=popupMenu.getClass().getDeclaredMethod("setOptionalIconsVisible", Boolean.TYPE);                        method.setAccessible(true);                        method.invoke(popupMenu,true);                    }catch (Exception e){                        e.printStackTrace();                    }                }*/                popupMenu.show();            }        });        wechatLayout.setOnClickListener(new View.OnClickListener() {            @Override            public void onClick(View v) {                viewPager.setCurrentItem(0);                initFragment(4);                wechatImageView.setImageResource(R.drawable.weixin_pressed);                wechatTextView.setTextColor(getResources().getColor(R.color.colorTextViewPress));            }        });        contactLayout.setOnClickListener(new View.OnClickListener() {            @Override            public void onClick(View v) {                viewPager.setCurrentItem(1);                initFragment(4);                contactImageView.setImageResource(R.drawable.contact_list_pressed);                contactTextView.setTextColor(getResources().getColor(R.color.colorTextViewPress));            }        });        findLayout.setOnClickListener(new View.OnClickListener() {            @Override            public void onClick(View v) {                viewPager.setCurrentItem(2);                initFragment(4);                findImageView.setImageResource(R.drawable.find_pressed);                findTextView.setTextColor(getResources().getColor(R.color.colorTextViewPress));            }        });        profileLayout.setOnClickListener(new View.OnClickListener() {            @Override            public void onClick(View v) {                viewPager.setCurrentItem(3);                initFragment(4);                profileImageView.setImageResource(R.drawable.profile_pressed);                profileTextView.setTextColor(getResources().getColor(R.color.colorTextViewPress));            }        });        initFragment(0);        wechatImageView.setImageResource(R.drawable.weixin_pressed);        wechatTextView.setTextColor(getResources().getColor(R.color.colorTextViewPress));    }    void initFragment(int index){        //fragmentManager=getSupportFragmentManager();        //transaction=fragmentManager.beginTransaction();        wechatTextView.setTextColor(getResources().getColor(R.color.colorTextViewNormal));        wechatImageView.setImageResource(R.drawable.weixin_normal);        contactTextView.setTextColor(getResources().getColor(R.color.colorTextViewNormal));        contactImageView.setImageResource(R.drawable.contact_list_normal);        findTextView.setTextColor(getResources().getColor(R.color.colorTextViewNormal));        findImageView.setImageResource(R.drawable.find_normal);        profileTextView.setTextColor(getResources().getColor(R.color.colorTextViewNormal));        profileImageView.setImageResource(R.drawable.profile_normal);        switch (index) {            case 0:                wechatImageView.setImageResource(R.drawable.weixin_pressed);                wechatTextView.setTextColor(getResources().getColor(R.color.colorTextViewPress));                break;            case 1:                contactImageView.setImageResource(R.drawable.contact_list_pressed);                contactTextView.setTextColor(getResources().getColor(R.color.colorTextViewPress));                break;            case 2:                findImageView.setImageResource(R.drawable.find_pressed);                findTextView.setTextColor(getResources().getColor(R.color.colorTextViewPress));                break;            case 3:                profileImageView.setImageResource(R.drawable.profile_pressed);                profileTextView.setTextColor(getResources().getColor(R.color.colorTextViewPress));                break;            default:                break;        }        /*仅仅使用fragment的形式,被遗弃了*/       /* if (wechatFragment!=null){            transaction.hide(wechatFragment);        }        if (contactFragment!=null){            transaction.hide(contactFragment);        }        if (findFragment!=null){            transaction.hide(findFragment);        }        if (profileFragment!=null){            transaction.hide(profileFragment);        }        switch (index){            case 0:                if (wechatFragment==null){                    wechatFragment=new Fragment_wechat();                    transaction.add(R.id.fragment,wechatFragment);                }else {                    transaction.show(wechatFragment);                }                break;            case 1:                if (contactFragment==null){                    contactFragment=new Fragment_contact();                    transaction.add(R.id.fragment,contactFragment);                }else {                    transaction.show(contactFragment);                }                break;            case 2:                if (findFragment==null){                    findFragment=new Fragment_find();                    transaction.add(R.id.fragment,findFragment);                }else {                    transaction.show(findFragment);                }                break;            case 3:                if (profileFragment==null){                    profileFragment=new Fragment_profile();                    transaction.add(R.id.fragment,profileFragment);                }else {                    transaction.show(profileFragment);                }                break;        }        transaction.commit();*/    }    void initFragmentView(){        Listfragments=new ArrayList();        fragments.add(new Fragment_wechat());        fragments.add(new Fragment_contact());        fragments.add(new Fragment_find());        fragments.add(new Fragment_profile());        FragmentAdapter fadapter=new FragmentAdapter(getSupportFragmentManager(),fragments);        viewPager=(ViewPager)findViewById(R.id.viewPager);        viewPager.setAdapter(fadapter);    }    class FragmentAdapter extends FragmentPagerAdapter{        private ListmFragments;        public FragmentAdapter(FragmentManager fm,Listfragments){            super(fm);            this.mFragments=fragments;        }        @Override        public void setPrimaryItem(ViewGroup container, int position, Object object) {            initFragment(position);            super.setPrimaryItem(container, position, object);        }        @Override        public Fragment getItem(int position) {            return mFragments.get(position);        }        @Override        public int getCount() {            return mFragments.size();        }    }}


2、主Activity的html代码

 

 

<?xml version="1.0" encoding="utf-8"?>                                        

 

<?xml version="1.0" encoding="utf-8"?>                                                                                                                                                                                                                                                                                                            

 

<?xml version="1.0" encoding="utf-8"?>                                                                                                                                                                                                                                                                                                            

3、4个Fragment的java代码(取其中一个介绍)

package com.example.app_weixin;import android.os.Bundle;import android.support.annotation.Nullable;import android.support.v4.app.Fragment;import android.view.LayoutInflater;import android.view.View;import android.view.ViewGroup;/** * Created by 尽途 on 2017/3/25. */public class Fragment_find extends Fragment {    @Nullable    @Override    public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {        return inflater.inflate(R.layout.fragment_find,container,false);    }}

4、fragment的html代码

 

 

<?xml version="1.0" encoding="utf-8"?>                                                                                                                                                                                                        

       最后说一下,在使用Fragment时,应该使用v4包,不要选着IDE工具提供的Fragment。要自己写一个继承与Fragment的类。
 

 

更多相关文章

  1. Android开发实践:利用ProGuard进行代码混淆
  2. Android下实现非启动界面Wifi连接
  3. Android性能测试 一些适用于Android Studio的代码审查和性能测试
  4. android google 分屏 多窗口 按home键界面错乱故障分析(一)分屏的
  5. Android移动应用界面的模板化设计
  6. Android运行时权限,6.0—9.0多版本,多终端(手机,TV盒子)130行代码一劳
  7. Android 4.0 ICS 用户界面概述
  8. Android移动应用界面的模板化设计【自定义BaseActivity】
  9. 从零开始--系统深入学习android(实践-让我们开始写代码-Android框

随机推荐

  1. android中异步任务AsyncTask的应用和工作
  2. Android(安卓)中自定义权限
  3. Android联系人数据库全解析(1)
  4. android framework 启动流程
  5. Android(安卓)GPS获取当前经纬度坐标
  6. Android(安卓)Application
  7. Android(安卓)Intent详解
  8. Android个人笔记 - Google Android揭秘_
  9. 【初用Android(安卓)Studio】快捷键之代
  10. Android(安卓)SQLite框架greenDAO的使用