亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 系統 > Android > 正文

Android仿微信主界面設計

2020-04-11 10:55:03
字體:
來源:轉載
供稿:網友

先來一張效果圖


一.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微信開發教程匯總》,歡迎大家學習閱讀。

以上就是本文的全部內容,希望對大家的學習有所幫助。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
亚洲成人在线网| 91高清视频在线免费观看| 成人在线小视频| 久久久亚洲天堂| 国产综合在线观看视频| 日韩成人在线电影网| 国产精品9999| 欧美激情视频网址| 5252色成人免费视频| 精品二区三区线观看| 国产欧美精品在线播放| 97香蕉超级碰碰久久免费的优势| 亚洲成色999久久网站| 亚洲精品xxxx| 日韩欧美中文字幕在线观看| 国产精品日韩一区| 91精品国产91| 国产极品jizzhd欧美| 久久91亚洲精品中文字幕奶水| 国模精品视频一区二区三区| 国产91色在线|免| 一本色道久久88综合亚洲精品ⅰ| 亚洲在线免费观看| 国产精品女人久久久久久| 亚洲香蕉在线观看| 亚洲国产一区自拍| 久久综合国产精品台湾中文娱乐网| 成人久久18免费网站图片| 国产精品电影观看| **欧美日韩vr在线| 91精品久久久久久综合乱菊| 国产盗摄xxxx视频xxx69| 中文字幕在线看视频国产欧美| 性色av一区二区咪爱| 国产一区二区三区在线播放免费观看| 日韩大陆毛片av| 亚州精品天堂中文字幕| 日韩免费av片在线观看| 国产日韩欧美在线看| 亚洲国产精品热久久| 久久av资源网站| 97久久久免费福利网址| 日韩亚洲欧美中文高清在线| 成人中文字幕在线观看| 国产精品久久久久久久久久新婚| 精品视频久久久久久久| 欧美日韩性生活视频| 久久影视免费观看| 日韩一区二区久久久| 伦理中文字幕亚洲| 爽爽爽爽爽爽爽成人免费观看| 欧美另类极品videosbestfree| 亚洲欧美中文日韩v在线观看| 久久国产精品久久久久久| 性欧美办公室18xxxxhd| 亚洲一区二区福利| 国产精品永久免费观看| 欧美激情一区二区三区成人| 国产日韩欧美自拍| 亚洲区免费影片| 国产丝袜精品视频| 川上优av一区二区线观看| 97色伦亚洲国产| 久久久www成人免费精品张筱雨| 欧美性jizz18性欧美| 久久久久国产一区二区三区| 欧美性猛交xxxx乱大交3| 日韩动漫免费观看电视剧高清| 国产ts一区二区| 欧美人与性动交| 国产精品亚洲一区二区三区| 日韩精品欧美激情| 国产精品美女无圣光视频| 欧美福利视频在线| 97av视频在线| 亚洲国产精品中文| 成人精品网站在线观看| 美女久久久久久久| 国产美女直播视频一区| 国产成人在线视频| 欧美成人免费全部观看天天性色| 国模吧一区二区三区| 国产美女久久久| 亚洲国产精品悠悠久久琪琪| 精品亚洲一区二区三区在线观看| 日韩黄色av网站| 日韩在线观看电影| 黑人与娇小精品av专区| 中文字幕精品网| 国产一区二区三区视频免费| 国内精品久久久| 日韩欧美精品免费在线| 国产98色在线| 欧美一级视频在线观看| 亚洲天堂成人在线| 中日韩美女免费视频网站在线观看| 成人在线视频福利| 亚洲一区av在线播放| 中文字幕亚洲综合久久| 亚洲精品永久免费精品| 久久久精品国产网站| 国产精品盗摄久久久| 尤物yw午夜国产精品视频明星| 日韩一二三在线视频播| 亚洲精品在线不卡| 久久97久久97精品免视看| 久久影院中文字幕| 国产在线视频91| 亚洲视频在线看| 午夜精品一区二区三区在线播放| 日本欧美中文字幕| 久久久欧美一区二区| 精品国产91久久久久久老师| 九九热在线精品视频| 国产剧情日韩欧美| 亚洲国产另类 国产精品国产免费| 亚洲v日韩v综合v精品v| 精品视频中文字幕| 理论片在线不卡免费观看| 亚洲精品视频在线播放| 成人a视频在线观看| 国产欧洲精品视频| 亚洲天堂成人在线| 欧美乱人伦中文字幕在线| 欧美裸体视频网站| 日韩av在线免播放器| 欧美性视频精品| 欧美激情免费观看| 亚洲影影院av| 欧美尤物巨大精品爽| 成人国产在线激情| 久久av红桃一区二区小说| 97在线视频免费播放| 国产日韩欧美成人| 国产亚洲美女精品久久久| 精品久久久一区二区| 黄色成人在线播放| 久久久久久尹人网香蕉| 美女黄色丝袜一区| 国产欧美精品在线| 91亚洲va在线va天堂va国| 国产视频久久久久| 亚洲毛茸茸少妇高潮呻吟| 亚洲www在线观看| 亚洲免费人成在线视频观看| 亚洲一区二区三区毛片| 国产精品99一区| 国产精品爱啪在线线免费观看| 日韩av网站大全| 国产精品igao视频| 国产精品白嫩美女在线观看| 91久久夜色精品国产网站| 欧美一级黑人aaaaaaa做受| 国产精品日韩在线一区| 国产精品成人一区| 在线观看日韩www视频免费| 久久久www成人免费精品张筱雨| 亚洲色图校园春色| 国产在线播放91| 精品亚洲一区二区三区在线观看| 日韩国产高清视频在线| 国产欧美精品一区二区| 成人免费视频网| 久久视频国产精品免费视频在线|