Android仿微信主界面设计_Android

先来一张效果图

一.ActionBar的设计

首先是main.xml,先定义这些菜单,界面稍后在调整

<menu xmlns:android="http://schemas.android.com/apk/res/android"
 tools:context=".MainActivity">

 <item
  android:id="@+id/action_search"
  android:actionViewClass="android.widget.SearchView"
  android:icon="@drawable/actionbar_search_icon"
  android:showAsAction="always|collapseActionView"
  android:title="@string/action_search"
  />
 <item
  android:id="@+id/action_add"
  android:actionProviderClass="develop.niuli.com.weixin.PlusActionProvider"
  android:icon="@drawable/actionbar_add_icon"
  android:showAsAction="always"
  android:title="@string/action_add"
  />
 <!--在这里设置菜单.然后自定义一个menu -->
 <item
  android:id="@+id/action_btn01"
  android:icon="@drawable/abc_ic_menu_moreoverflow_mtrl_alpha"
  android:orderInCategory="2"
  android:title="更多"
  android:showAsAction="always">
 <menu>
 <item
   android:id="@+id/action_photo"
  android:icon="@drawable/ofm_photo_icon"
  android:title="@string/action_photo"
  android:showAsAction="never"
  />
 <item
  android:id="@+id/action_connection"
  android:icon="@drawable/ofm_collect_icon"
  android:title="@string/action_connection"
  android:showAsAction="never"
  />
 <item
  android:id="@+id/action_card"
  android:icon="@drawable/ofm_card_icon"
  android:title="@string/action_card"
  android:showAsAction="never"
  />
 <item
  android:id="@+id/action_settings"
  android:icon="@drawable/ofm_setting_icon"
  android:title="@string/action_settings"
  android:showAsAction="never"
   />
 <item
  android:id="@+id/action_feed"
  android:icon="@drawable/ofm_feedback_icon"
  android:title="@string/action_feed"
  android:showAsAction="never"
  />
 </menu>
</item>
</menu>

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;
 }
}

这样的ActionBar基本实现了我们想要的功能,剩下的就差样式之类,所以修改Style.xml文件,AS里面也自带主题编辑器,暂时还没用到过,后期尝试

<resources>

 <!-- 这里可以使用官方的编译器来设置,具体还要再次学习-->
 <style name="App_Theme" parent="@android:style/Theme.Holo.Light">
  <!-- Customize your theme here. -->
  <item name="android:actionBarStyle">@style/wexinActionBar</item>
  <item name="android:itemBackground">@drawable/actionbar_bg_selector</item>
  <item name="android:actionBarItemBackground">@drawable/actionbar_bg_selector</item>
  <item name="android:itemTextAppearance">@style/WeChatActionBarTitleText</item>
  <item name="android:actionOverflowButtonStyle">@style/WeChatActionButtonOverflow</item>
 </style>

 <style name="wexinActionBar" parent="@android:style/Widget.Holo.ActionBar">
  <item name="android:background">#303537</item>
  <item name="android:titleTextStyle">@style/WeChatActionBarTitleText</item>
 </style>
 <style name="WeChatActionBarTitleText" parent="@android:style/TextAppearance.Holo.Widget.ActionBar.Title">
  <item name="android:textColor">#cfcfcf</item>
  <item name="android:textSize">17sp</item>
 </style>

 <style name="WeChatActionButtonOverflow" parent="android:style/Widget.Holo.ActionButton.Overflow">
  <item name="android:src">@drawable/actionbar_more_icon</item>
 </style>
</resources>

二.主界面的设计

使用PagerSlidingTabStrip+viewpager,两者会自动适配,用起来很方便.
在main_activity.xml中配置

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
 xmlns:tools="http://schemas.android.com/tools"
 android:layout_width="match_parent"
 android:layout_height="match_parent"
 xmlns:app="http://schemas.android.com/apk/res-auto"
 tools:context=".MainActivity">
 <!--引入的类似ActionBar的一个tabs开源项目 -->
 <com.astuetz.PagerSlidingTabStrip
  android:id="@+id/tabs"
  android:layout_width="match_parent"
  app:pstsShouldExpand="true"
  android:layout_height="40dp"/>
 <android.support.v4.view.ViewPager
  android:id="@+id/pagers"
  android:layout_width="match_parent"
  android:layout_height="wrap_content"
  android:layout_below="@+id/tabs"
  />
