activity實現彈出菜單,仿網易雲音樂側滑菜單

   activity設置成dialog 浮動窗口,樣式,可以完成dialog無法實現的功能,例如:它能懸浮在手機桌面,且不受Activity界面的影響,說明該懸浮窗口是不隸屬於Activity界面的,也就是說,他是隸屬於啓動它的應用程序所在進程。如360App所在的應用進程,當殺掉它所在的應用進程時,它纔會消失。

這樣做可在項目中任何地方隨意調用菜單,不依賴具體的activity,達到重用的目的

  先上效果圖:



1.java代碼:

MenuActivity.java 

package com.xiebao.aboutus;

import android.os.Build;
import android.os.Bundle;
import android.view.Gravity;
import android.view.View;
import android.view.Window;
import android.view.WindowManager;
import android.widget.TextView;

import com.xiebao.R;
import com.xiebao.core.ToastUtils;
import com.xiebao.fatherclass.FatherActivity;

public class MenuActivity extends FatherActivity implements
		View.OnClickListener {

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		this.requestWindowFeature(Window.FEATURE_NO_TITLE);
		this.setContentView(R.layout.activity_menu_layout);
		setWindowAttribute();
		initView();
	}

	private void initView() {
		TextView back = getView(R.id.back_home);
		TextView about = getView(R.id.about_xiebao);
		TextView help = getView(R.id.help_center);
		TextView feed = getView(R.id.feed_back);
		back.setOnClickListener(this);
		about.setOnClickListener(this);
		help.setOnClickListener(this);
		feed.setOnClickListener(this);
	}

	/**
	 * 設置窗口屬性
	 */
	private void setWindowAttribute() {
		if (Build.VERSION.SDK_INT >= 11) {
			setFinishOnTouchOutside(true);
		}
		// int heighted = ScreenUtil.getViewHeight(shareLayout);
		float mY = getResources().getDimension(R.dimen.common_top_bar_height);
		Window window = getWindow();
		WindowManager.LayoutParams layoutParams = window.getAttributes();
		// 設置窗口的大小及透明度
		// layoutParams.width = WindowManager.LayoutParams.MATCH_PARENT;
		// layoutParams.height = 48;

		layoutParams.gravity = Gravity.RIGHT | Gravity.TOP;
		layoutParams.y = (int) mY;
		// layoutParams.alpha = 0.5f;
		window.setAttributes(layoutParams);
	}

	@Override
	public void onClick(View v) {
		switch (v.getId()) {
		case R.id.back_home:

			break;
		case R.id.about_xiebao:

			break;
		case R.id.help_center:

			break;
		case R.id.feed_back:

			break;
		default:
			break;
		}
        finish();
		ToastUtils.show(context, "nihao"+String.valueOf(v.getId()));
	}

}

2.佈局文件:

activity_menu_layout.xml 

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:background="@color/menu_color"
    android:gravity="center"
    android:orientation="vertical"
    android:padding="10dp" >

    <TextView
        android:id="@+id/back_home"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:background="@drawable/menu_backgroud_select"
        android:gravity="center"
        android:padding="10dp"
        android:text="@string/back_text"
        android:textColor="@color/white"
        android:textSize="20sp" />

    <View
        android:layout_width="match_parent"
        android:layout_height="1dp"
        android:background="@color/list_divider_color" />

    <TextView
        android:id="@+id/about_xiebao"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:background="@drawable/menu_backgroud_select"
        android:gravity="center"
        android:padding="10dp"
        android:text="@string/about_xiebao"
        android:textColor="@color/white"
        android:textSize="20sp" />

    <View
        android:layout_width="match_parent"
        android:layout_height="1dp"
        android:background="@color/list_divider_color" />

    <TextView
        android:id="@+id/help_center"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:background="@drawable/menu_backgroud_select"
        android:gravity="center"
        android:padding="10dp"
        android:text="@string/help_center"
        android:textColor="@color/white"
        android:textSize="20sp" />

    <View
        android:layout_width="match_parent"
        android:layout_height="1dp"
        android:background="@color/list_divider_color" />

    <TextView
        android:id="@+id/feed_back"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:background="@drawable/menu_backgroud_select"
        android:gravity="center"
        android:padding="10dp"
        android:text="@string/feed_back"
        android:textColor="@color/white"
        android:textSize="20sp" />

</LinearLayout>

3.activity的樣式文件:

styles.xml 
   <style  name="activity_dialog" parent="@android:style/Theme.Dialog"> 
        <item name="android:windowFrame">@null</item><!--邊框-->
        <item name="android:windowIsFloating">true</item><!--是否浮現在activity之上-->
        <item name="android:windowIsTranslucent">true</item><!--透明-->
        <item name="android:windowNoTitle">true</item><!--無標題-->
        <item name="android:windowBackground">@null</item><!--背景透明-->
        <item name="android:backgroundDimEnabled">false</item><!--此屬性可以翻譯爲 是否允許對話框的背景變暗-->
         <item name="android:windowAnimationStyle">@android:style/Animation.Translucent</item>
    </style>

4.配置文件:

AndroidManifest.xml 

      <activity
            android:name=".aboutus.MenuActivity"
            android:launchMode="singleTask"
            android:screenOrientation="portrait"
            android:theme="@style/activity_dialog" >
        </activity>
改進下佈局,加上側邊屏幕監聽功能,可以做出類似網易雲音樂的側滑菜單,這樣就可以用簡單的activity代替開源的SlidingMenu,或android.support.v4.widget.DrawerLayout實現側滑:


相似的源碼:


結束;

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章