dialog工具类 强大!!!

dialog工具类:

import android.app.Activity;
import android.app.Dialog;
import android.content.Context;
import android.graphics.Bitmap;
import android.util.SparseArray;
import android.view.Display;
import android.view.Gravity;
import android.view.LayoutInflater;
import android.view.View;
import android.view.Window;
import android.view.WindowManager;
import android.widget.ImageView;
import android.widget.TextView;

import com.nostra13.universalimageloader.core.DisplayImageOptions;
import com.nostra13.universalimageloader.core.ImageLoader;
import com.nostra13.universalimageloader.core.assist.FailReason;
import com.nostra13.universalimageloader.core.assist.ImageScaleType;
import com.nostra13.universalimageloader.core.listener.ImageLoadingListener;


/**
 * Created by 51644 on 2017/7/20.
 */

public abstract class DialogUtils {
    private Activity activity;
    private int xmlLayout;
    private Dialog dialog = null;

    public DialogUtils(Activity activity, int xmlLayout) {
        this.activity = activity;
        this.xmlLayout = xmlLayout;
        createDialogView();
    }

    private void createDialogView() {
        dialog = new Dialog(activity, R.style.PhotoDialog);
        final ViewHepler viewHepler = getViewHepler();
        initLayout(viewHepler, dialog);
        dialog.setContentView(viewHepler.getContentView());
        Window dialogWindow = dialog.getWindow();
        WindowManager.LayoutParams lp = dialogWindow.getAttributes();
        dialogWindow.setGravity(Gravity.CENTER);
        //将对话框的大小按屏幕大小的百分比设置
        WindowManager m = activity.getWindowManager();
        Display d = m.getDefaultDisplay(); // 获取屏幕宽、高用
        WindowManager.LayoutParams p = dialogWindow.getAttributes(); // 获取对话框当前的参数值

        p.height = WindowManager.LayoutParams.WRAP_CONTENT;
        p.width = WindowManager.LayoutParams.WRAP_CONTENT;
        dialogWindow.setAttributes(p);
//        android Activity改成dialog样式后 怎设置点击空白处关闭窗体,如图点击窗体意外的地方关闭窗体
        dialog.setCanceledOnTouchOutside(true);
        dialog.setCancelable(true);
        dialog.show();
    }


    public abstract void initLayout(ViewHepler hepler, Dialog dialog);

    private ViewHepler getViewHepler()
    {
        return ViewHepler.get(activity,xmlLayout);
    }


    public  static class ViewHepler {
        private final SparseArray<View> mViews;
        private View mConvertView;
        private  static ViewHepler viewHepler = null;

        private ViewHepler(Context context, int layoutId) {
            this.mViews = new SparseArray<View>();
            mConvertView = LayoutInflater.from(context).inflate(layoutId, null);
        }
        public static ViewHepler get(Context context,int layoutId)
        {
            if (viewHepler == null)
            {
                viewHepler = new ViewHepler(context, layoutId);
            }
            return viewHepler;
        }

        public View getContentView(){
            return mConvertView;
        }


        /**
         * 通过控件的Id获取对于的控件,如果没有则加入views
         * @param viewId
         * @return
         */
        public <T extends View> T getView(int viewId)
        {
            View view = mViews.get(viewId);
            if (view == null)
            {
                view = mConvertView.findViewById(viewId);
                mViews.put(viewId, view);
            }
            return (T) view;
        }

        /**
         * 为TextView设置字符串
         *
         * @param viewId
         * @param text
         * @return
         */
        public ViewHepler setText(int viewId, String text)
        {
            if(text==null){
                text = "";
            }
            TextView view = getView(viewId);
            view.setText(text);
            return this;
        }
        /**
         * 为ImageView设置图片
         *
         * @param viewId
         * @param drawableId
         * @return
         */
        public ViewHepler setImageResource(int viewId, int drawableId)
        {
            ImageView view = getView(viewId);
            view.setImageResource(drawableId);

            return this;
        }

        /**
         * 为ImageView设置图片
         *
         * @param viewId
         * @param bm
         * @return
         */
        public ViewHepler setImageBitmap(int viewId, Bitmap bm)
        {
            ImageView view = getView(viewId);
            view.setImageBitmap(bm);
            return this;
        }

