android中浮动菜单的基本实现

 实现浮动菜单的方法很多,这里就简单介绍介绍几种比较常见的方法吧

用PopupMenu实现浮动菜单

这种方式比较简单,直接上代码了:

  • 在的java代码中实现构造浮动菜单
    这里的getResources().getString(R.string.copy)是定义在value文件夹下,名为string的对象,
    内容就是“复制”,这里这样写只是为了复习一下getResources()的用法。
 PopupMenu popupMenu = new PopupMenu(this,view);
        Menu menu = popupMenu.getMenu();
        //通过代码添加菜单选项
        menu.add(Menu.NONE,Menu.FIRST+0,0,"粘贴").setIcon(R.mipmap.ic_launcher);
        menu.add(Menu.NONE,Menu.FIRST+1,1,getResources().getString(R.string.copy))
        .setIcon(R.mipmap.ic_launcher);

        popupMenu.setOnMenuItemClickListener(new PopupMenu.OnMenuItemClickListener() {
            @Override
            public boolean onMenuItemClick(MenuItem item) {
                switch (item.getItemId()){
                    case Menu.FIRST+0:
                        Toast.makeText(MainActivity.this,"你点击了粘贴",Toast.LENGTH_SHORT).show();
                        break;
                    case Menu.FIRST+1:
                        Toast.makeText(MainActivity.this,"你点击了返回",Toast.LENGTH_SHORT).show();
                        break;
                }
                return false;
            }
        });
        popupMenu.show();

这里写图片描述
* 通过加载xml文件实现浮动菜单

1 那么首先就需要在menu文件中新建一个main_menu.xml文件,代码如下:

<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android">
<item android:id="@+id/menu_copy"
    android:title="复制"/>
 <item android:id="@+id/menu_delet"
        android:title="删除"/>
</menu>

2 然后就是我们的java代码:

PopupMenu popupMenu = new PopupMenu(this,view);
        popupMenu.getMenuInflater().inflate(R.menu.main_menu,popupMenu.getMenu());
        popupMenu.setOnMenuItemClickListener(new PopupMenu.OnMenuItemClickListener() {
            @Override
            public boolean onMenuItemClick(MenuItem item) {
                switch (item.getItemId()){
                    case R.id.menu_copy:
                        Toast.makeText(MainActivity.this,"你点击了复制",Toast.LENGTH_SHORT).show();
                        break;
                    case R.id.menu_delet:
                        Toast.makeText(MainActivity.this,"你点击了删除",Toast.LENGTH_SHORT).show();
                        break;
                }
                return false;
            }
        });
        popupMenu.show();

这里写图片描述
以上就是基础的菜单的实现方法,这里只是简单的提一下,下面的内容才是我们的重点。

自定义浮动菜单

1 首先还是需要在layout文件夹下面新建一个布局文件,代码如下

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:gravity="center_horizontal"
    android:orientation="vertical">

    <LinearLayout
        android:id="@+id/pop_layout"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:layout_alignParentBottom="true"
        android:gravity="center_horizontal"
        android:orientation="vertical">

        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content">

            <ImageView
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:src="@mipmap/ic_launcher" />

            <Button
                android:id="@+id/btn_take_photo"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_marginLeft="20dp"
                android:layout_marginRight="20dp"
                android:layout_marginTop="20dip"
                android:onClick="itemCopy"
                android:text="复制"
                android:textStyle="bold" />

            <CheckBox
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="选中了" />
        </LinearLayout>


        <Button
            android:id="@+id/btn_pick_photo"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_marginLeft="20dp"
            android:layout_marginRight="20dp"
            android:layout_marginTop="5dp"
            android:onClick="itemStick"
            android:text="粘贴"
            android:textStyle="bold" />

        <Button
            android:id="@+id/btn_cancel"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_marginBottom="15dp"
            android:layout_marginLeft="20dp"
            android:layout_marginRight="20dp"
            android:layout_marginTop="15dp"
            android:text="取消"
            android:textColor="#ffffff"
            android:textStyle="bold"

            />
    </LinearLayout>
</RelativeLayout>

图片预览界面如图:
这里写图片描述

然后新建一个activity类

package com.create.popupmenu;

import android.app.Activity;
import android.os.Bundle;
import android.view.MotionEvent;
import android.view.View;
import android.widget.Toast;

/**
 * Created by 24540 on 2016/5/18.
 */
