首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

如何像软键盘一样在根布局的底部设置PopupWindow?

要像软键盘一样在根布局的底部设置PopupWindow,可以按照以下步骤进行操作:

  1. 创建一个根布局,可以是LinearLayout、RelativeLayout或者ConstraintLayout等。
  2. 在根布局中添加一个底部的占位View,用于PopupWindow的显示和隐藏。
  3. 在需要显示PopupWindow的地方,通过LayoutInflater加载PopupWindow的布局文件。
  4. 创建PopupWindow对象,并设置其宽度、高度、背景等属性。
  5. 设置PopupWindow的显示位置,可以通过设置Gravity属性来实现在底部显示。
  6. 设置PopupWindow的动画效果,可以使用setAnimationStyle方法来设置。
  7. 在底部占位View的点击事件中,判断PopupWindow的显示状态,如果已经显示,则隐藏PopupWindow;如果未显示,则显示PopupWindow。

以下是一个示例代码:

代码语言:txt
复制
// 创建根布局
LinearLayout rootLayout = findViewById(R.id.root_layout);

// 添加底部占位View
View bottomView = new View(this);
LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, 0);
params.weight = 1;
rootLayout.addView(bottomView, params);

// 加载PopupWindow的布局文件
View popupView = LayoutInflater.from(this).inflate(R.layout.popup_layout, null);

// 创建PopupWindow对象
PopupWindow popupWindow = new PopupWindow(popupView, ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT);
popupWindow.setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT));
popupWindow.setOutsideTouchable(true);

// 设置PopupWindow的显示位置
popupWindow.showAtLocation(bottomView, Gravity.BOTTOM, 0, 0);

// 设置PopupWindow的动画效果
popupWindow.setAnimationStyle(R.style.PopupAnimation);

// 底部占位View的点击事件
bottomView.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        if (popupWindow.isShowing()) {
            popupWindow.dismiss();
        } else {
            popupWindow.showAtLocation(bottomView, Gravity.BOTTOM, 0, 0);
        }
    }
});

这样就可以实现在根布局的底部设置一个类似软键盘的PopupWindow了。注意,上述代码中的R.layout.popup_layout是PopupWindow的布局文件,R.style.PopupAnimation是PopupWindow的动画效果。根据实际需求,可以自定义布局和动画效果。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

Android 仿UC浏览器详情页评论弹框效果

大概就这种效果 额,突然发现UC被我卸载了,这个是QQ浏览器效果,不过都一样,如果当前页面不是全屏的话,把布局设为相对布局,然后设置评论布局为处于底部,这样点击评论时弹开键盘会触发布局重绘,底部评论也会处于软键盘上方...,键盘消息,布局下移,但是我们要说是全屏情况下我们如何处理。...首先要监听到软件盘弹起,然后再设置评论popupWindow import android.app.Activity; import android.graphics.Rect; import android.support.v4...(getWindow().getDecorView(), Gravity.BOTTOM, 0, 0); } 当然,最后最关键popupWindow配置,要不然popupWindow会被软键盘遮挡...); // 显示输入法之后调用,否则popupwindow会在窗口底层 super.showAtLocation(parent, gravity, x, y); }

