Android仿摩拜單車側滑菜單

2021-03-02 龍旋
曾經的側滑菜單通常是使用SlidingMenu,但是用起來設置屬性太多,使用繁瑣。後來官方出來DrawerLayout,使側滑控制項得以轉正,功能效果更佳。這裡是我用DrawerLayout+NavigationView仿摩拜單車做的主界面。


視覺效果:

製作步驟:

使用到了NavigationView,來自於design包,需添加依賴:

    compile 'com.android.support:design:26.0.0-alpha1'

添加主布局,在activity_main.xml中:
DrawerLayout有兩個子view,分別主界面布局和側滑界面布局。android:layout_gravity="start"屬性,
app:headerLayout="@layout/navigation_header"app:menu="@menu/navigation_menu"
<?xml version="1.0" encoding="utf-8"?><android.support.v4.widget.DrawerLayout android:id="@+id/drawerlayout"    android:layout_width="match_parent"    android:layout_height="match_parent"    xmlns:android="http://schemas.android.com/apk/res/android"    xmlns:app="http://schemas.android.com/apk/res-auto">
<LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="vertical">
<android.support.v7.widget.Toolbar android:id="@+id/toolbar" android:layout_width="match_parent" android:layout_height="48dp" xmlns:android="http://schemas.android.com/apk/res/android">
<ImageView android:layout_width="80dp" android:layout_height="16dp" android:background="@mipmap/ic_mobike"/> </android.support.v7.widget.Toolbar>
<ImageView android:layout_width="match_parent" android:layout_height="wrap_content" android:background="@mipmap/location"/> </LinearLayout>
<android.support.design.widget.NavigationView android:id="@+id/navigationview" android:layout_width="match_parent" android:layout_height="match_parent" android:layout_gravity="start" app:headerLayout="@layout/navigation_header" app:menu="@menu/navigation_menu"/>
</android.support.v4.widget.DrawerLayout>

navigation_header.xml頭布局:

<?xml version="1.0" encoding="utf-8"?><LinearLayout    xmlns:android="http://schemas.android.com/apk/res/android"    android:layout_width="match_parent"    android:layout_height="wrap_content"    android:orientation="vertical">
<RelativeLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:padding="20dp">
<ImageView android:id="@+id/iv_avator" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginRight="25dp" android:background="@mipmap/internet_star"/>
<TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:textSize="16sp" android:textColor="#000" android:textStyle="bold" android:layout_marginTop="8dp" android:layout_toRightOf="@id/iv_avator" android:text="182****8234"/>
<TextView android:id="@+id/tv_author" android:layout_width="wrap_content" android:layout_height="23dp" android:layout_marginTop="32dp" android:background="@drawable/btn_halftransparent_roundshape" android:gravity="center" android:layout_toRightOf="@id/iv_avator" android:text="信用積分 193 >" android:textColor="#fff" android:textSize="11sp"/> </RelativeLayout>
<ImageView android:layout_width="match_parent" android:layout_height="wrap_content" android:background="@mipmap/bg_header" android:scaleType="centerCrop"/>
</LinearLayout>

創建menu包,menu包下的navigation_menu菜單文件:

<?xml version="1.0" encoding="utf-8"?><menu xmlns:android="http://schemas.android.com/apk/res/android">
<item android:id="@+id/one" android:icon="@mipmap/my_favorites" android:title="我的錢包"/>
<item android:id="@+id/two" android:icon="@mipmap/my_competition" android:title="我的卡券"/>
<item android:id="@+id/three" android:icon="@mipmap/my_honor" android:title="我的行程"/>
<item android:id="@+id/four" android:icon="@mipmap/my_offline_cache" android:title="邀請好友"/>
<item android:id="@+id/five" android:icon="@mipmap/my_help_and_feedback" android:title="我的貼紙"/>
<item android:id="@+id/six" android:icon="@mipmap/my_set_up" android:title="設置"/></menu>

setSupportActionBar(toolbar)

設置toolbar;

setHomeButtonEnabled(true)

設置是否使用自帶返回鍵;