public class PopupMenu extends Activity {


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.layout_item);
    }

    @Override
    public boolean onTouchEvent(MotionEvent event) {
            finish();
        return true;
    }

    public void itemCopy(View view){
        Toast.makeText(this,"你点击了复制",Toast.LENGTH_SHORT).show();
    }

    public void itemStick(View view){
        Toast.makeText(this,"你点击了粘贴",Toast.LENGTH_SHORT).show();
    }
}

下面重点来了,四大组件之一的activity当然需要在AndroidManifest文件中注册,注意这里的theme属性,我们需要将其定义为自己写的属性:部分activity注册代码

 <activity android:name=".PopupMenu"
      android:theme="@style/MyPopupMenu" />

注意这里的MyPopupMenu是我们自己定义的,具体的代码如下:(位于value目录下的styple)

<resources>

    <!-- Base application theme. -->
    <style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
        <!-- Customize your theme here. -->
        <item name="colorPrimary">@color/colorPrimary</item>
        <item name="colorPrimaryDark">@color/colorPrimaryDark</item>
        <item name="colorAccent">@color/colorAccent</item>
    </style>

    <style name="MyPopupMenu" parent="android:Theme.Dialog">
        <item name="android:windowAnimationStyle">@style/AnimBottom</item>
        <item name="android:windowFrame">@null</item>
        <item name="android:windowIsFloating">true</item>
        <item name="android:windowIsTranslucent">true</item>
        <item name="android:windowNoTitle">true</item>
        <item name="android:windowBackground">@android:color/transparent</item>
        <item name="android:backgroundDimEnabled">true</item>
    </style>

    <style name="AnimBottom" parent="@android:style/Animation">
        <item name="android:windowEnterAnimation">@anim/push_bottom_in</item>
        <item name="android:windowExitAnimation">@anim/push_buttom_out</item>
    </style>
</resources>

这里我们引用了两个动画,动画文件位于anim文件夹中,在里面新增两个动画文件push_bottom_in.xml

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
<translate
    android:duration="200"
    android:fromYDelta="100%p"
    android:toYDelta="0"
    />
</set>

另一个动画文件:push_buttom_out.xml

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

<!-- 上下滑出式 -->
<set xmlns:android="http://schemas.android.com/apk/res/android">
    <translate
        android:duration="200"
        android:fromYDelta="0"
        android:toYDelta="50%p" />
</set>

好了,到目前为止,我们的工作已经完成的差不多了,接下来就只要在MainActivity中开启我们的那个Activity就好了,逻辑代码如下

 Intent intent = new Intent(MainActivity.this, com.create.popupmenu.PopupMenu.class);
        startActivity(intent);
 ```

结果参考下图:
这里写图片描述

下面讲讲如何利用PopupWindow创建menu。

这里直接给出一个例子的代码吧:
 View contentView = LayoutInflater.from(MainActivity.this).inflate(R.layout.layout_popup_window,null);
       popupWindow = new PopupWindow(contentView, ActionBar.LayoutParams.WRAP_CONTENT,
                ActionBar.LayoutParams.WRAP_CONTENT,true);
        popupWindow.setAnimationStyle(R.anim.push_bottom_in);
        TextView tv1 = (TextView)contentView.findViewById(R.id.pop_computer);
        TextView tv2 = (TextView)contentView.findViewById(R.id.pop_financial);
        TextView tv3 = (TextView)contentView.findViewById(R.id.pop_manage);

        //显示PopupWindow
        View rootview = LayoutInflater.from(MainActivity.this).inflate(R.layout.activity_main, null);
      //  popupWindow.showAtLocation(rootview, Gravity.BOTTOM, 0, 0);
        popupWindow.showAsDropDown(rootview);

        tv1.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Toast.makeText(MainActivity.this,"复制",Toast.LENGTH_SHORT).show();
                popupWindow.setAnimationStyle(R.anim.push_buttom_out);
                popupWindow.dismiss();
            }
        });
        tv2.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Toast.makeText(MainActivity.this,"粘贴",Toast.LENGTH_SHORT).show();
                popupWindow.setAnimationStyle(R.anim.push_buttom_out);
                popupWindow.dismiss();
            }
        });
        tv3.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Toast.makeText(MainActivity.this,"返回",Toast.LENGTH_SHORT).show();
                popupWindow.setAnimationStyle(R.anim.push_buttom_out);
                popupWindow.dismiss();
            }
        });

上面是一个简单的示例代码,里面的动画文件都上前面我们定义定义好的。
最后,在这里留下demo代码吧,android studio 2.1.1编写:github;

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值