</RelativeLayout>

然后建立三个fragment布局,放入到viewpager,下面举一个例子

<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
 android:layout_width="match_parent"
 android:layout_height="match_parent">

 <TextView
  android:layout_width="match_parent"
  android:layout_height="match_parent"
  android:text="聊天界面"
  android:gravity="center"
  android:textSize="20sp"
  />

</FrameLayout>
public class ChatFragment extends android.support.v4.app.Fragment {

 @Nullable
 @Override
 public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
  View view = inflater.inflate(R.layout.chatfragment_layout,container,false);
  return view;
 }
}

接下来就是在MainActivity.java中代码配置了

/**
  * tabs栏的实例
  */
 private PagerSlidingTabStrip tabs;

 /**
  * 获取当前屏幕的密度
  */
 private DisplayMetrics dm;

 /**
  * 主界面的viewpager
  */
 private ViewPager pagers;
 @Override
 protected void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);
  setContentView(R.layout.activity_main);
  setOverflowShowingAlways();
  dm = getResources().getDisplayMetrics();
  pagers = (ViewPager) findViewById(R.id.pagers);
  tabs = (PagerSlidingTabStrip) findViewById(R.id.tabs);
  //这个类要继承FragmentActivity才可以有这个方法
  pagers.setAdapter(new ViewPagerAdapter(getSupportFragmentManager()));
  tabs.setViewPager(pagers);
  setTabValue();
 }

 /**
  * 对PagerSlidingTabStrip属性的修改
  */
 private void setTabValue(){
//  //设置tabs自动填充满整个屏幕,xml文件设置才有效果
//  tabs.setShouldExpand(true);
  //设置tabs的分割线透明
  tabs.setDividerColor(Color.TRANSPARENT);
  //设置tabs底部线的高度
  //TypedValue需要学习了解
  tabs.setUnderlineHeight((int) TypedValue.applyDimension(
    TypedValue.COMPLEX_UNIT_DIP, 1, dm));
  // 设置Tab Indicator的高度
  tabs.setIndicatorHeight((int) TypedValue.applyDimension(
    TypedValue.COMPLEX_UNIT_DIP, 4, dm));
  // 设置Tab标题文字的大小
  tabs.setTextSize((int) TypedValue.applyDimension(
    TypedValue.COMPLEX_UNIT_SP, 16, dm));
  // 设置Tab Indicator的颜色
  tabs.setIndicatorColor(Color.parseColor("#45c01a"));
  // 设置选中Tab文字的颜色 (这是我自定义的一个方法)
//  tabs.setSelectedTextColor(Color.parseColor("#45c01a"));
  // 取消点击Tab时的背景色
  tabs.setTabBackground(0);
 }

可以看出来viewpager需要一个Adapter来配置其页面,而tabs需要配置viewpager,这样的话,三者就能完美的相适应.

public class ViewPagerAdapter extends FragmentPagerAdapter {

 /**
  * 聊天界面
  */
 private ChatFragment chatFragment;
 /**
  * 发现页面
  */
 private FoungFragment foundFragment;
 /**
  * 聊天界面
  */
 private ContactFragment contactFragment;

 private final String[] titles = { "聊天", "发现", "通讯录" };

 public ViewPagerAdapter(FragmentManager fm) {
  super(fm);
 }

 @Override
 public Fragment getItem(int position) {
  switch (position) {
   case 0:
    if (chatFragment == null) {
     chatFragment = new ChatFragment();
    }
    return chatFragment;
   case 1:
    if (foundFragment == null) {
     foundFragment = new FoungFragment();
    }
    return foundFragment;
   case 2:
    if (contactFragment == null) {
     contactFragment = new ContactFragment();
    }
    return contactFragment;
   default:
    return null;
  }
 }

 @Override
 public int getCount() {
  return titles.length;
 }

