1. 程式人生 > >Android實現從底部彈出Dialog(和PopWindow實現的效果一樣)

Android實現從底部彈出Dialog(和PopWindow實現的效果一樣)

上菜,不,上圖:
這裡寫圖片描述

      相信上圖的效果,大家在android 裝置中經常碰到.有時候進行分享操作的時候-----要求從從底部自下而上彈出.上圖中的效果**既可以通過自定義Dialog實現也可以通過自定義PopWindow來實現.**關於popWindow的實現方式,大家可參照本人的另一篇博文Android自定義popWindow教程.

佈局檔案:dialog_custom_layout.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical" android:layout_width="match_parent" android:layout_height="match_parent" android:background="#fff">
<TextView android:id="@+id/tv_take_photo" android:layout_width="match_parent" android:layout_height="50dp" android:
text
="拍攝" android:gravity="center" android:textSize="16sp" android:textColor="@android:color/background_dark"/>
<View android:layout_width="match_parent" android:layout_height="1dp" android:background="@android:color/darker_gray"/> <TextView
android:id="@+id/tv_take_pic" android:layout_width="match_parent" android:layout_height="50dp" android:text="從手機相簿選擇" android:gravity="center" android:textSize="16sp" android:textColor="@android:color/background_dark"/>
<View android:layout_width="match_parent" android:layout_height="5dp" android:background="@android:color/darker_gray"/> <TextView android:id="@+id/tv_cancel" android:layout_width="match_parent" android:layout_height="50dp" android:text="取消" android:gravity="center" android:textSize="16sp" android:textColor="@android:color/background_dark"/> </LinearLayout>

封裝的dialog方法:

  private void showBottomDialog(){
        //1、使用Dialog、設定style
        final Dialog dialog = new Dialog(this,R.style.DialogTheme);
        //2、設定佈局
        View view = View.inflate(this,R.layout.dialog_custom_layout,null);
        dialog.setContentView(view);

        Window window = dialog.getWindow();
        //設定彈出位置
        window.setGravity(Gravity.BOTTOM);
        //設定彈出動畫
        window.setWindowAnimations(R.style.main_menu_animStyle);
        //設定對話方塊大小
        window.setLayout(ViewGroup.LayoutParams.MATCH_PARENT,ViewGroup.LayoutParams.WRAP_CONTENT);
        dialog.show();

        dialog.findViewById(R.id.tv_take_photo).setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                dialog.dismiss();
            }
        });

        dialog.findViewById(R.id.tv_take_pic).setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                dialog.dismiss();
            }
        });

        dialog.findViewById(R.id.tv_cancel).setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                dialog.dismiss();
            }
        });

    }

能控制dialog從底部彈出的方法在於

   Window window = dialog.getWindow();
        //設定彈出位置
        window.setGravity(Gravity.BOTTOM);
當然了,你也可以設定彈出dialog時候的動畫.步驟如下: **第一,**在Res資原始檔下新建anim資料夾. **第二,**在anim下天劍動畫檔案.如下: dialog_in_anim.xml ```xml <?xml version="1.0" encoding="utf-8"?>
<translate
    android:duration="500"
    android:fromXDelta="0"
    android:fromYDelta="1000"
    android:toXDelta="0"
    android:toYDelta="0" />
``` dialog_out_anim.xml ```xml <?xml version="1.0" encoding="utf-8"?>
<translate
    android:duration="500"
    android:fromXDelta="0"
    android:fromYDelta="0"
    android:toXDelta="0"
    android:toYDelta="1000" />
``` **第三,**在style.xml中設定屬性,主要包括: **(1).dialog的style屬性** ```xml
<style name="DialogTheme" parent="@android:style/Theme.Dialog">
    <!-- 邊框 -->
    <item name="android:windowFrame">@null</item>
    <!-- 是否浮現在activity之上 -->
    <item name="android:windowIsFloating">true</item>
    <!-- 半透明 -->
    <item name="android:windowIsTranslucent">true</item>
    <!-- 無標題 -->
    <item name="android:windowNoTitle">true</item>
    <item name="android:background">@android:color/transparent</item>
    <!-- 背景透明 -->
    <item name="android:windowBackground">@android:color/transparent</item>
    <!-- 模糊 -->
    <item name="android:backgroundDimEnabled">true</item>
    <!-- 遮罩層 -->
    <item name="android:backgroundDimAmount">0.5</item>
</style>
**(2).屬性動畫的syle屬性設定.**
```xml
 <!-- dialog的動畫 -->
    <style name="main_menu_animStyle">
         windowEnterAnimation 進入的動畫
          程式碼裡面
        <item name="android:windowEnterAnimation">@anim/dialog_in_anim</item>
        <item name="android:windowExitAnimation">@anim/dialog_out_anim</item>
    </style>
OK.簡單粗暴.完結.程式碼簡單,就不再附上demo了....後續我將專門出一篇關於屬性動畫的博文,敬請關注!