Android實現從底部彈出Dialog(和PopWindow實現的效果一樣)
阿新 • • 發佈:2019-01-01
上菜,不,上圖:
相信上圖的效果,大家在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了....後續我將專門出一篇關於屬性動畫的博文,敬請關注!