 @Override
 public CharSequence getPageTitle(int position) {
  return titles[position];
 }
}

本文已被整理到了《Android微信开发教程汇总》,欢迎大家学习阅读。

以上就是本文的全部内容,希望对大家的学习有所帮助。

以上是小编为您精心准备的的内容,在的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索Android微信
android 仿微信界面、android 仿微信主界面、android仿qq聊天界面、android 仿支付宝界面、android 仿美团主界面,以便于您获取更多的相关知识。

时间: 2024-10-30 18:24:30

Android仿微信主界面设计_Android的相关文章

Android仿微信主界面设计

先来一张效果图 一.ActionBar的设计 首先是main.xml,先定义这些菜单,界面稍后在调整 <menu xmlns:android="http://schemas.android.com/apk/res/android" tools:context=".MainActivity"> <item android:id="@+id/action_search" android:actionViewClass="a

Android仿微信拍摄短视频_Android

近期做项目需要添加上传短视频功能,功能设置为类似于微信,点击开始拍摄,设置最长拍摄时间,经过研究最终实现了这个功能,下面就和大家分享一下,希望对你有帮助. 1.视频录制自定义控件: /** * 视频播放控件 */ public class MovieRecorderView extends LinearLayout implements OnErrorListener { private SurfaceView mSurfaceView; private SurfaceHolder mSurfa

Android仿微信群聊头像_Android

工作中需要实现仿钉钉群头像的一个功能,就是个人的头像拼到一起显示,看了一下市场上的APP好像微信的群聊头像是组合的,QQ的头像不是,别的好像也没有了. 给大家分享一下怎么实现的吧.首先我们先看一下效果图: 好了,下面说一下具体怎么实现的: 实现思路 1.首先获取Bitmap图片(本地.网络) 2.创建一个指定大小的缩略图 3.组合Bitmap图片 很简单,本地图片需要我们从本地读取,如果是网络图片我们也可以根据URL来获取bitmap进行组合 具体实现过程 1.布局文件: <LinearLayo

Android仿微信语音聊天功能_Android

本文实例讲述了Android仿微信语音聊天功能代码.分享给大家供大家参考.具体如下: 项目效果如下: 具体代码如下: AudioManager.java package com.xuliugen.weichat; import java.io.File; import java.io.IOException; import java.util.UUID; import android.media.MediaRecorder; public class AudioManager { private

Android实现仿网易新闻主界面设计_Android

下面先来一张效果图    根据图片分析,要实现的有侧边栏DrawerLayout,ActionBar的颜色和菜单以及ActionBarDrawerToggle的动画效果. 在这之前,Theme要改成带有ActionBar的主题 android:theme="@android:style/Theme.Holo.Light" 一:侧边栏-DrawerLayout 根据官方文档,DrawerLayout布局的第一个视图是activity的主视图,第二个是侧边栏视图 因此主布局可以如下这样 F

android仿微信聊天界面 语音录制功能_Android

本例为模仿微信聊天界面UI设计,文字发送以及语言录制UI. 1先看效果图:       第一:chat.xml设计 <?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent"

android仿微信聊天界面 语音录制功能

本例为模仿微信聊天界面UI设计,文字发送以及语言录制UI. 1先看效果图: 第一:chat.xml设计 <?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" andro

Android仿微信语音聊天界面设计_Android

有段时间没有看视频了,昨天晚上抽了点空时间,又看了下鸿洋大神的视频教程,又抽时间写了个学习记录.代码和老师讲的基本一样,网上也有很多相同的博客.我只是在AndroidStudio环境下写的. --主界面代码-- public class MainActivity extends Activity { private ListView mListView; private ArrayAdapter<Recorder> mAdapter; private List<Recorder>

Android高仿微信聊天界面代码分享_Android

微信聊天现在非常火,是因其界面漂亮吗,哈哈,也许吧.微信每条消息都带有一个气泡,非常迷人,看起来感觉实现起来非常难,其实并不难.下面小编给大家分享实现代码. 先给大家展示下实现效果图: OK,下面我们来看一下整个小项目的主体结构: 下面是Activity的代码: package com.way.demo; import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.Date; import jav