1.3K30
  • Android使用Activity实现简单可输入对话框

    1、需求分析 众所周知,应用中这样那样评论总是少不了,有的应用是底部直接加一个EditText和一个Button,让用户输入文字或者表情之后点击按钮提交;而有的虽然也放置了EditText,但仅仅是一个...这里效果可以细分为四点: 点击底部按钮之后会弹出对话框,对话框在布局底部; 对话框中有输入框EditText,可以输入内容; 对话框弹出后EditText会自动获取焦点,弹出软键盘软键盘会把对话框顶上去...一开始我想到PopupWindow,但是由于里面有EditText,与软键盘交互起来很是头疼,于是改用了Activity。这样一来我们就可以用Activity一样使用这个对话框,方便多了。...新建一个工程,MainActivity只是一个配角,底部放一个按钮就搞定。我们主角是DialogActivity,它布局很简单,就跟平时Activity一样: <?...这个属性是设置窗口和软键盘交互模式。它属性有很多,可以参考我后面给出参考文章。这里我们用到了adjustResize,它作用就是调整界面布局软键盘留出足够空间。

    2.8K20

    Android经典面试题之如何设置activity启动动画,让它dialog一样底部往上出来

    Android 中,你可以通过定义自定义动画资源并在启动和结束 Activity 时应用这些动画,实现类似对话框从底部向上进入,从上向下退出效果。具体步骤如下: 1....启动新 Activity 时 启动一个新 Activity 时你可以这样使用: val intent = Intent(this, NewActivity::class.java) startActivity...Activity Dialog 一样,从底部向上进入,从上到下退出。...如何只让新启动activity有动画效果,之前activity不动 先定义一个静止动画 res/anim/no_animation.xml <?...(R.anim.activity_slide_in, R.anim.no_animation) Activity 返回时,也不需要动画 Activity 中,确保返回时无动画: override

    9010

    Android 底部按钮被软键盘顶起问题解决

    一般来说,我们布局分为两种 底部按钮被滚动布局包裹 底部按钮不被滚动布局包裹 第一种布局是不会出现软键盘底部按钮顶起情况,首先软键盘打开实际上是一个 Dialog,而我们配置文件内 adjustResize...属性是页面的布局 decorView 子 view 也就是一个线性布局内通过设置 paddingBottom = 软键盘高度,这样其实相当于把整个滚动布局高度减少了,所以底部按钮也只是变为需要滚动才能看到...第二种情况通常为一个继续按钮始终处于页面的底部,中间内容可以滚动,当布局内边距等于软键盘高度时,底部按钮就看起来像是被顶起。...从大方向来说可以通过修改 windowSoftInputMode 来设置布局软键盘处理方式,当然也可以通过监听软键盘,这种修改细粒度更小。...如果界面没有可滑动控件,显示效果和 adjustUnspecified 效果一样;如果界面有可滑动控件,软键盘显示时候,可能会有一些内容显示不出来。

    2.1K20

    Android画板开发之添加文本文字

    一、前言 添加文本,也是属于 一个比较简单功能,第二篇时候,添加了橡皮擦,橡皮擦里面通过一个模式形式进行画笔判断,当然文本也是如此,添加一个文本模式,onTouchDown时候,弹出...PopupWindow,输入文本,然后PopupWindow消失时候,利用staticLayout绘制到画布上即可。...float spacingadd, //基础行距上添加多少 boolean includepad) //文本顶部和底部是否留白 所以,bean类之前基础上,添加了文本、宽度、xy轴偏移...在这里有三点注意点 软键盘自动弹出 编辑框显示软键盘上面 弹框显示位置 右边越界 private var mTextPopup: PopupWindow?...requestFocus() //自动弹出软键盘,会导致布局变化,重测量、绘制 val imm = context.getSystemService(Service.INPUT_METHOD_SERVICE

    1.2K10

    Android开发实现仿京东商品搜索选项卡弹窗功能

    (2)每个item设置两种状态,点击状态与未点击状态 (3)弹窗由PopupWindow实现 三、布局 (1)item布局 <!...* @author XiongJie * @param selectType */ public void setSelectState(int selectType) { //4、设置每个筛选条件布局参数...(R.style.PopupWindowAinmation); // 设置边缘点击可消失 popupWindow.setOutsideTouchable(true); // 设置pop出来后,软键盘属性...,避免pop挡住软键盘,以及pop获取焦点后软键盘会自动隐藏问题 popupWindow.setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_RESIZE...| WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_VISIBLE); // 使用该属性时,滑动pop时候不会自动弹出软键盘 popupWindow.setInputMethodMode

    1K20

    干货一:通过自定义PopupWindow实现QQ菜单选项功能

    概述 我们使用手机QQ时,点击菜单键,会弹出如本案例说演示效果图似的菜单选项。 ? 实现方式有很多种,在这里我们来演示下如何通过自定义PopupWindow方式一步一步实现如上效果。...点击外部,PopupWindow可消失 …… 实现 自定义PopupWindow UI编写 位于父布局底部 距边框有一定距离,布局使用layout_margin即可 ListView(四个圆角+...白色背景) + View分割(透明色) +底部文字(圆角+白色背景) 蓝色字体 居中显示(ListView中 Item设置即可,底部文字设置gravity即可) ……....编写 +接口回调+监听OnTouch事件实现点击外部消失 加载自定义xml文件,然后获取ListView组件,设置adapter 即可显示UI布局。...; } } 调用 因为PopupWindow需要依赖父组件来显示,所以实例话PopupWindow时候,传入布局View,实现接口回调Activity类实现自定义两个接口,并传入到PopupWindow

    79330

    Android底部弹窗实现示例代码

    本文主要是介绍Android中实现底部弹窗正确姿势,如果你实现底部弹窗时遇到了一些问题,那么请仔细阅读本文,相信文章会对你有所帮助。...直接进入主题,按照套路,一步步实现利用PopupWindow实现底部弹窗。首先,写一个布局文件作为PopupWindow内容,布局文件如下 <?...下面看下利用PopupWindow实现底部弹窗代码,重要方法我会具体讲解 private void initPopupWindow() { //要在布局中显示布局 contentView...);//设置点击外部是否消失 } 因为DialogFragment也是Fragment,所以,DialogFragment有和Fragment一样生命周期,onStart方法中初始化弹窗数据,onCreateView...中加载布局,同样,和Fragment使用方法也是一样,下面看下在Activity中使用 void showDialog() { FragmentTransaction ft = getFragmentManager

    4.3K31

    Android UI开发中所遇到各种坑

    ()里调隐藏软键盘思路就是错,因为onDestroy()之前还有两个生命周期方法,上述隐藏软键盘方法有个getCurrentFocus(),onDestroy()之前肯定得不到正确获取当前焦点那个控件了...,软键盘有时会把一些控件覆盖掉,这时如何把整个界面向上顶起,让任何控件都不会被覆盖呢?...有两步,第一activity里设置一个属性,如下。...<activity Android:windowSoftInputMode="adjustResize" 2.merge标签注意点 merge标签只有布局是FrameLayout时才有用,因为安卓所有界面的布局都是...使用后要注意如果在布局中,则不能用LayoutInflater来生成一个view,否则会报如下错误,由于我listviewgetview()里用了这个带有merge布局,所以崩溃了。

    1.3K20

    Android开发笔记(一百四十八)自定义输入法软键盘

    多数情况下面,系统自带软键盘已经够用了,可是总有少数情况,系统软键盘无法满足开发者要求,比如以下几个需求,系统软键盘就无法处理: 1、手机号码与支付密码,只需要输入数字,连标点符号都不需要。...那么这个软键盘又是如何实现呢?其实它跟平常自定义控件基本类似,只细节上有所差异,下面分步说明自定义软键盘过程。...3、软键盘不是一个孤立控件,它按键动作需要实时某个编辑框中把数字显示出来,所以使用时还得给它绑定一个EditText,这样软键盘才知道我按键要输出给这个EditText,而不是输出给那个EditText...接下来阐述自定义软键盘三个步骤,首先要定义软键盘布局文件,res/xml目录创建名为inputkeyboard.xml文件,内部节点为Keyboard,其下挂了四个Row节点表示有四行,每个...)); } } //此处省略其它无需具体实现Override函数 }; 至此我们可以使用其它控件一样直接把软键盘加入到页面布局啦,注意指定键盘布局自定义属性: <com.example.exmtextinput.widget.KeyboardLayout

    2.5K30

    AndroidMainifest标签说明2——<activity>

    用户从主选单再次选择该应用时,系统就会对该应用task进行清理。除了Activity,其它Activity都会被清除出栈,可是假设在Activity中设置了此属性之后。...设置“true”假设这个任务应该排除名单之外,设置“false”是否应该被包含。 android:exported 默认false 该Activity是否可以别其它应用组件所打开。...activity实例目标栈中,并设置Intent路径。...“splitActionBarWhenNarrow”加入栏位于屏幕底部动作条显示操作项,当约束水平空间。而不是少数出如今屏幕上方操作栏中行动项目。操作栏被分成顶部导航部分和操作项底部栏。...这些模式系统会自己主动选择一个取决于窗体内容有不论什么布局视图,能够滚动内容。如果有这样一个观点,窗体大小,如果滚动能够使全部可见窗体内容一个较小区域。

    1.5K00

    详解Android中获取软键盘状态和软键盘高度

    场景二 当软键盘弹出后,会将界面底部到中间一大部分全部挡住,如果用户要查看、操作被覆盖区域,必须先收起软键盘,这会影响用户交互。...所以通常需要在软键盘弹出后,将底部一些View,例如Button,移到软键盘上方,方便用户操作。...注册布局变化监听 Android中当软键盘由隐藏变为显示,或由显示变为隐藏时,会触发当前布局中View全局布局变化。通过监听全局布局变化就可以得知软键盘状态。...不过好在除了软键盘外,其他操作对窗口可见区域影响占整个屏幕大小比例都不是很大,通过设置一个合理阈值,就可以较准确判断出是否是软键盘显示和隐藏引起布局变化。...监听软键盘状态变化 获取到软键盘状态和高度后就可以执行需要操作了。如重新布局按钮位置,设置变量,记录当前软键盘状态和上次软键盘隐藏时间等。

    2.8K20

    Android爬坑之旅:软键盘挡住输入框问题终极解决方案

    最基本情况,如图所示:页面底部有一个EditText,如果不做任何处理,那么软键盘弹出时候,就有可能会挡住EditText。...adjustPan是把整个界面向上平移,使输入框露出,不会改变界面的布局; adjustResize则是重新计算弹出软键盘之后界面大小,相当于是用更少界面区域去显示内容,输入框一般自然也就在内了。...经过测试,基本各个Android版本上都可用,效果基本与设置了adjustResize相当。 看一个对比图: ?...,是目前视觉效果上能看到界面高度。...加上了这个判断之后,只有界面的高度变化超过1/4屏幕高度,才会进行重新设置高度,基本能保证代码只响应软键盘弹出。

    4.7K20

    掌握 SwiftUI Safe Area

    除非开发者明确要求视图突破安全区域限制,否则 SwfitUI 将尽力确保开发者创建视图都被布局到安全区域当中。SwiftUI 同时提供了一些方法和工具让开发者对安全区域有所控制。...对于视图来说,safeAreaInsets 反映是状态栏、导航栏、主页提示器以及 TabBar 等各个边占用数值。...•keyboard与显示视图内容上任何软键盘的当前范围相匹配安全区域。...因此,无需使用任何额外代码,视图便自动获得了键盘避让能力。但有时,并非所有的视图都需要将软键盘覆盖区域从安全区域中去除,因此需要正确地设置 SafeAreaRegions 。...首先,背景并没有充满全部屏幕,其次软键盘弹出时,我们并不希望背景因为安全区域变化而发生改变。

    7.7K31

    Android实用View:仿微信支付密码输入框

    : 通过布局方式 布局里边放置6个EditView,每个输入框中间再放置一个view用于设置中间分割线,每个EditVIew只允许输入一个字符,然后对每个进行监听,一个密码输入完之后让另一个EditView...,大致流程是,先监听触摸事件,按下时弹出键盘,然后对软键盘进行监听,获取每次点击键盘对应字符串,然后onDraw方法里边画6个圆,绘制外边框,然后是中间分割线。...出现这个问题肯定是代码问题喽,我们根据问题去一个一个解决,首先给view设置一个透明背景色,然后隐藏光标,再跑一下看看 ? ? 这次底部线和光标都见了,但是输入字符还在,这又是什么问题???...他不按常量出牌,不过这也是他们一贯作风,既然他们要这样效果那我们就去做喽,整个流程还是一样,唯一不同就是外边框和密码之间分割线变成了底部间断线,这肯定难不倒我们啦,不就是画六条线吗,每线起点终点坐标和上边圆心左边计算差不多...来,老表,抽烟,平复一下暴躁心情 谨以此篇来记录自己项目中遇到问题,献给需要类似功能小伙伴们。如果你有好建议欢迎评论指出,大家一起讨论、学习、进步!

    1.7K20

    Android 沉浸式解析和轮子使用

    为了让标题栏回到原来位置并且适应标题栏颜色,我们标题栏上方添加一个大小和 StatusBar 大小一样状态栏 View,View BackgroundColor 可以自己设置成标题栏一样颜色也可以是其他颜色...(); //设置沉浸式 setBar(); //适配状态栏与布局重叠问题 fitsLayoutOverlap(); //适配软键盘底部输入框冲突问题...2.4 Dialog 中实现沉浸式 Dialog 中设置 ZanImmersionBar 方式和在 Fragment 或者 Activity 一样,如果在 Fragment 或者 Activity...2.5 PopupWindow 中实现沉浸式 重点是调用以下方法,但是此方法会导致有导航栏手机底部布局会被导航栏覆盖,还有底部输入框无法根据软键盘弹出而弹出。...这个属性顶部弹出时候是需要使用,如果是底部弹框需要看情况而定。

    3.2K10
    领券