xamarin.android 实现 Activity 底部弹出对话框菜单

Resources/drawable 下新增如下文件:

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="98%p" />
</set>

 

在 values/Styles.xml 新增如下样式

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

  <style name="MyDialogStyleBottom" parent="android:Theme.Holo.DialogWhenLarge">
    <item name="android:windowAnimationStyle">@style/AnimBottom</item>
    <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">@android:color/transparent</item>
    <!-- 背景透明 -->
    <item name="android:backgroundDimEnabled">true</item>
    <!-- 模糊 -->
  </style>

新增如下文件 Resources/layout/LoginMenuPopupWindow.axml

<?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_height="wrap_content"
        android:gravity="center_horizontal"
        android:orientation="vertical"
        android:layout_alignParentBottom="true"
        android:background="#EEE"
        android:layout_width="match_parent">
        <Button
            android:id="@+id/btn_smsloginauthentication_loginmenupopupwindow"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:text="通过短信验证登陆"
            android:background="@drawable/v_line"
            android:textColor="@color/fonts_color" />
        <Button
            android:id="@+id/btn_changepassword_loginmenupopupwindow"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:text="修改密码"
            android:background="@drawable/v_line"
            android:textColor="@color/fonts_color" />
        <Button
            android:id="@+id/btn_cancel"
            android:layout_marginTop="10dip"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:text="取消"
            android:textColor="@color/fonts_color"
            android:background="@drawable/top_line" />
    </LinearLayout>
</RelativeLayout>

对应的Activity 代码 LoginMenuPopupWindow.cs

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

using Android.App;
using Android.Content;
using Android.OS;
using Android.Runtime;
using Android.Views;
using Android.Widget;
using static Android.Views.View;

namespace Dorid
{
    [Activity(Theme = "@style/MyDialogStyleBottom")]
    public class LoginMenuPopupWindow : Activity, IOnClickListener
    {
        protected override void OnCreate(Bundle savedInstanceState)
        {
            base.OnCreate(savedInstanceState);
            SetContentView(Resource.Layout.LoginMenuPopupWindow);

            var windowManager = WindowManager;
            var windowManagerLayoutParams = Window.Attributes;
            var displayMetrics = new Android.Util.DisplayMetrics();
            windowManager.DefaultDisplay.GetMetrics(displayMetrics);
            windowManagerLayoutParams.Width = (int)(displayMetrics.WidthPixels * 1); // 宽度设置
            Window.Attributes = windowManagerLayoutParams;

            var btn_cancel = FindViewById<Button>(Resource.Id.btn_cancel);
            var btn_changepassword = FindViewById<Button>(Resource.Id.btn_changepassword_loginmenupopupwindow);
            var btn_smsloginauthentication = FindViewById<Button>(Resource.Id.btn_smsloginauthentication_loginmenupopupwindow);

            btn_cancel.SetOnClickListener(this);
            btn_changepassword.SetOnClickListener(this);
            btn_smsloginauthentication.SetOnClickListener(this);
            // Create your application here
        }

        public void OnClick(View v)
        {
            Intent intent = new Intent();
            switch (v.Id)
            {
                case Resource.Id.btn_smsloginauthentication_loginmenupopupwindow:
                    intent.PutExtra("Type", "SmsLogin");
                    SetResult(Result.Ok, intent);
                    break;
                case Resource.Id.btn_changepassword_loginmenupopupwindow:
                    intent.PutExtra("Type", "ChangePassword");
                    SetResult(Result.Ok, intent);
                    break;
                case Resource.Id.btn_cancel:
                default: break;
            }
            Finish();
        }

        public override bool OnTouchEvent(MotionEvent e)
        {
            Finish();
            return base.OnTouchEvent(e);
        }
    }
}

 

posted @ 2016-06-08 15:11  mycing  阅读(3142)  评论(1编辑  收藏  举报