扫码关注官方订阅号
走同样的路,发现不同的人生
Dialog即可实现你想要的效果,设置Dialog的window属性,可以改变dialog在屏幕的显示位置。如,你截图的效果可以这么写
Dialog mDialog = new Dialog(this); Window mWindow = mDialog.getWindow(); mWindow.setLayout(LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.WRAP_CONTENT); mWindow.setGravity(Gravity.BOTTOM);
当然,dialog里的布局内容就需要你再去放置了。
supportlibrary 23.2.0 ,提供了BottomSheetDialogFragment ,轻松达到想得到的效果
就是一个dialog
public class PhotoChioceDialog { private Context context; private Dialog dialog; private ClickListenerInterface clickListenerInterface; public PhotoChioceDialog(Context context){ this.context =context; dialog = new Dialog(context, R.style.photo_chioce_dialog); dialog.setContentView(R.layout.dialog_pic_chioce); dialog.findViewById(R.id.btn_album).setOnClickListener(new ClickListener()); dialog.findViewById(R.id.btn_camera).setOnClickListener(new ClickListener()); dialog.findViewById(R.id.btn_cancel).setOnClickListener(new ClickListener()); Window window = dialog.getWindow(); window.setWindowAnimations(R.style.main_menu_animstyle); WindowManager.LayoutParams lp = window.getAttributes(); WindowManager manager=(WindowManager) context.getSystemService(Context.WINDOW_SERVICE); lp.x = 0; lp.y = manager.getDefaultDisplay().getHeight(); // 以下这两句是为了保证按钮可以水平满屏 lp.width = ViewGroup.LayoutParams.MATCH_PARENT; lp.height = ViewGroup.LayoutParams.WRAP_CONTENT; // 设置显示位置 dialog.onWindowAttributesChanged(lp); // 设置点击外围解散 dialog.setCanceledOnTouchOutside(true); } public void show(){ dialog.show(); } public void dismiss(){ dialog.dismiss(); } public void setClickListenerInterface(ClickListenerInterface clickListenerInterface) { this.clickListenerInterface = clickListenerInterface; } public interface ClickListenerInterface { /** * 进入相册 */ void doAlbum(); /** * 取消 */ void doCancel(); /** * 进入相机 */ void doCamera(); } private class ClickListener implements View.OnClickListener{ @Override public void onClick(View v) { switch (v.getId()) { case R.id.btn_album: if (clickListenerInterface!=null) clickListenerInterface.doAlbum(); break; case R.id.btn_camera: if (clickListenerInterface!=null) clickListenerInterface.doCamera(); break; case R.id.btn_cancel: if (clickListenerInterface!=null) clickListenerInterface.doCancel(); break; } } } }
<style name="photo_chioce_dialog" parent="@android:style/Theme.Dialog"> <item name="android:windowFrame">@null</item> <item name="android:windowIsFloating">true</item> <item name="android:windowIsTranslucent">false</item> <item name="android:windowNoTitle">true</item> <item name="android:background">@color/transparent</item> <item name="android:windowBackground">@android:color/transparent</item> <item name="android:backgroundDimEnabled">true</item> </style>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:background="#00000000" android:gravity="bottom" android:orientation="vertical" android:layout_margin="10dp" > <Button android:id="@+id/btn_album" android:layout_width="match_parent" android:layout_height="wrap_content" android:background="@drawable/photo_album_selector" android:text="@string/album" android:textColor="@color/black" android:textSize="18sp" android:padding="10dp"/> <View android:layout_width="match_parent" android:layout_height="1dp" android:background="@color/line"/> <Button android:id="@+id/btn_camera" android:layout_width="match_parent" android:layout_height="wrap_content" android:background="@drawable/photo_camera_selector" android:text="@string/camera" android:textColor="@color/black" android:textSize="18sp"/> <Button android:id="@+id/btn_cancel" android:layout_width="match_parent" android:layout_height="wrap_content" android:background="@drawable/photo_cancel_selector" android:paddingBottom="16dp" android:layout_marginTop="10dp" android:text="@string/cancel" android:textColor="@color/black" android:textSize="18sp"/> </LinearLayout>
<!--选择图片弹窗动画 --> <style name="main_menu_animstyle"> <item name="android:windowEnterAnimation">@anim/photo_dialog_in_anim</item> <item name="android:windowExitAnimation">@anim/photo_dialog_out_anim</item> </style>
photo_dialog_in_anim <set xmlns:android="http://schemas.android.com/apk/res/android" > <translate android:duration="500" android:fromXDelta="0" android:fromYDelta="1000" android:toXDelta="0" android:toYDelta="0" /> </set> photo_dialog_out_anim <set xmlns:android="http://schemas.android.com/apk/res/android" > <translate android:duration="500" android:fromXDelta="0" android:fromYDelta="0" android:toXDelta="0" android:toYDelta="1000" /> </set>
微信扫码关注PHP中文网服务号
QQ扫码加入技术交流群
扫描下载App
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号
PHP学习
技术支持
返回顶部
Dialog即可实现你想要的效果,设置Dialog的window属性,可以改变dialog在屏幕的显示位置。如,你截图的效果可以这么写
当然,dialog里的布局内容就需要你再去放置了。
supportlibrary 23.2.0 ,提供了BottomSheetDialogFragment ,轻松达到想得到的效果
就是一个dialog
PhotoChioceDialog
R.style.photo_chioce_dialog
dialog_pic_chioce
动画style
动画