精华内容
下载资源
问答
  • 做IM编辑聊天界面时,当点击输入框弹出软键盘时,只有聊天内容随之上移并显示最后一条消息。 如图所示 问题 当点击输入框弹出软键盘后,键盘会遮挡住RecyclerView的部分内容。 如图所示 解决方法 设置...

    需求

    做IM编辑聊天界面时,当点击输入框弹出软键盘时,只有聊天内容随之上移并显示最后一条消息。
    如图所示
    这里写图片描述

    问题

    当点击输入框弹出软键盘后,键盘会遮挡住RecyclerView的部分内容。
    如图所示
    这里写图片描述

    解决方法

    设置LayoutManager的此方法setStackFromEnd(true)

    //软键盘弹出RecyclerView会随之上移
    linearLayoutManager.setStackFromEnd(true);

    扩展

    当弹出软键盘时,使整个Activity随之上移。

    一、在对应Activity的manifest中设置属性android:windowSoftInputMode="adjustPan"

     <activity android:name=".activity.ChatActivity"
        android:windowSoftInputMode="adjustPan"  />

    二、在对应Activity的setContentView()之前设置

    getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_PAN); 

    这样设置因为整个Activity都会上移,所以actionBar也会随之上移而消失,并且输入框也会有部分遮挡。原因未知,希望有大神指点。
    效果如图
    这里写图片描述

    展开全文
  • Winform窗口弹出位置设置

    千次阅读 2018-09-12 16:47:45
    Winform窗口弹出位置控制 窗体的弹出位置可以由属性StartPosition来指定,默认值有: Manural 自定义,由属性Location指定; CenterScreen 屏幕中央; WindowsDefaultBounds 系统默认位置(但大小为系统默认...

    Winform窗口弹出位置控制
    窗体的弹出位置可以由属性StartPosition来指定,默认值有:

    Manural  自定义,由属性Location指定;

    CenterScreen  屏幕中央;

    WindowsDefaultBounds   系统默认位置(但大小为系统默认窗体大小)

    WindowsDefaultLocation  系统默认位置(大小由属性Size指定)

    CenterParent  父窗体中央

    指定窗体显示位置的代码:

    this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen;

    若自定义窗体显示位置,则属性StartPosition选择Manural,然后指定属性Location的坐标值。

    代码实现:

    this.Location = new System.Drawing.Point(100,100);

    实现窗体在屏幕右下角显示:

    经常看到有的软件在屏幕右下角弹出消息窗,用下面的代码可以简单实现:

    public Form1()
    {
    InitializeComponent();
    //获取当前工作区宽度和高度(工作区不包含状态栏)
    int ScreenWidth = Screen.PrimaryScreen.WorkingArea.Width;
    int ScreenHeight = Screen.PrimaryScreen.WorkingArea.Height;
    //计算窗体显示的坐标值,可以根据需要微调几个像素
    int x = ScreenWidth - this.Width - 5;
    int y = ScreenHeight - this.Height - 5;
    this.Location = new Point(x,y);
    }
    展开全文
  • Android 多种简单的弹出框样式设置

    千次阅读 2018-04-01 16:51:00
    简介这是一个基于AlertDialog和Dialog这两个类封装的多种弹出框样式,其中提供各种简单样式的弹出框使用说明。同时也可自定义弹出框。项目地址:https://github.com/Liumce/jjdxm_dialogui特性1.使用链式开发代码...

    简介

    这是一个基于AlertDialog和Dialog这两个类封装的多种弹出框样式,其中提供各种简单样式的弹出框使用说明。同时也可自定义弹出框。

    项目地址:https://github.com/Liumce/jjdxm_dialogui

    特性

    1.使用链式开发代码简洁明了
    2.所有的弹出框样式都在DialogUIUtils这个类中完成,方便查阅方法
    3.可以自定义弹出框字体样式
    4.简单的类似加载框的样式可以支持两种主题更改默认白色和灰色

    截图








    demo下载

    demo apk下载

    Download or grab via Maven:

    <dependency>
      <groupId>com.dou361.dialogui</groupId>
      <artifactId>jjdxm-dialogui</artifactId>
      <version>x.x.x</version>
    </dependency>
    

    or Gradle:

    compile 'com.dou361.dialogui:jjdxm-dialogui:x.x.x'
    

    历史版本:

    compile 'com.dou361.dialogui:jjdxm-dialogui:1.0.1'
    compile 'com.dou361.dialogui:jjdxm-dialogui:1.0.0'
    

    jjdxm-dialogui requires at minimum Java 9 or Android 2.3.


    架包的打包引用以及冲突解决

    代码混淆

    根据你的混淆器配置和使用,您可能需要在你的proguard文件内配置以下内容:

    -keep class com.dou361.** {
    *;
    }
    

    AndroidStudio代码混淆注意的问题

    快速开始

    step1

    如果需要使用toast类,采用单例模式的,多次调用toast后只会显示一个,需要初始化DialogUIUtils类,否则会抛异常,使用前初始化即可,代码如下

    DialogUIUtils.init(appContext);
    

    step2

    如果不需要使用toast类,可以不操作step1,直接使用相对于的弹出框即可。以下分别是部分弹出框的调用代码案例。

    自定义弹出框

    /**
     * 自定义弹出框 默认居中可取消可点击
     *
     * @param context     上下问
     * @param contentView 自定义view
     * @return
     */
    public static BuildBean showCustomAlert(Context context, View contentView)
    
    /**
     * 自定义弹出框 默认可取消可点击
     *
     * @param context     上下文
     * @param contentView 自定义view
     * @param gravity     显示window的位置例如Gravity.center
     * @return
     */
    public static BuildBean showCustomAlert(Context context, View contentView, int gravity)
    
    /***
     * 自定义弹出框
     *
     * @param context          上下文
     * @param contentView      自定义view
     * @param gravity          显示window的位置例如Gravity.center
     * @param cancleable       true为可以取消false为不可取消
     * @param outsideTouchable true为可以点击空白区域false为不可点击
     * @return
     */
    public static BuildBean showCustomAlert(Context context, View contentView, int gravity, boolean cancleable, boolean outsideTouchable)
    

    具体使用

    View rootView = View.inflate(activity, R.layout.custom_dialog_layout, null);
    DialogUIUtils.showCustomAlert(this, rootView).show();
    

    弹出toast

    /**
     * 弹出toast 默认白色背景可取消可点击
     *
     * @param context 上下文
     * @param msg     提示文本
     */
    public static BuildBean showToastTie(Context context, CharSequence msg) 
    
    /**
     * 弹出toast 默认可取消可点击
     *
     * @param context   上下文
     * @param msg       提示文本
     * @param isWhiteBg true为白色背景false为灰色背景
     */
    public static BuildBean showToastTie(Context context, CharSequence msg, boolean isWhiteBg) 
    
    /**
     * 弹出toast
     *
     * @param context          上下文
     * @param msg              提示文本
     * @param cancleable       true为可以取消false为不可取消
     * @param outsideTouchable true为可以点击空白区域false为不可点击
     * @param isWhiteBg        true为白色背景false为灰色背景
     */
    public static BuildBean showToastTie(Context context, CharSequence msg, boolean cancleable, boolean outsideTouchable, boolean isWhiteBg)
    

    具体使用

    DialogUIUtils.showToastTie(this, "加载中...").show();
    

    横向加载框

    /**
     * 横向加载框 默认白色背景可取消可点击
     *
     * @param context 上下文
     * @param msg     提示文本
     */
    public static BuildBean showLoadingHorizontal(Context context, CharSequence msg)
    
    /**
     * 横向加载框 默认可取消可点击
     *
     * @param context   上下文
     * @param msg       提示文本
     * @param isWhiteBg true为白色背景false为灰色背景
     */
    public static BuildBean showLoadingHorizontal(Context context, CharSequence msg, boolean isWhiteBg)
    
    /**
     * 横向加载框
     *
     * @param context          上下文
     * @param msg              提示文本
     * @param cancleable       true为可以取消false为不可取消
     * @param outsideTouchable true为可以点击空白区域false为不可点击
     * @param isWhiteBg        true为白色背景false为灰色背景
     */
    public static BuildBean showLoadingHorizontal(Context context, CharSequence msg, boolean cancleable, boolean outsideTouchable, boolean isWhiteBg)
    

    具体使用

    DialogUIUtils.showLoadingHorizontal(this, "加载中...").show();
    

    md风格横向加载框

    /**
     * md风格横向加载框 默认白色背景可取消可点击
     *
     * @param context 上下文
     * @param msg     提示文本
     */
    public static BuildBean showMdLoadingHorizontal(Context context, CharSequence msg)
    
    /**
     * md风格横向加载框 默认可取消可点击
     *
     * @param context   上下文
     * @param msg       提示文本
     * @param isWhiteBg true为白色背景false为灰色背景
     */
    public static BuildBean showMdLoadingHorizontal(Context context, CharSequence msg, boolean isWhiteBg) 
    
    /**
     * md风格横向加载框
     *
     * @param context          上下文
     * @param msg              提示文本
     * @param cancleable       true为可以取消false为不可取消
     * @param outsideTouchable true为可以点击空白区域false为不可点击
     * @param isWhiteBg        true为白色背景false为灰色背景
     */
    public static BuildBean showMdLoadingHorizontal(Context context, CharSequence msg, boolean cancleable, boolean outsideTouchable, boolean isWhiteBg) 
    

    具体使用

    DialogUIUtils.showMdLoadingHorizontal(this, "加载中...").show();
    

    竖向加载框

    /**
     * 竖向加载框  默认白色背景可取消可点击
     *
     * @param context 上下文
     * @param msg     提示文本
     */
    public static BuildBean showLoadingVertical(Context context, CharSequence msg) 
    
    /**
     * 竖向加载框 默认可取消可点击
     *
     * @param context   上下文
     * @param msg       提示文本
     * @param isWhiteBg true为白色背景false为灰色背景
     */
    public static BuildBean showLoadingVertical(Context context, CharSequence msg, boolean isWhiteBg) 
    
    /**
     * 竖向加载框
     *
     * @param context          上下文
     * @param msg              提示文本
     * @param cancleable       true为可以取消false为不可取消
     * @param outsideTouchable true为可以点击空白区域false为不可点击
     * @param isWhiteBg        true为白色背景false为灰色背景
     */
    public static BuildBean showLoadingVertical(Context context, CharSequence msg, boolean cancleable, boolean outsideTouchable, boolean isWhiteBg) 
    

    具体使用

    DialogUIUtils.showLoadingVertical(this, "加载中...").show();
    

    md风格竖向加载框

    /**
     * md风格竖向加载框  默认白色背景可取消可点击
     *
     * @param context 上下文
     * @param msg     提示文本
     */
    public static BuildBean showMdLoadingVertical(Context context, CharSequence msg)
    
    /**
     * md风格竖向加载框 默认可取消可点击
     *
     * @param context   上下文
     * @param msg       提示文本
     * @param isWhiteBg true为白色背景false为灰色背景
     */
    public static BuildBean showMdLoadingVertical(Context context, CharSequence msg, boolean isWhiteBg)
    
    /**
     * md风格竖向加载框
     *
     * @param context          上下文
     * @param msg              提示文本
     * @param cancleable       true为可以取消false为不可取消
     * @param outsideTouchable true为可以点击空白区域false为不可点击
     * @param isWhiteBg        true为白色背景false为灰色背景
     */
    public static BuildBean showMdLoadingVertical(Context context, CharSequence msg, boolean cancleable, boolean outsideTouchable, boolean isWhiteBg)
    

    具体使用

    DialogUIUtils.showMdLoadingVertical(this, "加载中...").show();
    

    md风格弹出框

    /***
     * md风格弹出框 默认可取消可点击
     *
     * @param activity 所在activity
     * @param title    标题 不传则无标题
     * @param msg      消息
     * @param listener 事件监听
     * @return
     */
    public static BuildBean showMdAlert(Activity activity, CharSequence title, CharSequence msg, DialogUIListener listener)
    
    /***
     * md风格弹出框
     *
     * @param activity         所在activity
     * @param title            标题 不传则无标题
     * @param msg              消息
     * @param cancleable       true为可以取消false为不可取消
     * @param outsideTouchable true为可以点击空白区域false为不可点击
     * @param listener         事件监听
     * @return
     */
    public static BuildBean showMdAlert(Activity activity, CharSequence title, CharSequence msg, boolean cancleable, boolean outsideTouchable, DialogUIListener listener)
    

    具体使用

    DialogUIUtils.showMdAlert(activity, "标题", "文本内容", new DialogUIListener() {
                    @Override
                    public void onPositive() {
                        
                    }
    
                    @Override
                    public void onNegative() {
                        
                    }
    
                }).show();
    

    md风格多选框

    /**
     * md风格多选框  默认可取消可点击
     *
     * @param activity     所在activity
     * @param title        标题 不传则无标题
     * @param words        消息数组
     * @param checkedItems 默认选中项
     * @param listener     事件监听
     */
    public static BuildBean showMdMultiChoose(Activity activity, CharSequence title, CharSequence[] words, boolean[] checkedItems, DialogUIListener listener)
    
    /***
     * md风格多选框
     *
     * @param activity         所在activity
     * @param title            标题 不传则无标题
     * @param words            消息数组
     * @param checkedItems     默认选中项
     * @param cancleable       true为可以取消false为不可取消
     * @param outsideTouchable true为可以点击空白区域false为不可点击
     * @param listener         事件监听
     * @return
     */
    public static BuildBean showMdMultiChoose(Activity activity, CharSequence title, CharSequence[] words, boolean[] checkedItems, boolean cancleable, boolean outsideTouchable, DialogUIListener listener)
    

    具体使用

    String[] words = new String[]{"1", "2", "3"};
                boolean[] choseDefault = new boolean[]{false, false, false};
                DialogUIUtils.showMdMultiChoose(activity, "标题", words, choseDefault, new DialogUIListener() {
                    @Override
                    public void onPositive() {
    
                    }
    
                    @Override
                    public void onNegative() {
    
                    }
                }).show();
    

    单选框

    /**
     * 单选框  默认可取消可点击
     *
     * @param activity      所在activity
     * @param title         标题 不传则无标题
     * @param defaultChosen 默认选中项
     * @param words         消息数组
     * @param listener      事件监听
     */
    public static BuildBean showSingleChoose(Activity activity, CharSequence title, int defaultChosen, CharSequence[] words, DialogUIItemListener listener) 
    
    /**
     * 单选框
     *
     * @param activity         所在activity
     * @param title            标题 不传则无标题
     * @param defaultChosen    默认选中项
     * @param words            消息数组
     * @param cancleable       true为可以取消false为不可取消
     * @param outsideTouchable true为可以点击空白区域false为不可点击
     * @param listener         事件监听
     */
    public static BuildBean showSingleChoose(Activity activity, CharSequence title, int defaultChosen, CharSequence[] words, boolean cancleable, boolean outsideTouchable, DialogUIItemListener listener) 
    

    具体使用

    String[] words2 = new String[]{"1", "2", "3"};
                    DialogUIUtils.showSingleChoose(activity, "单选", 0, words2, new DialogUIItemListener() {
                        @Override
                        public void onItemClick(CharSequence text, int position) {
                            showToast(text + "--" + position);
                        }
                    }).show();
    

    提示弹出框

    /**
     * 提示弹出框 默认可取消可点击
     *
     * @param activity 所在activity
     * @param title    标题 不传则无标题
     * @param listener 事件监听
     */
    public static BuildBean showAlert(Activity activity, CharSequence title, CharSequence msg, DialogUIListener listener)
    
    /**
     * 提示弹出框
     *
     * @param activity         所在activity
     * @param title            标题 不传则无标题
     * @param cancleable       true为可以取消false为不可取消
     * @param outsideTouchable true为可以点击空白区域false为不可点击
     * @param listener         事件监听
     */
    public static BuildBean showAlert(Activity activity, CharSequence title, CharSequence msg, boolean cancleable, boolean outsideTouchable, DialogUIListener listener)
    

    具体使用

    DialogUIUtils.showAlert(activity, "标题", "文本内容", new DialogUIListener() {
                    @Override
                    public void onPositive() {
                        
                    }
    
                    @Override
                    public void onNegative() {
                        
                    }
    
                }).show();
    

    横向弹出框

    /**
     * 横向弹出框  默认可取消可点击
     *
     * @param activity 所在activity
     * @param title    标题 不传则无标题
     * @param msg      消息
     * @param listener 事件监听
     */
    public static BuildBean showAlertHorizontal(Context activity, CharSequence title, CharSequence msg, DialogUIListener listener) 
    
    /**
     * 横向弹出框
     *
     * @param activity         所在activity
     * @param title            标题 不传则无标题
     * @param msg              消息
     * @param cancleable       true为可以取消false为不可取消
     * @param outsideTouchable true为可以点击空白区域false为不可点击
     * @param listener         事件监听
     */
    public static BuildBean showAlertHorizontal(Context activity, CharSequence title, CharSequence msg, boolean cancleable, boolean outsideTouchable, DialogUIListener listener)
    

    具体使用

    DialogUIUtils.showAlertHorizontal(activity, "标题", "文本内容", new DialogUIListener() {
                    @Override
                    public void onPositive() {
                        
                    }
    
                    @Override
                    public void onNegative() {
                        
                    }
    
                }).show();
    

    竖向弹出框

    /**
     * 竖向弹出框  默认可取消可点击
     *
     * @param activity 所在activity
     * @param title    标题 不传则无标题
     * @param msg      消息
     * @param listener 事件监听
     */
    public static BuildBean showAlertVertical(Context activity, CharSequence title, CharSequence msg, DialogUIListener listener)
    
    /**
     * 竖向弹出框
     *
     * @param activity         所在activity
     * @param title            标题 不传则无标题
     * @param msg              消息
     * @param cancleable       true为可以取消false为不可取消
     * @param outsideTouchable true为可以点击空白区域false为不可点击
     * @param listener         事件监听
     */
    public static BuildBean showAlertVertical(Context activity, CharSequence title, CharSequence msg, boolean cancleable, boolean outsideTouchable, DialogUIListener listener)
    

    具体使用

    DialogUIUtils.showAlertVertical(activity, "标题", "文本内容", new DialogUIListener() {
                    @Override
                    public void onPositive() {
                        
                    }
    
                    @Override
                    public void onNegative() {
                        
                    }
    
                }).show();
    

    中间弹出列表

    /**
     * 中间弹出列表 默认可取消可点击
     *
     * @param context  上下文
     * @param words    素组集合
     * @param listener 事件监听
     * @return
     */
    public static BuildBean showCenterSheet(Context context, List<? extends CharSequence> words, DialogUIItemListener listener)
    
    /***
     * 中间弹出列表
     *
     * @param context          上下文
     * @param words            素组集合
     * @param cancleable       true为可以取消false为不可取消
     * @param outsideTouchable true为可以点击空白区域false为不可点击
     * @param listener         事件监听
     * @return
     */
    public static BuildBean showCenterSheet(Context context, List<? extends CharSequence> words, boolean cancleable, boolean outsideTouchable, DialogUIItemListener listener)
    

    具体使用

    List<String> strings = new ArrayList<>();
                strings.add("1");
                strings.add("2");
                strings.add("3");
                DialogUIUtils.showCenterSheet(activity, strings, new DialogUIItemListener() {
                    @Override
                    public void onItemClick(CharSequence text, int position) {
                    }
    
                    @Override
                    public void onBottomBtnClick() {
                    }
                }).show();
    

    带取消的底部弹出列表

    /**
     * 带取消的底部弹出列表 默认可取消可点击
     *
     * @param context   上下文
     * @param words     素组集合
     * @param bottomTxt 底部按钮文本
     * @param listener  事件监听
     * @return
     */
    public static BuildBean showBottomSheetAndCancel(Context context, List<? extends CharSequence> words, CharSequence bottomTxt, DialogUIItemListener listener)
    
    /***
     * 带取消的底部弹出列表
     *
     * @param context          上下文
     * @param words            素组集合
     * @param bottomTxt        底部按钮文本
     * @param cancleable       true为可以取消false为不可取消
     * @param outsideTouchable true为可以点击空白区域false为不可点击
     * @param listener         事件监听
     * @return
     */
    public static BuildBean showBottomSheetAndCancel(Context context, List<? extends CharSequence> words, CharSequence bottomTxt, boolean cancleable, boolean outsideTouchable, DialogUIItemListener listener) 
    

    具体使用

    List<String> strings = new ArrayList<>();
                strings.add("1");
                strings.add("2");
                strings.add("3");
                DialogUIUtils.showBottomSheetAndCancel(activity, strings, "取消", new DialogUIItemListener() {
                    @Override
                    public void onItemClick(CharSequence text, int position) {
                    }
    
                    @Override
                    public void onBottomBtnClick() {
                    }
                }).show();
    

    底部弹出列表

    /**
     * 底部弹出列表 默认可取消可点击
     *
     * @param context  上下文
     * @param datas    集合需要BottomSheetBean对象
     * @param listener 事件监听
     * @return
     */
    public static BuildBean showBottomSheet(Activity context, List datas, DialogUIItemListener listener)
    
    /***
     * 底部弹出列表
     *
     * @param context          上下文
     * @param datas            集合需要BottomSheetBean对象
     * @param cancleable       true为可以取消false为不可取消
     * @param outsideTouchable true为可以点击空白区域false为不可点击
     * @param listener         事件监听
     * @return
     */
    public static BuildBean showBottomSheet(Activity context, List datas, boolean cancleable, boolean outsideTouchable, DialogUIItemListener listener)
    

    具体使用

    List<BottomSheetBean> datass = new ArrayList<>();
                datass.add(new BottomSheetBean(0, "1"));
                datass.add(new BottomSheetBean(0, "2"));
                datass.add(new BottomSheetBean(0, "3"));
                DialogUIUtils.showBottomSheet(this, datass, new DialogUIItemListener() {
                    @Override
                    public void onItemClick(CharSequence text, int position) {
    
                    }
                }).show();
    

    输入框

    /**
     * 输入框 默认可取消可点击
     *
     * @param context   上下文
     * @param title     标题
     * @param hint1     第一个文本框提示语
     * @param hint2     第二个文本框提示语
     * @param firstTxt  第一个按钮文本
     * @param secondTxt 第二个按钮文本
     * @param listener  事件监听
     * @return
     */
    public static BuildBean showAlertInput(Context context, CharSequence title, CharSequence hint1, CharSequence hint2, CharSequence firstTxt, CharSequence secondTxt, DialogUIListener listener)
    
    /***
     * 输入框
     *
     * @param context          上下文
     * @param title            标题
     * @param hint1            第一个文本框提示语
     * @param hint2            第二个文本框提示语
     * @param firstTxt         第一个按钮文本
     * @param secondTxt        第二个按钮文本
     * @param cancleable       true为可以取消false为不可取消
     * @param outsideTouchable true为可以点击空白区域false为不可点击
     * @param listener         事件监听
     * @return
     */
    public static BuildBean showAlertInput(Context context, CharSequence title, CharSequence hint1, CharSequence hint2, CharSequence firstTxt, CharSequence secondTxt, boolean cancleable, boolean outsideTouchable, DialogUIListener listener)
    

    具体使用

    DialogUIUtils.showAlertInput(activity, "登录", "请输入用户名", "请输入密码", "登录", "取消", new DialogUIListener() {
                    @Override
                    public void onPositive() {
    
                    }
    
                    @Override
                    public void onNegative() {
    
                    }
    
                    @Override
                    public void onGetInput(CharSequence input1, CharSequence input2) {
                    }
                }).show();
    

    md风格竖向底部弹出列表

    /**
     * md风格竖向底部弹出列表 默认可取消可点击
     *
     * @param context   上下文
     * @param title     标题
     * @param datas     集合需要BottomSheetBean对象
     * @param bottomTxt 底部item文本
     * @param listener  事件监听
     * @return
     */
    public static BuildBean showMdBottomSheetVertical(Context context, CharSequence title, List datas, CharSequence bottomTxt, DialogUIItemListener listener)
    
    /***
     * md风格竖向底部弹出列表
     *
     * @param context          上下文
     * @param title            标题
     * @param datas            集合需要BottomSheetBean对象
     * @param bottomTxt        底部item文本
     * @param cancleable       true为可以取消false为不可取消
     * @param outsideTouchable true为可以点击空白区域false为不可点击
     * @param listener         事件监听
     * @return
     */
    public static BuildBean showMdBottomSheetVertical(Context context, CharSequence title, List datas, CharSequence bottomTxt, boolean cancleable, boolean outsideTouchable, DialogUIItemListener listener) 
    

    具体使用

    List<BottomSheetBean> datass = new ArrayList<>();
                datass.add(new BottomSheetBean(0, "1"));
                datass.add(new BottomSheetBean(0, "2"));
                datass.add(new BottomSheetBean(0, "3"));
                DialogUIUtils.showMdBottomSheetVertical(this, datass, new DialogUIItemListener() {
                    @Override
                    public void onItemClick(CharSequence text, int position) {
    
                    }
                }).show();
    

    md风格横向底部弹出列表

    /**
     * md风格横向底部弹出列表 默认可取消可点击
     *
     * @param context          上下文
     * @param title            标题
     * @param datas            集合需要BottomSheetBean对象
     * @param bottomTxt        底部item文本
     * @param columnsNum       列数量
     * @param cancleable       true为可以取消false为不可取消
     * @param outsideTouchable true为可以点击空白区域false为不可点击
     * @param listener         事件监听
     * @return
     */
    public static BuildBean showMdBottomSheetHorizontal(Context context, CharSequence title, List datas, CharSequence bottomTxt, int columnsNum, DialogUIItemListener listener) 
    
    /***
     * md风格横向底部弹出列表
     *
     * @param context          上下文
     * @param title            标题
     * @param datas            集合需要BottomSheetBean对象
     * @param bottomTxt        底部item文本
     * @param columnsNum       列数量
     * @param cancleable       true为可以取消false为不可取消
     * @param outsideTouchable true为可以点击空白区域false为不可点击
     * @param listener         事件监听
     * @return
     */
    public static BuildBean showMdBottomSheetHorizontal(Context context, CharSequence title, List datas, CharSequence bottomTxt, int columnsNum, boolean cancleable, boolean outsideTouchable, DialogUIItemListener listener)
    

    具体使用

    List<BottomSheetBean> datass = new ArrayList<>();
                datass.add(new BottomSheetBean(0, "1"));
                datass.add(new BottomSheetBean(0, "2"));
                datass.add(new BottomSheetBean(0, "3"));
                DialogUIUtils.showMdBottomSheetHorizontal(this, datass, new DialogUIItemListener() {
                    @Override
                    public void onItemClick(CharSequence text, int position) {
    
                    }
                }).show();
    项目地址:github

    作者:jjdxmashl
    链接:https://www.jianshu.com/p/1921ce3e34fa
    來源:简书
    著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

    展开全文
  • 右键弹出菜单和快捷键的设置

    万次阅读 2015-04-25 13:53:19
    写MFC,少不了用到菜单和快捷键,此处我用到了右键菜单。我的项目是一个播放器的实现,那么在屏幕中央右键...想要实现右键点击播放器区域弹出菜单,需要响应右键按下的消息WM_RBUTTONDOWN,添加事件处理函数如下:vo

    写MFC,少不了用到菜单和快捷键,此处我用到了右键菜单。我的项目是一个播放器的实现,那么在屏幕中央右键点击,应该会弹出右键菜单,比如播放,暂停等,如我这样:
    右键

    对应的每一个菜单应该还有相应的快捷键。那么具体如何设置呢?此处我省略在资源中添加菜单的步骤了,我的菜单ID为IDR_MENU1。想要实现右键点击播放器区域弹出菜单,需要响应右键按下的消息WM_RBUTTONDOWN,添加事件处理函数如下:

    void CMyDlg::OnRButtonDown(UINT nFlags, CPoint point)
    {
        // TODO: 在此添加消息处理程序代码和/或调用默认值
        mypic_video.EnableWindow(FALSE);
    
    
        CMenu menu;
        menu.LoadMenuA(IDR_MENU1);
        CMenu *pPopup=menu.GetSubMenu(0);
        ClientToScreen(&point);//将客户区坐标转换为屏幕坐标
    
        //显示右键菜单,由视类窗口拥有。
        pPopup->TrackPopupMenu(nFlags,point.x,point.y,this);
        //TrackPopupMenu的最后一个参数,可以为GetParent让父窗口既框架窗口拥有右键菜单,这样
        //框架类窗口获得了对右键菜单中菜单项的命令响应,
        CDialogEx::OnRButtonDown(nFlags, point);
    }

    其中值得一说的函数是TrackPopupMenu函数,简单的讲就是它决定了弹出菜单的位置。那么具体的讲呢,此处我引用互动百科上面的解释如下:TrackPopupMenu - 函数功能
    该函数在指定位置显示快捷菜单,并跟踪菜单项的选择。快捷菜单可出现在屏幕上的任何位置。

    TrackPopupMenu - 函数原型
    BOOL TrackPopupMenu(HMENU hMenu,UINT uFlags,int x,int y,int nReserved,HWND hWnd,CONST RECT”prcRect);

    TrackPopupMenu - 主要参数

    hMenu:被显示的快捷菜单的句柄。此句柄可为调用CreatePopupMenu创建的新快捷菜单的句柄,也可以为调用GetSubMenu取得的与一个已存在菜单项相联系的子菜单的句柄。
    
    uFlags:一种指定功能选项的位标志。用下列标志位之一来确定函数如何水平放置快捷菜单:
    
    TPM_CENTERALLGN:若设置此标志,函数将按参数x指定的坐标水平居中放置快捷菜单。
    
    TPM_LEFTALLGN:若设置此标志,函数使快捷菜单的左边界与由参数X指定的坐标对齐。
    
    TPM_RIGHTALLGN:若设置此标志,函数使快捷菜单的右边界与由参数X指定的坐标对齐。
    
    用下列标志位之一来确定函数如何垂直放置快捷菜单:
    
    TPM_BOTTOMALLGN:若设置此标志,函数使快捷菜单的下边界与由参数y指定的坐标对齐。
    
    TPM_TOPALLGN:若设置此标志,函数使快捷菜单的上边界与由参数y指定的坐标对齐。
    
    TPM_VCENTERALLGN;若设置此标志,函数将按参数y指定的坐标垂直居中放置快捷菜单
    
    用下列标志位之一来确定在菜单没有父窗口的情况下用户的选择:
    
    TPM_NONOTIFY:若设置此标志,当用户单击菜单项时函数不发送通知消息。
    
    TPM_RETURNCMD;若设置此标志;函数将用户所选菜单项的标识符返回到返回值里。
    
    用下列标志位之一来确定在快捷菜单跟踪哪一个鼠标键:
    
    TPM_LEFTBUTTON:若设置此标志,用户只能用鼠标左键选择菜单项。
    
    TPM_RIGHTBUTTON:若设置此标志,用户能用鼠标左、右键选择菜单项。
    
    X:在屏幕坐标下,快捷菜单的水平位置。
    
    Y:在屏幕坐标下,快捷菜单的垂直位置。
    
    NReserved:保留值,必须为零。
    
    HWnd:拥有快捷菜单的窗口的句柄。此窗口接收来自菜单的所有消息。函数返回前,此窗口不接受来自菜单的WM_COMMAND消息。
    
    如果在参数uFlags里指定了TPM_NONOTIFY值,此函数不向hWnd标识的窗口发消息。 但必须给hWnd里传一个窗口句柄,可以是应用程序里的任一个窗口句柄。
    
    PrcRect:未用。
    
    返回值:如果在参数uFlags里指定了TPM_RETURNCMD值,则返回值是用户选择的菜单项的标识符。如果用户未作选择就取消了菜单或发生了错误,则退回值是零。如果没在参数uFlags里指定TPM_RETURNCMD值,若函数调用成功,返回非零值,若函数调用失败,返回零。若想获得更多的错误信息,清调用GetLastError。
    

    至此,运行发现确实能右键弹出菜单。但是我此时又想念起了我的女神,是她陪我度过了最近这段很充实很发愁的时光,于是打开“中国好声音刘明湘.mp4”,顿时播放器里边传来那温柔的声音,没办法,写软件少不了测试,每次都是湘姐来帮我测试。但此时我发现,右键点击,没有任何反应,怎么点都没有反应,我马上点击停止按钮,再右键播放区域,弹出了菜单。这就怪了,为什么播放的时候和不播放的时候是不同的反应呢?分析后只有一种可能,那就是播放的时候,右键的Rbuttondown消息被屏蔽了,或者说父窗口没有接收到Rbuttondown消息。后来在网上终于找到了一个方法,一句代码解决,就是mypic_video.EnableWindow(FALSE);先禁用picture控件,不让它拦截右键down消息。果然在此运行播放湘姐的时候,右键点击,能弹出菜单了!哈哈!

    那么播放器中,总是有很多快捷键的设置,比如Space按钮就是播放/暂停,<-和->就是后退和快进,等等。那么我接下来就是设置右键菜单的快捷键。此处我就写详细一点吧,毕竟当时我也是磕磕碰碰了很久。
    首先选择资源视图,点击Accelerator,应该是有一个默认的项吧,不记得了,名字可定不是图中的名字,这里要注意,一定要将这个ID改为你准备设置快捷键的总菜单的ID,注意注意!
    a
    然后双击进入,为菜单里的每一项添加快捷键,如下所示:
    j 这个是我自己的设置啦,对应上边讲到的右键菜单。
    接下来还要添加代码。在对话框类里面添加成员变量HACCEL hAccel; 然后在OnInitDialog函数中添加
    hAccel=::LoadAccelerators(AfxGetInstanceHandle(),MAKEINTRESOURCE(IDR_MENU1));,此时最重要的一步来了。需要重写PreTranslateMessage函数,具体方法如下:
    在类视图中找到对话框类,然后右键属性,找到重写按钮,往下面找到PreTranslateMessage函数,点击添加。
    这里写图片描述

    这里写图片描述
    在该函数里边添加代码:

    if (WM_KEYFIRST<=pMsg->message&&pMsg->message<= WM_KEYLAST) 
    
        { 
    
            HACCEL ihAccel=hAccel; 
    
            if (ihAccel && ::TranslateAccelerator(GetSafeHwnd(), ihAccel, pMsg)) 
    
                return TRUE;
        }

    至此,完成。运行后快捷键果然成功了。当然前提是,之前需对菜单里的每一个菜单项添加事件响应函数。

    那么为什么要这么做呢?PreTranslateMessage函数又是干嘛的?
    引用百度百科:类: CWinThread
    头文件:
    afxwin.h
    功能:
    若要在消息被分配到Windows函数::TranslateMessage和DispatchMessage之前
    过滤Windows消息,应重载这个函数。
    语法:
    virtual Bool PreTranslateMessage(MSG * pMsg);[1]
    参数:
    pMsg 指向包含要处理的消息的MSG结构
    返回值:
    若消息在PreTranslateMessage已经完全处理,不需要作进一步处理,返回非零值。
    若消息需要进一步处理,则返回零。
    说明:
    仅在用户界面线程中使用。

    简单的理解就是这个函数具有较高的优先级,它能首先截获一些按键消息之类的,所以在截获后便可以调用自己的函数进行消息响应。

    至此,右键菜单的设置和快捷键的设置就完了,当然我的项目中用到的还有其他的快捷键设置,还需要调试。加油!

    ——————————————————————————————————————————(以下为二次修改内容)

    后来,发现好像还有另外一种很方便的方法,即在该菜单或者按钮的caption属性中,添加
    &G就可以实现Alt+G键的快捷键,当然可以把G键换成其他的字母键。

    除了快捷键,我也听说过热键,那么什么是热键呢?其实好像就是一样的意思,我到现在还没有明白。先不管了,我的重点不是说这个,我的重点是上面的快捷键设置方法只是local的,即当应用程序失去焦点后或者没有被激活前,快捷键是不起作用的。那么与此相对应的就是global的,即任何时候(不管程序有没有获得焦点,或是有没有被激活)都可以响应快捷键。
    那么如何设置全局的快捷键?
    首先,利用类向导添加消息WM _HOTKEY的响应函数,会在类中自动生成成员函数

    afx_msg void OnHotKey(UINT nHotKeyId, UINT nKey1, UINT nKey2);

    ,同时在BEGIN_MESSAGE_MAP(CMyPlayerDlg, CDialogEx)里也生成衣蛾消息宏映射

    ON_WM_HOTKEY()

    上面两步不用我们自己操作,类向导已经帮我们做好了,接下来我们可以开始真正的编写设置。
    在OnInitDialog中添加注册热键的代码:

      //注册热键
          int nRet = RegisterHotKey(GetSafeHwnd(),ID_hotkeyftp,MOD_ALT|MOD_CONTROL,'Y'); //热键 ctrl+alt+Y 
          if(!nRet)   
              AfxMessageBox("RegisterHotKey 0 false");   
          nRet = RegisterHotKey(GetSafeHwnd(),ID_hotkeytty,MOD_ALT|MOD_CONTROL,'T'); //热键 ctrl +alt + t 
          if(!nRet)   
              AfxMessageBox("RegisterHotKey 1 false"); 

    其中ID_hotkeyftp和ID_hotkeytty是我自己定义的两个宏。可以在头文件中定义:

    #define ID_hotkeyftp  1001
    #define ID_hotkeytty  1002

    关于热键的具体风格可以是如下的组合:(利用’|’进行组合)
    这里写图片描述
    然后在生成的void CMyPlayerDlg::OnHotKey(UINT nHotKeyId, UINT nKey1, UINT nKey2)函数中编写代码:

    void CMyPlayerDlg::OnHotKey(UINT nHotKeyId, UINT nKey1, UINT nKey2)
    {
        // TODO: 在此添加消息处理程序代码和/或调用默认值
        if (nHotKeyId==ID_hotkeyftp)
        {
        //快捷键对应的动作响应函数
            OnBnClickedButtonftp();
        }
        else if (nHotKeyId==ID_hotkeytty)
        {
        快捷键对应的动作响应函数
            OnBnClickedButtty();
        }
        else
        {
           NULL;
        }
    
        CDialogEx::OnHotKey(nHotKeyId, nKey1, nKey2);
    }

    还没有完,还需要在类的析构函数中书写如下代码:

        UnregisterHotKey(m_hWnd,ID_hotkeyftp);
        UnregisterHotKey(m_hWnd,ID_hotkeytty);

    到此设置完毕,运行之后就可以看到效果了,不管有没有获得焦点,按下组合键,都能响应相应的动作。也就是全局的热键。

    关于热键和快捷键,或许可以从字面理解,因为热键可以设置成全局的,所以应该是哪些经常用到的操作,所以称之为“热”嘛。哈哈!

                       拙见,小记!
    
    展开全文
  • 在包含Applet标签的页面,运行中较高的jdk版本(例如jdk1.7或jdk1.8),会弹出【应用程序已被安全设置阻止】的安全警告框(如下图),这是由于oracle在jdk1.7(主要涉及到jdk7u21, jdk7u45, jdk7u51版本)中引入了对...
  • 依赖具体activity弹出全局性弹窗

    千次阅读 2017-11-05 19:41:13
    1.全局弹窗的几种方式 在软件开发当中经常遇到需要全局性弹窗,比如用户在使用软件时被挤下线了、有软件...第一个方法利用系统AlertDialog弹出dialog,不过样式有点优雅,也需要AndroidManifest.xml中注册SYSTEM_ALE
  • 当初出现这个问题是在小米手机上的,后来发现小米手机把通知的声音音量和多媒体声音音量关联到一起了,如果多媒体声音音量大小为0,那么就会听到声音。 解决办法就是: 1、获取多媒体音量大小如果是0,给用户...
  • 当前应用拦截NFC响应,不弹出选择框教程
  • Windows 7禁用“ PC支持”弹出窗口

    千次阅读 2020-01-09 12:03:51
    在2020年1月15日,Windows 7 ...安装了更新KB4530734的Windows 7客户端将显示以下弹出消息: 您的Windows 7 PC受支持。 截至2020年1月14日,对Windows 7的支持已终止。由于以下原因,您的PC更容易受到病毒...
  • 每次使用IE打开调用Activex的html时,会弹出“在此页上的activex控件和本页上的其他部分的交互可能安全.你想允许这种交互吗?”的提示,为了去掉这个提示,花了我好几个小时。看了下面的文章终于找到了解决方法,...
  • win10下Chrome弹出广告关闭

    千次阅读 多人点赞 2019-05-30 10:52:17
    浏览过国外网站后,电脑会经常弹出广告,通过chrome浏览器弹出的,而且通过杀毒软件啥的都扫描出来。 原因: 一些网站调用 chrome的通知,进行弹窗推送。 解决:关闭网站推送,删除对应网站 打开chrome设置 ...
  • 解决办法: win10打开程序后,按住shift键,然后右键程序图标就会出现选项,点击最大化就可以了 shift加右键,然后选择最大化。
  • artdialog弹出

    千次阅读 2015-08-22 17:49:05
    功能: 支持锁定屏幕(遮罩)、模拟alert和confirm、多窗口弹出、静止定位、支持Ese键关闭对话框、定时关闭、自定义位置、拖动、鼠标调节窗口大小、换肤…… 优点 兼容主流浏览器: 支持IE6和IE6+, Firefox, ...
  • "PyQt5 弹出窗口(框)大全" ) self . resize ( 400 , 300 ) # 全局布局(注意参数 self) wl = QVBoxLayout ( self ) # 局部布局 h1 = QHBoxLayout ( ) # 输入框 h2 = QHBoxLayout ( ) ...
  • PyQt5之QMessageBox弹出式对话框

    千次阅读 2020-06-26 11:57:10
    QMessageBox是一种通用的弹出式对话框,用于显示消息,允许用户通过单击不同的标准按钮对消息进行反馈。每个标准按钮都有一个预定义的文本、角色和十六进制数。QMessageBox类提供了许多常用的弹出式对话框,如提示、...
  • 我们使用电脑的时候会基本会登录QQ这款社交软件,每次将QQ登录进去后,桌面就会弹出一个腾讯网的新闻弹窗,每次弹出来我们还要手动关闭,比较麻烦。有没有一种方法可以将腾讯网弹出关闭呢?每次登录使用QQ不再弹出...
  • 仿IOS弹出框及提示框(含Demo)

    千次阅读 2017-12-25 17:21:05
    做项目经常需要用到各种各样的提示框,今天先把通用的提示框和仿IOS的弹出框写到demo里面后面会持续更新其他的。 1.提示框效果 2.仿IOS弹出框效果 Activity代码 package com.example.iosdialog; ...
  • 桌面图标弹出提示

    万次阅读 热门讨论 2011-11-14 16:01:54
    之前看见过某些软件,安装完毕后会在桌面图标的旁边弹出一个提示框.然后就尝试着自己也实现一下这个效果. 先来看看最终效果: 实现方法 首先,必须知道图标在屏幕上的位置.用SPY类工具探测了一下(这里我...
  • 很多软件通过设置自己的异常捕获函数,捕获未处理的异常,生成报告或者日志(例如生成mini-dump文件),达到Release版本下追踪Bug的目的。但是,到了VS2005(即VC8),Microsoft对CRT(C运行时库)的一些与安全相关...
  • 在博客上搜索资料,总是觉得自己太笨,没写全面看懂哇~~。受阿狗启发,想好好开始记录,总结自己的学习情况,做到知其然,知其所以然。说多说,进入正题。  一、6种Qt对话框介绍 通知对话框 information----...
  • 知道如何提高弹出框的用户体验设计? 小编从优质网站精心挑选了20例弹窗/弹出框例子,供大家寻找设计灵感。 1. 邮件订阅弹窗/弹出框 在平时我们浏览网站时,通常会遇到附于页面底部的网页弹框设计。...
  • PyQt5 笔记(03):弹出窗口大全

    千次阅读 2018-10-17 03:04:54
    本文实现了PyQt5个各种弹出窗口:输入框、消息框、文件对话框、颜色对话框、字体对话框、自定义对话框 其中,为了实现自定义对话框的返回值,使用了信号/槽   本文基于 windows 7 + python 3.4   效果图: ...
  • C#弹出选择对话框的程序

    千次阅读 2014-10-24 08:28:37
    通常我们要进行这些操作前都先要进行提示确认的步骤,这个提示步骤是:当用户作某一操作时,首先弹出一个操作确认选择对话框,用户后确认后,操作才能有效执行,否则中止操作。这样做既可以给用户提供一个很好的操作...
  • 需求大致就是这样的:用户点击按钮弹出Dialog,Dialog中有输入框,然后Dialog弹出后要自动弹出软键盘;(如果让用户自己手动点击输入框再弹出软键盘的话,用户体验太差了);好的,需求大致就是这样;很简单嘛Dialog...
  • 在DirectX下弹出对话框

    千次阅读 2002-10-24 09:38:00
    在DirectX下弹出对话框 金山公司出品的游戏修改器——《金山游侠》,以其独特的“DirectX下智能弹出”的功能在众多的游戏修改器中独树一帜,赢得了众多玩家的喜爱。“DirectX下智能弹出”在抓图、游戏修改器、游戏...
  • 曾几何时,服务里面弹出一个窗口到桌面上不再是那么地容易了:以前只要把服务设置为允许和桌面交互就可以直接在服务启动的时候,把一个窗口弹给用户。但是现在在vista(其它的OS 下没有测试,未知)下要弹出这样...
  • 1> 首先新建一个对话框,设置好该对话框的ID_CLDJ,然会点击对话框的空白处,在弹出的对话框中选择新建类,CCldj,(记住:类名一定是以大写字母C开头) 2> 然后右键单击需要弹出对话框的菜单选项,选择类向导,选择...
  • Qt弹出对话框&quot;QMessageBox&quot;的按钮显示改为中文   QMessageBox是Qt框架下专门用于弹出对话框的类,一般会提供几个按钮供用户点击选择。该对话框的按钮在默认情况下为英文显示 // 创建一个...
  • 如果不是所有客户机都有此问题,请在问题的客户机上,尝试以下操作: 设置好IE安全级别为中,请注意安全级别,是根据Internet和本地Intranet两种情况分别设置的。Windows2003默认安全级别是最高,很多功能会无法...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 52,389
精华内容 20,955
关键字:

怎么设置不弹出软件消息