zoukankan      html  css  js  c++  java
  • 对话框 dialog 整理

    1、简单的对话框(默认布局):

    AlertDialog.Builder builder = new AlertDialog.Builder(this);
    builder.setTitle("尊敬的用户");
    builder.setMessage("你真的要卸载我吗?");
    builder.setPositiveButton("确定", new DialogInterface.OnClickListener() {
        @Override
        public void onClick(DialogInterface dialogInterface, int i) {
            
        }
    });
    builder.setNegativeButton("取消", new DialogInterface.OnClickListener() {
        @Override
        public void onClick(DialogInterface dialogInterface, int i) {
            
        }
    });
    AlertDialog alert = builder.create();
    alert.show();

    2、带选项的对话框:

    AlertDialog.Builder builder=new AlertDialog.Builder(InfoActivity.this);
    builder.setTitle("头像");
    builder.setNegativeButton("取消", new DialogInterface.OnClickListener(){
        @Override
        public void onClick(DialogInterface dialog, int which) {
    
        }
    });
    String[] items=new String[]{"相册上传","拍摄上传","下载头像"};
    builder.setItems(items, new DialogInterface.OnClickListener(){
        @Override
        public void onClick(DialogInterface dialog, int which) {
            if(which == 0){
            //从相册获取图片
    //            Intent intent = new Intent(Intent.ACTION_PICK, null);
    //            intent.setDataAndType(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, IMAGE_UNSPECIFIED);
    //            startActivityForResult(intent, PHOTO_ZOOM);
            }
            else if(which == 1){
            //从拍照获取图片
    //            Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
    //            intent.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(new File(Environment
    //                    .getExternalStorageDirectory(),"temp.jpg")));
    //            startActivityForResult(intent, PHOTO_GRAPH);
            }
            else if(which == 2){
    //            Matrix m = image.getImageMatrix();
            }
        }
    });
    builder.create().show();

    3、自定义对话框 修改宽度、高度

    编写一个对话框样式,这里可以修改颜色,有了这个样式,对话框才可以自定义宽度和高度(如果不考虑宽高的话,这步可以省略):

    <style name="DialogShareTheme" parent="Theme.AppCompat.Dialog">
        <item name="android:background">@color/white</item>
        <item name="android:windowBackground">@color/transparent</item>
    </style>

    接着,编写自定义对话框的布局文件:dialog.xml

    <?xml version="1.0" encoding="utf-8"?>
    <android.support.constraint.ConstraintLayout
        xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:app="http://schemas.android.com/apk/res-auto"
        android:layout_width="match_parent"
        android:layout_height="match_parent">
    
        <Button
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:text="Test"
            app:layout_constraintBottom_toBottomOf="parent"
            app:layout_constraintEnd_toEndOf="parent"
            app:layout_constraintStart_toStartOf="parent"
            app:layout_constraintTop_toTopOf="parent" />
    
    </android.support.constraint.ConstraintLayout>

    最后,就可以在java中设置其宽度高度了:

    AlertDialog.Builder dialogBuilder = new AlertDialog.Builder(ProductionInformationActivity.this, R.style.DialogShareTheme); //加入样式
    final View dialogView = LayoutInflater.from(ProductionInformationActivity.this).inflate(R.layout.dialog,null);  //加入布局
    dialogBuilder.setView(dialogView);
    Dialog dialog = dialogBuilder.create();
    dialog.getWindow().setGravity(Gravity.BOTTOM);
    dialog.show();
    WindowManager.LayoutParams p = dialog.getWindow().getAttributes();
    p.width = MyApp.getScreenWidth(this); //设置dialog的宽度为当前手机屏幕的宽度
    dialog.getWindow().setAttributes(p);

    4、将对话框修改成圆角的(或修改颜色):

    定义一个shape文件,然后就可以在java中使用了:

    Window window = dialog_demo.getWindow();
    window.setBackgroundDrawable(getDrawable(R.drawable.shape_dialog_demo));

    也可以在style中定义对话框的背景为纯透明,然后在其布局文件中修改圆角;

    5、给对话框添加动画:

    先添加一个动画文件(res->anim文件夹中),文件名为a.xml

    <?xml version="1.0" encoding="utf-8"?>
    <set xmlns:android="http://schemas.android.com/apk/res/android">
    
        <scale xmlns:android="http://schemas.android.com/apk/res/android"
            android:duration="3000"
            android:fromXScale="0.0"
            android:fromYScale="0.0"
            android:pivotX="50%"
            android:pivotY="50%"
            android:toXScale="1.0"
            android:toYScale="1.0">
        </scale>
    
    </set>

    接着在style.xml文件中加上:

    //对话框动画
    <style name="dialog_animation" parent="@android:style/Animation.Dialog">
        <item name="android:windowEnterAnimation">@anim/a</item>
        <!--<item name="android:windowExitAnimation">@anim/a</item>-->
    </style>

    最后在java中调用:

    Window window = dialog.getWindow();
    window.setWindowAnimations(R.style.dialog_animation);

    6、弹出时Activity背景不变暗

    01:在style 的xml 里 设置如下
    <resources>
        <style name="dialog" parent="@android:style/Theme.Dialog">
            <item name="android:backgroundDimEnabled">false</item><!--activity不变暗-->
        </style>
    </resources>
    设置为true, 背景变暗

    Dialog = new Dialog(Activity, R.style.dialog);

    02:在代码中 可以这么设置
    Window mWindow = getWindow();  
    WindowManager.LayoutParams lp = mWindow.getAttributes();  
    lp.dimAmount =0f;
    背景就不会变暗了

    7、控制对话框的出现位置

    WindowManager.LayoutParams params = window.getAttributes(); 获取window 的params 然后给params去设置x y 参数即可 我们设置的 x y 是相对值 相对自身位置的偏移量 负值无效(显而易见 x 是代表水平方向的偏移 y 代表竖直方向的偏移) 

    简单举个栗子

      * 当参数值包含Gravity.LEFT时,对话框出现在左边,所以params.x就表示相对左边的偏移

        * 当参数值包含Gravity.RIGHT时,对话框出现在右边,所以params.x就表示相对右边的偏移

        * 当参数值包含Gravity.TOP时,对话框出现在上边,所以params.y就表示相对上边的偏移

        * 当参数值包含Gravity.BOTTOM时,对话框出现在下边,所以params.y就表示相对下边的偏移

    注意 负值无效

    还是刚才那个需求 我有一个dialog 想让它显示在距离顶部100 的位置

    AlertDialog.Builder builder = new AlertDialog.Builder(getActivity()); 
    
    View view = LayoutInflater.from(getActivity()).inflate(R.layout.home_identity_choose_window, null); 
    
    builder.setView(view); 
    
    titleDialog = builder.create(); 
    
    Window window = titleDialog.getWindow(); 
    
    WindowManager.LayoutParams params = window.getAttributes(); 
    
    params.x = 10; 
    
    params.y = 100; 
    
    params.width = 220; 
    
    params.height = 200; 
    
    window.setAttributes(params); 
    
    titleDialog.show(); 
    
    window.setGravity(Gravity.TOP);
    
    
  • 相关阅读:
    C++程序设计入门--前言
    C++ string_view 的坑
    从OGRE,GAMEPLAY3D,COCOS2D-X看开源
    抽烟解闷的程序员
    一个团队应该是什么样
    准备开始接手公司的项目
    两位印象深刻的同事
    一段故事结束,一段生活开始
    starling性能优化总结(毫无疑问还是转载)
    知道端口号如何查看应用位置
  • 原文地址:https://www.cnblogs.com/zhaozilongcjiajia/p/10838873.html
Copyright © 2011-2022 走看看