android - 安卓如何模仿ios,可以显示如图的有遮盖效果的界面?
怪我咯
怪我咯 2017-04-17 17:01:42
[Android讨论组]
怪我咯
怪我咯

走同样的路,发现不同的人生

全部回复(4)
高洛峰

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

高洛峰

PhotoChioceDialog

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;
            }
        }
    }
}

R.style.photo_chioce_dialog

<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>

dialog_pic_chioce

<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

<!--选择图片弹窗动画 -->
    <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中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习
PHP中文网抖音号
发现有趣的

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号