setDisplayHomeAsUpEnabled(true)

給左上角圖標的左邊加上一個返回的圖標 ;

mDrawerLayout.setDrawerListener(mToggle)

給drawerlayout設置開關事件觸發。

toolbar = (Toolbar) findViewById(R.id.toolbar);        mDrawerLayout = (DrawerLayout) findViewById(R.id.drawerlayout);        navigationView = (NavigationView) findViewById(R.id.navigationview);        toolbar.setTitle("");        setSupportActionBar(toolbar);        getSupportActionBar().setHomeButtonEnabled(true);        getSupportActionBar().setDisplayHomeAsUpEnabled(true);
mToggle = new ActionBarDrawerToggle(this,mDrawerLayout,toolbar,R.string.open,R.string.close){ @Override public void onDrawerOpened(View drawerView) { super.onDrawerOpened(drawerView);
}
@Override public void onDrawerClosed(View drawerView) { super.onDrawerClosed(drawerView);
} };
mToggle.syncState(); mDrawerLayout.setDrawerListener(mToggle);

給菜單添加點擊事件:

        navigationView.setNavigationItemSelectedListener(new NavigationView.OnNavigationItemSelectedListener() {            @Override            public boolean onNavigationItemSelected(@NonNull MenuItem item) {                switch (item.getItemId()){                    case R.id.one:                        Toast.makeText(getApplicationContext(),"one",Toast.LENGTH_SHORT).show();                        break;                    case R.id.two:                        Toast.makeText(getApplicationContext(),"two",Toast.LENGTH_SHORT).show();                        break;                    case R.id.three:                        Toast.makeText(getApplicationContext(),"three",Toast.LENGTH_SHORT).show();                        break;                    case R.id.four:                        Toast.makeText(getApplicationContext(),"four",Toast.LENGTH_SHORT).show();                        break;                    case R.id.five:                        Toast.makeText(getApplicationContext(),"five",Toast.LENGTH_SHORT).show();                        break;                    case R.id.six:                        Toast.makeText(getApplicationContext(),"six",Toast.LENGTH_SHORT).show();                        break;                }                return true;            }        });

MainActivity完整代碼:
package com.example.drawerlayout;
import android.support.annotation.NonNull;import android.support.design.widget.NavigationView;import android.support.v4.widget.DrawerLayout;import android.support.v7.app.ActionBarDrawerToggle;import android.support.v7.app.AppCompatActivity;import android.os.Bundle;import android.support.v7.widget.Toolbar;import android.view.MenuItem;import android.view.View;import android.widget.Toast;
public class MainActivity extends AppCompatActivity { private Toolbar toolbar; private ActionBarDrawerToggle mToggle; private DrawerLayout mDrawerLayout; private NavigationView navigationView;
@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main);
init(); }
private void init() { toolbar = (Toolbar) findViewById(R.id.toolbar); mDrawerLayout = (DrawerLayout) findViewById(R.id.drawerlayout); navigationView = (NavigationView) findViewById(R.id.navigationview); toolbar.setTitle(""); setSupportActionBar(toolbar); getSupportActionBar().setHomeButtonEnabled(true); getSupportActionBar().setDisplayHomeAsUpEnabled(true);
mToggle = new ActionBarDrawerToggle(this,mDrawerLayout,toolbar,R.string.open,R.string.close){ @Override public void onDrawerOpened(View drawerView) { super.onDrawerOpened(drawerView);
}
@Override public void onDrawerClosed(View drawerView) { super.onDrawerClosed(drawerView);
} };
mToggle.syncState(); mDrawerLayout.setDrawerListener(mToggle);
navigationView.setNavigationItemSelectedListener(new NavigationView.OnNavigationItemSelectedListener() { @Override public boolean onNavigationItemSelected(@NonNull MenuItem item) { switch (item.getItemId()){ case R.id.one: Toast.makeText(getApplicationContext(),"one",Toast.LENGTH_SHORT).show(); break; case R.id.two: Toast.makeText(getApplicationContext(),"two",Toast.LENGTH_SHORT).show(); break; case R.id.three: Toast.makeText(getApplicationContext(),"three",Toast.LENGTH_SHORT).show(); break; case R.id.four: Toast.makeText(getApplicationContext(),"four",Toast.LENGTH_SHORT).show(); break; case R.id.five: Toast.makeText(getApplicationContext(),"five",Toast.LENGTH_SHORT).show(); break; case R.id.six: Toast.makeText(getApplicationContext(),"six",Toast.LENGTH_SHORT).show(); break; } return true; } }); }}

