技术标签: java android android studio Android Studio
点击控件,弹出窗口;再次点击控件,窗口消失;
点击按钮一,吐丝,窗口消失;
点击按钮二、三,吐丝,窗口不消失;
点击外部,窗口消失;
设置多一个布局 - - 窗口的布局
相关代码解释,在注释里有写
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textSize="25dp"
android:text="popWindow"
android:padding="10dp"
android:id="@+id/tv_popWindow"/>
<Button
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:padding="10dp"
android:text="按钮一"
android:id="@+id/bt_one"/>
<Button
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:padding="10dp"
android:text="按钮二"
android:id="@+id/bt_two"/>
<Button
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:padding="10dp"
android:text="按钮三"
android:id="@+id/bt_three"/>
//控件,点击弹出窗口
tv = findViewById(R.id.tv_popWindow);
tv.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
//窗口
popWindow();
}
});
private PopupWindow mPopWindow;
private void popWindow() {
//利用 LayoutInflater获取 R.layout.activity_popwindow 对应的 View
View contentView = LayoutInflater.from(MainActivity.this).inflate(R.layout.activity_popwindow, null);
mPopWindow = new PopupWindow(contentView);
/*
* 设置窗体的长和宽
* 代码强制设置 PopupWindow的 Height、Width(否则无法显示出来)
* popupWindow的宽和高, 以这里代码设置的为准
* */
mPopWindow.setWidth(ViewGroup.LayoutParams.WRAP_CONTENT);
mPopWindow.setHeight(ViewGroup.LayoutParams.WRAP_CONTENT);
//充满
// mPopWindow.setWidth(ViewGroup.LayoutParams.FILL_PARENT);
// mPopWindow.setHeight(ViewGroup.LayoutParams.FILL_PARENT);
//设置动画所对应的style
// mPopWindow.setAnimationStyle(R.style.contextMenuAnim);
/*
* 外部点击, 隐藏窗体的功能(三种方法)
* */
//1. 设置再次点击控件的时候,关闭窗口,不重新打开
mPopWindow.setFocusable(true);
//2.
// mPopWindow.setOutsideTouchable(true);
//3.
// ColorDrawable dw = new ColorDrawable(0x00000000);
// mPopWindow.setBackgroundDrawable(dw);
/*
* 设置窗体在控件的相对位置
* */
// 显示在某个控件的正左下方,无偏移
mPopWindow.showAsDropDown(tv);
// 相对某个控件的位置,有偏移,xoff为 X轴的偏移量,yoff为 Y轴的偏移量
// mPopWindow.showAsDropDown(tv, 0, 0);
//相对于父控件的位置(例如正中央Gravity.CENTER,下方Gravity.BOTTOM等),可以设置偏移或无偏移
// mPopWindow.showAtLocation(tv, Gravity.BOTTOM, 10, 30);
Button bt_one = contentView.findViewById(R.id.bt_one);
bt_one.setOnClickListener(this);
Button bt_two = contentView.findViewById(R.id.bt_two);
bt_two.setOnClickListener(this);
Button bt_three = contentView.findViewById(R.id.bt_three);
bt_three.setOnClickListener(this);
}
//点击按钮,吐丝
@Override
public void onClick(View v) {
switch (v.getId()){
case R.id.bt_one:
Toast.makeText(this, "你点击了按钮一", Toast.LENGTH_SHORT).show();
//窗体消失
mPopWindow.dismiss();
break;
case R.id.bt_two:
Toast.makeText(this, "你点击了按钮二", Toast.LENGTH_SHORT).show();
break;
case R.id.bt_three:
Toast.makeText(this, "你点击了按钮三", Toast.LENGTH_SHORT).show();
break;
}
}
public class MainActivity extends AppCompatActivity implements View.OnClickListener{
TextView tv;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
tv = findViewById(R.id.tv_popWindow);
tv.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
popWindow();
}
});
}
private PopupWindow mPopWindow;
private void popWindow() {
//利用 LayoutInflater获取 R.layout.activity_popwindow 对应的 View
View contentView = LayoutInflater.from(MainActivity.this).inflate(R.layout.activity_popwindow, null);
mPopWindow = new PopupWindow(contentView);
/*
* 设置窗体的长和宽
* 代码强制设置 PopupWindow的 Height、Width(否则无法显示出来)
* popupWindow的宽和高, 以这里代码设置的为准
* */
mPopWindow.setWidth(ViewGroup.LayoutParams.WRAP_CONTENT);
mPopWindow.setHeight(ViewGroup.LayoutParams.WRAP_CONTENT);
//充满
// mPopWindow.setWidth(ViewGroup.LayoutParams.FILL_PARENT);
// mPopWindow.setHeight(ViewGroup.LayoutParams.FILL_PARENT);
//设置动画所对应的style
// mPopWindow.setAnimationStyle(R.style.contextMenuAnim);
/*
* 外部点击, 隐藏窗体的功能(三种方法)
* */
//1. 设置再次点击控件的时候,关闭窗口,不重新打开
mPopWindow.setFocusable(true);
//2.
// mPopWindow.setOutsideTouchable(true);
//3.
// ColorDrawable dw = new ColorDrawable(0x00000000);
// mPopWindow.setBackgroundDrawable(dw);
/*
* 设置窗体在控件的相对位置
* */
// 显示在某个控件的正左下方,无偏移
mPopWindow.showAsDropDown(tv);
// 相对某个控件的位置,有偏移,xoff为 X轴的偏移量,yoff为 Y轴的偏移量
// mPopWindow.showAsDropDown(tv, 0, 0);
//相对于父控件的位置(例如正中央Gravity.CENTER,下方Gravity.BOTTOM等),可以设置偏移或无偏移
// mPopWindow.showAtLocation(tv, Gravity.BOTTOM, 10, 30);
Button bt_one = contentView.findViewById(R.id.bt_one);
bt_one.setOnClickListener(this);
Button bt_two = contentView.findViewById(R.id.bt_two);
bt_two.setOnClickListener(this);
Button bt_three = contentView.findViewById(R.id.bt_three);
bt_three.setOnClickListener(this);
}
@Override
public void onClick(View v) {
switch (v.getId()){
case R.id.bt_one:
Toast.makeText(this, "你点击了按钮一", Toast.LENGTH_SHORT).show();
//窗体消失
mPopWindow.dismiss();
break;
case R.id.bt_two:
Toast.makeText(this, "你点击了按钮二", Toast.LENGTH_SHORT).show();
break;
case R.id.bt_three:
Toast.makeText(this, "你点击了按钮三", Toast.LENGTH_SHORT).show();
break;
}
}
}
文章浏览阅读280次。本文原题“从实践角度重新理解BIO和NIO”,原文由Object分享,为了更好的内容表现力,收录时有改动。1、引言这段时间自己在看一些Java中BIO和NIO之类的东西,也看了很多博客,发现各种关于NIO的理论概念说的天花乱坠头头是道,可以说是非常的完整,但是整个看下来之后,发现自己对NIO还是一知半解、一脸蒙逼的状态(请原谅我太笨)。基于以上原因,..._java bio粘包处理
文章浏览阅读9k次,点赞2次,收藏12次。Robot Framework是一个基于Python的,可扩展的关键字驱动的测试自动化框架,用于端到端验收测试和验收测试驱动开发(ATDD)。_python-3.9.9-amd64用那个版本ride
文章浏览阅读4.8k次。声势浩大的五一校赛数学建模终于结束了(假装很重大的样子,实际上几乎没人参加,心疼自己一秒钟,不过的确是光东兄一直以来引以为豪的一件事,另一个就是他儿子)每天从早上9点干到晚上11点真心不容易啊,玄老师都感慨,建模一次,腰痛好多天。从开始的欣格找我,到和汶林成功组队,很快,就突然愉快地决定了。五一假期第一天,海洋楼地下大机房没有开门,自然也就没法用上边的matlab了,还好有长..._五一建模
文章浏览阅读161次。一、DOM1.1 什么是DOM文档对象模型(Document Object Model,简称 DOM),是 W3C 组织推荐的处理可扩展标记语言(HTML或者XML)的标准编程接口W3C 已经定义了一系列的 DOM 接口,通过这些 DOM 接口可以改变网页的内容、结构和样式。1.2 DOM 树文档:一个页面就是一个文档,DOM 中使用 document 表示元素:页面中的所有标签都是元素,DOM 中使用 element 表示节点:网页中的所有内容都是节点(标签、属性、文本、注释等),DOM_div属于dom模型
文章浏览阅读1.4w次。1.首先需要安装SideBarEnhancements插件2.打开设置文件,输入内容如下:{ "default_browser": "chrome" //one of this list: firefox, aurora, chrome, canary, chromium, opera, safari}此处默认浏览器设置为chrome.3.打开快捷键配置文件,输入_sublime js open in default browser
文章浏览阅读181次。layout: posttitle: 反手来个K8S入门到跑路category: linuxdate: 2019-06-09tags:linuxk8s反手来个K8S入门到跑路前言放假前一两天发现腾讯云托管K8S集群上线好一阵子了, 还支持把原有主机迁入k8s集群, 索性开始搞事了.先简单科普一下, 什么是k8s?k8s 科普时间Kubernetes (K8..._kong externaltrafficpolicy
文章浏览阅读467次。本示例演示如何用Web图表控件 ChartDirector 绘制一个配置有刷新率的实时图表。在本例中,由一个计时器驱动的随机数生成器生成新的数据值,新产生的值会转换到数据数组中,然后显示在图表上。图表由一个秒表进行更新,这样图表的刷新率可独立于数据率。此外,这个图表支持暂停以方便用户查看,但是后台的数据仍然在继续更新。图表刷新计时器调用CChartViewer.update..._c++ chartdirect updateviewport
文章浏览阅读8.2k次。用docker装的MySQL映射到本地路径,然后突然遇到这个报错,表面上看起来是存储引擎出问题了,但建表引擎都没有改过。回想一下是映射的路径文件被我移到别的地方了,应该是影响到了,所以我选择删除原来的docker镜像重新run到新的路径,问题解决。..._mysql1030错误 168
文章浏览阅读191次。ST算法ST算法其实就是倍增的实现好东西时间复杂度O(NlogN)我们的得先看问题:给定一个长度N的序列A,在线回答,lr之间的数的最大值是多少。这是一个区间求最值的问题。其实ST就是用来求最值的,树上或者是线性上。其实这个题跟二分有点像,二分聪明,倍增比他还聪明。设f[i,j]为区间[i,i+2^j-1]的最大值,那么边界显然是Ai,我们把子区间的长度成倍增长。公式 :f[i,j]=max(f[i,j-1],f[i+2^j,j-1]),这就是两个区间的最大值,很像二分max(f[l][k]_st语言 线性拟合计算
文章浏览阅读5.6k次。根据百度大多数回答来说1:先是出现 无法启动程序,因为计算机丢失mfc110.dll 尝试重新安装该程序以解决问题 错误处理:下载或者在别人电脑上拷一份 如:'msvcp110.dll‘ 这类文件然后复制粘贴到系统盘即使/C/windows/system32或者64位系统就放到syswow64 楼主亲测是不能成功的。至少大多数情况是这样的,原因:不同的程序所需..._msvcr110dll已加载但找不到入口点
文章浏览阅读344次。导读:为 Ethereum 设计的 Bancor 算法,解决了小币种的连续流动性问题,最近在 TPS 更高的 EOS 生态中焕发了新的活力。但其设计存在几个无法避免的现实..._bancor算法cw
文章浏览阅读259次。1.书写指定路由import Vue from 'vue'import VueRouter from 'vue-router'Vue.use(VueRouter)const routes = [ { path: '/', component: () => import('../views/Login/index.vue') },]const router = new VueRouter({ routes})export default router_vue router getters rootstate