布局在输入框悬浮

知识拓展

android:windowSoftInputMode:设置窗体软键盘的交互模式。

1. stateUnspecified
当设置属性为stateUnspecified的时候,系统是默认不弹出软键盘的。可是当有获得焦点的输入框的界面有滚动的需求的时候,会自己主动弹出软键盘。
2. stateUnchanged
就是说,当前界面的软键盘状态,取决于上一个界面的软键盘状态。举个样例,假如当前界面键盘是隐藏的,那么跳转之后的界面,软键盘也是隐藏的;假设当前界面是显示的,那么跳转之后的界面,软键盘也是显示状态。
3. stateHidden
假设我们设置了这个属性,那么键盘状态一定是隐藏的,无论上个界面什么状态。也无论当前界面有没有输入的需求,反正就是不显示。因此,我们能够设置这个属性,来控制软键盘不自己主动的弹出。
4. stateAlwaysHidden
这个属性也能够让软键盘隐藏
5. stateVisible
设置为这个属性,能够将软键盘召唤出来,即使在界面上没有输入框的情况下也能够强制召唤出来。
6. stateAlwaysVisible
这个属性也是能够将键盘召唤出来,可是与stateVisible属性有小小的不同之处。举个样例,当我们设置为stateVisible属性,假设当前的界面键盘是显示的,当我们点击button跳转到下个界面的时候,软键盘会由于输入框失去焦点而隐藏起来,当我们再次回到当前界面的时候,键盘这个时候是隐藏的。可是假设我们设置为stateAlwaysVisible,我们跳转到下个界面,软键盘还是隐藏的,可是当我们再次回来的时候。软键盘是会显示出来的。
7. adjustResize
这个属性表示Activity的主窗体总是会被调整大小,从而保证软键盘显示空间。
8. adjustPan
当前窗口的内容将自动移动以便当前焦点从不被键盘覆盖和用户能总是看到输入内容的部分
9. adjustUnspecified
默认设置,通常由系统自行决定是隐藏还是显示

效果图:
在这里插入图片描述

作用:声明getGlobalLayoutListener()方法,传入你的手机屏幕与指定的控件。ViewTreeObserver会监听你的屏幕,当软键盘弹出时,屏幕可见高度(r.bottom)变小。计算屏幕高度与r.bottom的差值,即为软键盘的高度(diff)。将指定控件的paddingBottom设为diff,就实现了“自定义输入框位于软键盘上方”。同理,当软键盘消失时,paddingBottom设为0,输入框自动落回底部。

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        View decorView = getWindow().getDecorView();
        View contentView = findViewById(Window.ID_ANDROID_CONTENT);
        decorView.getViewTreeObserver().addOnGlobalLayoutListener(getGlobalLayoutListener(decorView, contentView));
    }
     private ViewTreeObserver.OnGlobalLayoutListener getGlobalLayoutListener(final View decorView, final View contentView) {
         return new ViewTreeObserver.OnGlobalLayoutListener() {
             @Override
             public void onGlobalLayout() {
                 Rect r = new Rect();
                 //用来获取当前窗口可视区域的大小
                 decorView.getWindowVisibleDisplayFrame(r);
                 int height = decorView.getContext().getResources().getDisplayMetrics().heightPixels;
                 //软键盘的高度
                 int diff = height - r.bottom;
                 if (diff != 0) {
                     if (contentView.getPaddingBottom() != diff) {
                         contentView.setPadding(0, 0, 0, diff);
                     }
                 } else {
                     if (contentView.getPaddingBottom() != 0) {
                         contentView.setPadding(0, 0, 0, 0);
                     }
                 }
             }
         };
     }
}

decorView.getViewTreeObserver().addOnGlobalLayoutListener
4.4机型适配问题

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要让el-select显示悬浮窗,可以使用el-cascader组件,它可以实现级联选择,也可以显示悬浮窗。具体实现方法如下: 1. 在el-select中使用el-cascader组件,设置options属性为一个数组,数组中每个元素为一个对象,该对象包含label和value属性,分别表示选项的文本和值。 2. 设置el-cascader的show-all-levels属性为true,这样就可以显示悬浮窗。 3. 设置el-cascader的expand-trigger属性为'hover',这样就可以在鼠标悬停时展开悬浮窗。 例如,以下代码实现了一个带有悬浮窗的el-select: ``` <template> <el-select v-model="value" placeholder="请选择"> <el-cascader :options="options" :show-all-levels="true" :expand-trigger="'hover'" ></el-cascader> </el-select> </template> <script> export default { data() { return { value: '', options: [ { value: 'zhinan', label: '指南', children: [ { value: 'shejiyuanze', label: '设计原则', children: [ { value: 'yizhi', label: '一致', }, { value: 'fankui', label: '反馈', }, { value: 'xiaolv', label: '效率', }, { value: 'kekong', label: '可控', }, ], }, { value: 'daohang', label: '导航', children: [ { value: 'cexiangdaohang', label: '侧向导航', }, { value: 'dingbudaohang', label: '顶部导航', }, ], }, ], }, { value: 'zujian', label: '组件', children: [ { value: 'basic', label: 'Basic', children: [ { value: 'layout', label: 'Layout 布局', }, { value: 'color', label: 'Color 色彩', }, { value: 'typography', label: 'Typography 字体', }, { value: 'icon', label: 'Icon 图标', }, { value: 'button', label: 'Button 按钮', }, ], }, { value: 'form', label: 'Form', children: [ { value: 'radio', label: 'Radio 单选框', }, { value: 'checkbox', label: 'Checkbox 多选框', }, { value: 'input', label: 'Input 输入框', }, { value: 'input-number', label: 'InputNumber 计数器', }, { value: 'select', label: 'Select 选择器', }, { value: 'cascader', label: 'Cascader 级联选择器', }, ], }, ], }, ], }; }, }; </script> ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值