        /**
         * 为ImageView设置图片
         *
         * @param viewId
         * @param url
         * @return
         */
        public ViewHepler setImageByUrl(int viewId, String url)
        {
            final ImageView imageView = getView(viewId);
            DisplayImageOptions options = new DisplayImageOptions.Builder()
                    .cacheInMemory(true)//设置下载的图片是否缓存在内存中
                    .cacheOnDisk(true)//设置下载的图片是否缓存在SD卡中
                    .imageScaleType(ImageScaleType.IN_SAMPLE_INT)//设置图片以如何的编码方式显示
                    .bitmapConfig(Bitmap.Config.RGB_565)//设置图片的解码类型
                    //  .displayer(new RoundedBitmapDisplayer(20))  // 设置成圆角图片
                    .build();

            ImageLoader.getInstance().loadImage(url,options, new ImageLoadingListener() {
                @Override
                public void onLoadingStarted(String s, View view) {

                }

                @Override
                public void onLoadingFailed(String s, View view, FailReason failReason) {

                }

                @Override
                public void onLoadingComplete(String s, View view, Bitmap bitmap) {
                    imageView.setImageBitmap(bitmap);
                }

                @Override
                public void onLoadingCancelled(String s, View view) {

                }
            });
            return this;
        }

        private View.OnClickListener mListener;


        public  void setViewClick(int viewId,final ViewClickCallBack callBack){
            View view = mViews.get(viewId);
            if (view == null)
            {
                view = mConvertView.findViewById(viewId);
                mViews.put(viewId, view);
            }

            view.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    callBack.doClickAction(v);
                }
            });
        }
        public static interface ViewClickCallBack {
            public void doClickAction(View v);
        }

    }
}

使用方法:

new DialogUtils(MainActivity.this, R.layout.dialog_view) {
            @Override
            public void initLayout(ViewHepler hepler, final Dialog dialog) {
                //加载文字
                hepler.setText(R.id.tv_close, "提示:");
                hepler.setText(R.id.tv_hint, "内容test内容test内容test内容test内容test");

                // 加载Resource图片
                hepler.setImageResource(R.id.img_cancel,R.drawable.ic_cancel);
                //加载网络图片
                hepler.setImageByUrl(R.id.img_content,"http://img3.imgtn.bdimg.com/it/u=2730707097,3811913056&fm=26&gp=0.jpg");

                //加载点击事件
                hepler.setViewClick(R.id.img_cancel, new ViewHepler.ViewClickCallBack() {
                    @Override
                    public void doClickAction(View v) {
                        dialog.dismiss();
                    }
                });
                hepler.setViewClick(R.id.tv_cancel, new ViewHepler.ViewClickCallBack() {
                    @Override
                    public void doClickAction(View v) {
                        dialog.dismiss();
                    }
                });
                hepler.setViewClick(R.id.tv_ok, new ViewHepler.ViewClickCallBack() {
                    @Override
                    public void doClickAction(View v) {
                        Toast.makeText(MainActivity.this,"确定",Toast.LENGTH_SHORT).show();
                    }
                });
            }
        };

