android系统软键盘展示后如何隐藏设置按钮

android设备打开后进入我们的app,不允许app后台执行,但是在一个编辑框打开后弹出系统软键盘,但尴尬的是软键盘里边有一个设置按钮,如何把它隐藏掉呢

img

点击红色出会出现设置界面,

img

但是设置页面里边出现了红色设置按钮,如何代码去禁止限制这设置按钮

自己写一个键盘。

  • 这有个类似的问题, 你可以参考下: https://ask.csdn.net/questions/7726059
  • 这篇博客你也可以参考下:android 新闻咨询、抖音视频、应用下载、视频直播高仿APP客户端源码
  • 除此之外, 这篇博客: android App一段时间没有操作或没有点击屏幕后弹出广告,或者一段时间没有点击屏幕进行特定操作。中的 android App没有操作一段时间后弹出屏保广告页面 部分也许能够解决你的问题, 你可以仔细阅读以下内容或跳转源博客中阅读:
  • 最近做了个项目,里面有个功能是app在任何activity中没有操作一段时间后要跳转到屏保广告页面,点击广告页面是返回上一个activity中,并且广告页面是客户在后台设置的多张图片或者gif。也可以改成是app在没有一段时间没有点击屏幕后跳转到特定的界面等等,可以自己修改。
    那么,来想想这功能的实现思路吧。首先,是全部activity都要有这功能,那就在一个BaseActivity里面实现该功能,然后其他Activity继承BaseActivity就可以了。

    第一步 :app设置长亮,不可暗屏,抽象一个公共的方法给子类Activity设置layout。


    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        //设置屏幕长亮
        getWindow().setFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON,
                WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
    
        setContentView(getLayoutRes());
    
    }
    
    protected abstract int getLayoutRes();
    
    @Override

    第二步:设置定时广告

    private long advertisingTime = 15 * 1000;//定时跳转广告时间
    /**
     * 跳轉廣告
     */
    public void startAD() {
        if (countDownTimer == null) {
            countDownTimer = new CountDownTimer(advertisingTime, 1000l) {
                @Override
                public void onTick(long millisUntilFinished) {
    
                }
    
                @Override
                public void onFinish() {
                    //定时完成后的操作
    
                }
            };
            countDownTimer.start();
        } else {
            countDownTimer.start();
        }
    }
    
    

    第三步:设置屏幕点击监听;这一步要重写dispatchTouchEvent就好了,不要重写onTouchEvent。onTouchEvent自能监听到空白处的点击,其他控件或者是View的点击事件是监听不到的。不了解的可以看一下事件分发。


    @Override
    public boolean dispatchTouchEvent(MotionEvent ev) {
        switch (ev.getAction()) {
            case MotionEvent.ACTION_DOWN:
                //有按下动作时取消定时
                if (countDownTimer != null){
                    countDownTimer.cancel();
                }
                break;
            case MotionEvent.ACTION_UP:
                //抬起时启动定时
                startAD();
                break;
        }
        return super.dispatchTouchEvent(ev);
    }
    
    


    第四步:广告定时在activity启动或者是取消操作, CountDownTimer在Activity销毁或者是不在前台还是在运行的,所以要在Activity的生命周期中控制一下。


    @Override
    protected void onResume() {
        super.onResume();
        //显示是启动定时
        startAD();
    }
    
    @Override
    protected void onPause() {
        super.onPause();
        //activity不在前台是停止定时
        if (countDownTimer != null){
            countDownTimer.cancel();
        }
    }
    
    @Override
    protected void onDestroy() {
        super.onDestroy();
        //销毁时停止定时
        if (countDownTimer != null){
            countDownTimer.cancel();
        }
    }



    将代码贴出来,有什么不对的欢迎指出:

    BaseActivity的代码:


    package com.demo.myadvertising;
    import android.content.Context;
    import android.content.Intent;
    import android.os.Bundle;
    import android.os.CountDownTimer;
    import android.support.annotation.Nullable;
    import android.support.v7.app.AppCompatActivity;
    import android.view.MotionEvent;
    import android.view.WindowManager;
    /**
     * Author:
     * Date: 2017/8/10
     * Description:
     */
    
    public abstract class BaseActivity extends AppCompatActivity {
    
        public CountDownTimer countDownTimer;
        private long advertisingTime = 15 * 1000;//定时跳转广告时间
        public Context context;
    
        @Override
        protected void onCreate(@Nullable Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            //设置屏幕长亮
            getWindow().setFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON,
                    WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
            context = this;
            setContentView(getLayoutRes());
    
        }
    
        protected abstract int getLayoutRes();
    
        @Override
        public boolean dispatchTouchEvent(MotionEvent ev) {
            switch (ev.getAction()) {
                case MotionEvent.ACTION_DOWN:
                    //有按下动作时取消定时
                    if (countDownTimer != null){
                        countDownTimer.cancel();
                    }
                    break;
                case MotionEvent.ACTION_UP:
                    //抬起时启动定时
                    startAD();
                    break;
            }
            return super.dispatchTouchEvent(ev);
        }
    
    
        /**
         * 跳轉廣告
         */
        public void startAD() {
            if (countDownTimer == null) {
                countDownTimer = new CountDownTimer(advertisingTime, 1000l) {
                    @Override
                    public void onTick(long millisUntilFinished) {
    
                    }
    
                    @Override
                    public void onFinish() {
                        //定时完成后的操作
                        //跳转到广告页面
                        startActivity(new Intent(context,ADActivity.class));
                    }
                };
                countDownTimer.start();
            } else {
                countDownTimer.start();
            }
        }
    
    
        @Override
        protected void onResume() {
            super.onResume();
            //显示是启动定时
            startAD();
        }
    
        @Override
        protected void onPause() {
            super.onPause();
            //activity不在前台是停止定时
            if (countDownTimer != null){
                countDownTimer.cancel();
            }
        }
    
        @Override
        protected void onDestroy() {
            super.onDestroy();
            //销毁时停止定时
            if (countDownTimer != null){
                countDownTimer.cancel();
            }
        }
    }
    


    其他Activity继承BaseActivity就可以实现功能,例如MainActivity:

    package com.demo.myadvertising;
    import android.os.Bundle;
    public class MainActivity extends BaseActivity {
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
        }
    
        @Override
        protected int getLayoutRes() {
            return R.layout.activity_main;
        }
    }
    
















  • 您还可以看一下 陈槐老师的app功能测试和性能测试课程课程中的 如何开启定位以及推送消息测试小节, 巩固相关知识点