使用技巧:

獲取頭布局控制項:

        View headerView = navigationView.getHeaderView(0);        ImageView ivAvatar = headerView.findViewById(R.id.iv_avator);

需要添加 app:itemIconTint="@color/blue"設置統一顏色。

調用navigationView.setItemIconTintList(null),https://github.com/18380438200/DrawerLayout



相關焦點

  • Android Material Design系列之Navigation Drawer
    Material Design系列控制項,我們今天就先從側滑菜單欄開始,側滑菜單欄通過名字我們就知道包含兩部分,一部分是側滑(DrawerLayout),一部分是導航菜單欄(NavigationView)。DrawerLayout包含NavigationView,一設置側滑菜單欄就形成了。
  • iOS App最常用的設計 優秀側滑菜單設計案例
    側滑菜單已經成為App一個極常用的設計,不管是事務類,效率類還是生活類App。側滑菜單因Path 2.0和Facebook為開發者熟知,本文搜集了一些時髦的,精緻的側滑菜單設計案例。   優雅的純色背景,逼真的翻頁動畫效果。
  • 再見了,摩拜單車!
    雖然共享單車品牌眾多,但其中名氣最大的要數ofo和摩拜,這兩家公司可以算是早期共享單車的代表,但是隨著「共享經濟」泡沫的破裂,兩家公司也是首當其衝,被迅速湮滅了。相對於ofo,摩拜的處境可能要更好一些,在2018年,摩拜單車被美團收購,而「摩拜」這個品牌也隨著時間的推移,慢慢地淡出了人們的視線。近日,據摩拜微信小程序公布,摩拜APP、摩拜微信小程序將於在2020年12月14日晚23點59分停止服務和運營,摩拜單車全面接入美團並更名美團單車。至此,一個時代結束了。
  • 今晚,摩拜單車徹底拜拜
    在當時,最被看好的企業不是什麼特斯拉、小鵬,大家也不熱衷於搗鼓老百姓買菜的那些小事,做共享單車,似乎才是最有前景的出路。說到共享單車,就不得不提「雙雄」ofo和摩拜。在市場的角度來看,ofo和摩拜代表了一種全新的商業模式,是所謂「共享經濟」的代表,甚至可能是網際網路的「未來答案」。
  • 摩拜單車如何鎖車 摩拜單車鎖車方法【詳細介紹】
    摩拜單車怎麼鎖車?摩拜單車是一個非常方便的功能,很多小夥伴們借完車卻不知道怎麼鎖車,這是一大困擾,下面小編給大家帶來摩拜單車鎖車方法教程。  摩拜單車怎麼開鎖:摩拜單車開鎖原理  一、手機掃描自行車,獲得自行車唯一的ID標誌,手機接著會像伺服器提交一個請求(提交信息裡包含:用戶信息,請求動作,車輛ID);  二、伺服器收到用戶開鎖請求,此時會根據請求信息,接著向指定ID的自行車發出開鎖指令;  三、自行車收到伺服器請求,會執行相應的開鎖動作。
  • 摩拜單車的「體面」與小黃車的「狗血」
    2020年12月14日晚,摩拜APP、摩拜微信小程序將停止服務和運營。至此,摩拜將從名義上退出市場。而共享單車的另一大巨頭ofo小黃車早在2019年4月份破產,退出市場。目前遙想當年,ofo小黃車與摩拜兩大巨頭對於市場爭奪十分激烈,後期哈羅單車的加入,最終造就了當時共享單車的三大巨頭。而如今,隨著摩拜的退出,當時的三大巨頭僅剩哈羅單車,令人噓噓。
  • 摩拜告別單車江湖!摩拜帳戶餘額可在美團使用
    山西日報新媒體記者衛波報導:12月14日23時59分,摩拜APP、摩拜微信小程序已停止服務和運營。摩拜單車和我們說再見,曾經的「小橘」變身黃色的美團單車。那麼摩拜用戶在APP裡剩的餘額、套餐該咋辦,能退嗎?可以繼續使用嗎?
  • 摩拜App今晚停服:摩拜單車全面接入美團
    12月14日消息,據報導,摩拜App、摩拜微信小程序將於2020年12月14日晚23時59分停止服務和運營,即日起可選擇使用原摩拜帳號登錄美團App掃碼免押金騎行。
  • 「戴蝴蝶結」的摩拜單車現身上海街頭 米奇米妮情侶單車圖片
    近日,為了給用戶增添騎行樂趣,提高騎行體驗,摩拜攜手享譽世界的迪士尼商店展開了一次非凡合作,8月15日一批「戴蝴蝶結」的摩拜單車出現在上海街頭,供用戶嘗鮮和體驗。  此次首批投放的限定版摩拜單車將分為「米奇車」、「米妮車」兩款情侶單車,車身由迪士尼設計師獨家設計,在摩拜經典版與輕騎版兩大車型的基礎上進行特別塗裝:米奇米妮眨眼俏皮靈動,經典可愛的表情隨著車輪轉動,傳遞運動的快樂能量;車頭車尾米奇頭像的反光片閃爍光芒,從細節優化騎行體驗,為夜間騎行安全提供更多警示和保障;「米妮車」為女性用戶量身打造,車頭童趣大蝴蝶結優雅可愛,成為城市街拍最「高顏值
  • 摩拜單車全面接入美團 摩拜App停止服務
    12月14日晚間消息,據「美團單車」微信小程序,摩拜App、摩拜微信小程序將停止服務和運營。目前,摩拜單車已接入美團App,帳號中的餘額、騎行卡套餐等相關權益仍可在美團App內繼續使用。摩拜在上月的一份通告中稱,為了提供更便捷的服務體驗,摩拜單車服務已全面接入美團,並更名為「美團單車」。摩拜App、摩拜微信小程序將於2020年12月14日晚23時59分停止服務和運營,即日起可選擇使用原摩拜帳號登錄美團App掃碼免押金騎行。原摩拜帳號中的餘額、騎行卡套餐等相關權益仍可在美團App內繼續使用,詳情請進入美團App「騎車」或「出行」頻道的「個人中心」查詢。
  • 摩拜單車App將停止服務
    摩拜單車App將停止服務 2020-12-14 21:10 來源:澎湃新聞·澎湃號·媒體
  • 摩拜單車已全面接入美團 摩拜APP今晚將停止服務
    來源:澎湃新聞12月14日晚,摩拜App、摩拜微信小程序將停止服務和運營。目前,摩拜單車已接入美團App,帳號中的餘額、騎行卡套餐等相關權益仍可在美團App內繼續使用。摩拜在上月的一份通告中稱,為了提供更便捷的服務體驗,摩拜單車服務已全面接入美團,並更名為「美團單車」。摩拜App、摩拜微信小程序將於2020年12月14日晚23時59分停止服務和運營,即日起可選擇使用原摩拜帳號登錄美團App掃碼免押金騎行。原摩拜帳號中的餘額、騎行卡套餐等相關權益仍可在美團App內繼續使用,詳情請進入美團App「騎車」或「出行」頻道的「個人中心」查詢。
  • 離開胡瑋煒的摩拜單車,為何只配消失?
    共享單車的狂歡與落寂,也僅僅是一個網際網路創新生態的剖面。冰川思想庫特約撰稿 | 與歸摩拜走了,連名字都沒能留下。2020年12月14日晚,摩拜APP、摩拜微信小程序宣布停止服務和運營。目前,摩拜單車已接入美團APP,帳號中的餘額、騎行卡套餐等相關權益仍可在美團APP內繼續使用。▲摩拜APP已經停止運營(圖/網絡)一個月前,摩拜在通告中已經宣稱,為了提供更便捷的服務體驗,摩拜單車服務已全面接入美團,並更名為「美團單車」。至此,摩拜徹底成為歷史。
  • 摩拜單車App將停用,青春結束了!
    說到共享單車,就不得不提「雙雄」ofo和摩拜。在市場的角度來看,ofo和摩拜代表了一種全新的商業模式,是所謂「共享經濟」的代表,甚至可能是網際網路的「未來答案」。然而好景不長,所謂「共享經濟」的泡沫迅速破裂,ofo債務纏身無法抽身,而摩拜也好不到哪裡去,在2018年被美團收購,「摩拜」這個名頭也隨著時間的推移慢慢淡出大眾視野。
  • 摩拜與迪士尼合作 推米奇米妮定製版單車
    老對手摩拜自然不會放任自流,火速和迪士尼合作,推出了米奇、米妮定製單車。據上海市旅遊局@樂遊上海 消息,今天一批「戴蝴蝶結」的摩拜單車出現在上海街頭。據悉,這是摩拜單車攜手迪士尼商店特別定製的「米奇車」、「米妮車」情侶單車,並將現身上海熱門商圈。
  • 摩拜單車開賣雨衣 嘗試尋找多元盈利模式
    而眼下,摩拜單車也推出了自己的周邊產品。  就在昨天,「摩拜單車中國」微信公號打出了一則廣告,說摩拜和獨立設計師品牌exciTING共同設計出品一款可攜式的雨衣。  這款雨衣帽簷全透明,衣身有反光條,不使用的時候雨衣可伸縮摺疊,下擺長度也專門為騎行設計。在微信公號文章的配圖裡我們可以看到這款雨衣有橙色和黑色兩種顏色,而這也正是摩拜單車的主題色。
  • 摩拜與迪士尼合作,推米奇、米妮定製版單車
    據上海旅遊局微博消息,8月15日,一批「戴蝴蝶結」的摩拜單車出現在上海街頭。據雷鋒網(公眾號:雷鋒網)了解,摩拜單車此次投放的「米奇車」、「米妮車」是由上海迪士尼商店定製,車身由迪士尼設計師在摩拜經典版與輕騎版兩款車型的基礎上進行塗裝設計。值得注意的是「米奇車」在車頭車尾的頭像位置增加了反光片,一定程度上彌補了定製款晚間騎行可視性差的缺點,為夜間騎行的粉絲提供警示和安全保障。
  • 摩拜單車APP今晚停止服務
    14日晚,摩拜APP、摩拜微信小程序將停止服務和運營。目前,摩拜單車已接入美團APP,帳號中的餘額、騎行卡套餐等相關權益仍可在美團APP內繼續使用。摩拜在上月的一份通告中稱,為了提供更便捷的服務體驗,摩拜單車服務已全面接入美團,並更名為「美團單車」。摩拜APP、摩拜微信小程序將於2020年12月14日晚23時59分停止服務和運營,即日起可選擇使用原摩拜帳號登錄美團APP掃碼免押金騎行。
  • CC卡美珠寶聯手摩拜單車打造「分手盒子」
    太原2017年7月5日電 /美通社/ -- 近日,CC卡美珠寶與摩拜單車主辦的「分手盒子」失戀信物展正在火熱進行中。此次失戀信物展收集了各種關於愛的記憶,希望透過這些展出能夠刺激來觀展的人向內心深處找尋破碎所帶來的長遠意義而非只是流連於心碎之中,給情感一個宣洩的出口,讓人更快的走出失敗感情,治癒受傷的心靈。
  • 限定版米奇米妮摩拜單車驚喜上線 與迪士尼商店浪漫邂逅
    8月15日,一批「戴蝴蝶結」的摩拜單車出現在上海街頭。原來這是摩拜單車攜手迪士尼商店特別定製的米奇米妮單車。這不僅是迪士尼商店首次與共享單車合作,也是摩拜單車首次為迪士尼經典形象設計塗裝車。