项目地址:@ 项目地址
欢迎关注我Github : @ 我的github

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
### 回答1: Qt 中可以使用 QtDialog 和 UI 来制作一个简单的计算器。 首先,我们可以创建一个 QtDialog 窗口来作为我们的计算器界面。通过继承 QDialog 类并实现需要的功能,我们可以自定义计算器的布局和交互。例如,我们可以在窗口中添加数字按钮、运算符按钮和显示结果的文本框。 接着,我们可以使用 Qt 的可视化设计工具来创建一个 UI 文件,用于定义计算器界面的布局和元素。在 UI 文件中,我们可以方便地拖拽和调整各个按钮和文本框的位置和大小。然后,我们可以将 UI 文件与 QtDialog 类关联起来,实现计算器界面和功能的绑定。 在 QtDialog 类的代码中,我们可以使用 Qt 的信号与槽机制来处理按钮的点击事件和计算逻辑。通过将按钮的点击信号与对应的槽函数连接起来,我们可以在用户点击按钮时执行相应的操作,比如将按钮的文本添加到计算表达式中,或者进行计算并显示结果。 最后,为了完成计算器的功能,我们还需要定义各个按钮的槽函数。这些槽函数可以使用 Qt 提供的 QRegularExpression 类来解析用户输入的表达式,并调用相应的计算函数进行计算。计算结果可以显示在文本框中,并根据需要进行格式化和处理。 通过以上步骤,我们可以使用 QtDialog 和 UI 来制作一个简单的计算器。这样做的好处是可以方便地在界面上进行布局和设计,同时可以利用 Qt 的信号与槽机制实现计算器的功能。此外,Qt 还提供了丰富的界面控件和功能模块,可以进一步扩展计算器的功能,使其更加实用和易用。 ### 回答2: 在Qt中,我们可以使用Qt Dialog 和 Qt UI设计来创建一个简单的计算器。 首先,我们需要创建一个新的Qt项目,并添加一个Qt Dialog部件。这个对话框将用于容纳我们的计算器界面。 接下来,我们需要在Qt Designer中设计计算器的用户界面。我们可以使用布局管理器来放置按钮、标签和文本框等控件。可以添加按钮来实现数字和操作符的输入,并添加一个结果文本框来显示计算结果。 在Qt代码中,我们首先需要使用Qt的信号和槽机制来连接按钮和计算函数。我们可以将按钮点击事件与槽函数进行连接,槽函数将根据按钮的文本执行相应的操作。 例如,当我们点击数字按钮时,应该将对应的数字追加到文本框中。当我们点击操作符按钮时,应该将对应的操作符存储起来。 接下来,我们需要实现一个计算函数来处理用户输入的表达式。我们可以使用eval()函数来动态计算表达式的值,并将结果显示在文本框中。 最后,我们需要将计算器界面显示在屏幕上。我们可以使用QDialog::exec()函数来显示对话框,并等待用户关闭计算器。 综上所述,通过使用Qt Dialog和Qt UI设计,我们可以创建一个简单的计算器。这个计算器可以处理用户的输入,并显示计算结果。同时,我们还可以根据需要进行扩展,添加更多的功能和操作。 ### 回答3: Qt是一个广泛使用的C++开发框架,可以用于开发跨平台的应用程序。在Qt中,我们可以使用QtDialog和UI来构建计算器应用程序。 首先,我们需要创建一个新的Qt项目。通过Qt Creator创建一个新的Qt Widgets应用程序项目。然后,我们可以在Qt Creator的主窗口中看到设计和代码视图。 在设计视图中,我们可以使用Qt的可视化设计器来创建计算器界面。可以添加按钮、文本框和标签等UI控件,并将它们排列成适当的布局。可以将这些UI控件命名为btn_0、btn_1、btn_2等等,以便在代码中引用。可以通过设置按钮的clicked信号来连接到相应的槽函数,以便在用户点击按钮时进行响应。 在代码视图中,我们可以使用Qt的信号和槽机制来处理UI控件的操作和交互。可以通过继承QDialog类来创建一个自定义对话框类,将其作为应用程序的主窗口。可以在自定义对话框类中定义计算器的逻辑和功能。例如,可以为每个数字按钮创建一个槽函数,以便在用户点击它们时将数字显示在文本框中。可以为运算符按钮创建槽函数,以便在用户点击它们时执行相应的计算操作。可以为等号按钮创建一个槽函数,以便在用户点击它时计算结果并显示在文本框中。 在槽函数中,可以使用Qt的QString类来操作和处理计算器的输入和输出。可以使用QString的toInt()、toDouble()等函数将文本转换为数字,并使用QString的arg()函数将结果转换为字符串。 最后,可以在主函数中实例化自定义对话框类,并调用show()函数将它显示出来。这样,当用户运行应用程序时,就会看到一个具有按钮和文本框的计算器界面。 总之,使用QtDialog和UI来制作计算器可以充分利用Qt的功能和特性,简化开发过程并创建出功能强大且美观的界面。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值