PopupWindow是一个可以用来显示一个任意的视图的弹出窗口,他需要完全依赖layout布局。
它没什么界面,在弹出的窗口中完全显示布局中的控件。
上面两个美女头就是弹窗PopupWindow显示的内容。是两个Button。
具体实现:
注意:那三个Button不能和普通的Button一样通过findViewById()方法获得,必须首先说的Button所在的视图,View popview = layoutInflater.inflate(R.layout.poplayout, null);
我的Button在poplayout.xml中。最后通过button1 = (Button) popview.findViewById(R.id.button1)获得。
另外一点就是:不要在oncreate()中获得Button,而是像我一样在onclick方法下获得,和popupwindow一起。这一点不一定正确。
为什么要提呢?因为我在oncreate()中获得Button时,button的点击事件不能用,我也不是很清楚。那位大牛要是知道的话,可以告诉我一下。
showAtLocation(findViewById(R.id.edit_layout), Gravity.BOTTOM,0, 0);
设置弹窗的位置:
第一个参数是弹窗父控件的布局;
第二个参数是位置如左,右,上部,下部等;
第三个参数是X方向的偏移量;
第四个参数是Y方向的偏移量。
- package xiaosi.popwindow;
- import android.app.Activity;
- import android.os.Bundle;
- import android.view.Gravity;
- import android.view.LayoutInflater;
- import android.view.View;
- import android.view.View.OnClickListener;
- import android.view.WindowManager.LayoutParams;
- import android.widget.Button;
- import android.widget.PopupWindow;
- import android.widget.Toast;
- public class PopwindowActivity extends Activity implements OnClickListener
- {
- /** Called when the activity is first created. */
- private Button button = null;
- private Button button1 = null;
- private Button button2 = null;
- private Button button3 = null;
- @Override
- public void onCreate(Bundle savedInstanceState)
- {
- super.onCreate(savedInstanceState);
- setContentView(R.layout.main);
- button = (Button) findViewById(R.id.button);
- button.setOnClickListener(this);
- }
- public void onClick(View arg0)
- {
- if (arg0.getId() == R.id.button)
- {
- LayoutInflater layoutInflater = (LayoutInflater) (PopwindowActivity.this)
- .getSystemService(LAYOUT_INFLATER_SERVICE);
- // 获取自定义布局文件poplayout.xml的视图
- View popview = layoutInflater.inflate(R.layout.poplayout, null);
- PopupWindow popWindow = new PopupWindow(popview,
- LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);
- //规定弹窗的位置
- popWindow.showAtLocation(findViewById(R.id.main), Gravity.BOTTOM,
- 0, 0);
- //PopupWindow里的两个Button
- button1 = (Button) popview.findViewById(R.id.button1);
- button1.setOnClickListener(this);
- button2 = (Button) popview.findViewById(R.id.button2);
- button2.setOnClickListener(this);
- }
- else if (arg0.getId() == R.id.button1)
- {
- Toast.makeText(PopwindowActivity.this, "button1", Toast.LENGTH_LONG)
- .show();
- }
- else if (arg0.getId() == R.id.button2)
- {
- Toast.makeText(PopwindowActivity.this, "button2", Toast.LENGTH_LONG)
- .show();
- }
- }
- }
package xiaosi.popwindow; import android.app.Activity; import android.os.Bundle; import android.view.Gravity; import android.view.LayoutInflater; import android.view.View; import android.view.View.OnClickListener; import android.view.WindowManager.LayoutParams; import android.widget.Button; import android.widget.PopupWindow; import android.widget.Toast; public class PopwindowActivity extends Activity implements OnClickListener { /** Called when the activity is first created. */ private Button button = null; private Button button1 = null; private Button button2 = null; private Button button3 = null; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); button = (Button) findViewById(R.id.button); button.setOnClickListener(this); } public void onClick(View arg0) { if (arg0.getId() == R.id.button) { LayoutInflater layoutInflater = (LayoutInflater) (PopwindowActivity.this) .getSystemService(LAYOUT_INFLATER_SERVICE); // 获取自定义布局文件poplayout.xml的视图 View popview = layoutInflater.inflate(R.layout.poplayout, null); PopupWindow popWindow = new PopupWindow(popview, LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT); //规定弹窗的位置 popWindow.showAtLocation(findViewById(R.id.main), Gravity.BOTTOM, 0, 0); //PopupWindow里的两个Button button1 = (Button) popview.findViewById(R.id.button1); button1.setOnClickListener(this); button2 = (Button) popview.findViewById(R.id.button2); button2.setOnClickListener(this); } else if (arg0.getId() == R.id.button1) { Toast.makeText(PopwindowActivity.this, "button1", Toast.LENGTH_LONG) .show(); } else if (arg0.getId() == R.id.button2) { Toast.makeText(PopwindowActivity.this, "button2", Toast.LENGTH_LONG) .show(); } } }
poplayout.xml
- <?xml version="1.0" encoding="utf-8"?>
- <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:gravity="center_horizontal"
- android:orientation="horizontal" >
- <Button
- android:id="@+id/button1"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:background="@drawable/colorframe_1" />
- <Button
- android:id="@+id/button2"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:background="@drawable/colorframe_3" />
- </LinearLayout>
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="wrap_content" android:layout_height="wrap_content" android:gravity="center_horizontal" android:orientation="horizontal" > <Button android:id="@+id/button1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:background="@drawable/colorframe_1" /> <Button android:id="@+id/button2" android:layout_width="wrap_content" android:layout_height="wrap_content" android:background="@drawable/colorframe_3" /> </LinearLayout>
main.xml
- <?xml version="1.0" encoding="utf-8"?>
- <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
- android:id="@+id/main"
- android:layout_width="fill_parent"
- android:layout_height="fill_parent"
- android:orientation="vertical"
- android:background="@drawable/background">
- <Button
- android:id="@+id/button"
- android:layout_width="fill_parent"
- android:layout_height="wrap_content"
- android:text="点击查看效果" />
- <ImageView
- android:layout_width="fill_parent"
- android:layout_height="wrap_content"
- android:src="@drawable/a" />
- </LinearLayout>
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/main" android:layout_width="fill_parent" android:layout_height="fill_parent" android:orientation="vertical" android:background="@drawable/background"> <Button android:id="@+id/button" android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="点击查看效果" /> <ImageView android:layout_width="fill_parent" android:layout_height="wrap_content" android:src="@drawable/a" /> </LinearLayout>
以上只是用来学习之用,拿出来和大家一起分享一下。
有想要源代码的给我留言。
- 顶
- 4
- 踩
- 0
- 2楼 zouzhigang96 2013-08-13 17:37发表 [回复] [引用] [举报]
- 很不错。 谢谢楼主分享
- 1楼 dingxinssy 2012-03-19 11:31发表 [回复] [引用] [举报]
- 看了楼主不少文章,内容比较简单,我也是都是简单的掠过,呵呵 我差的还很多,想和楼主多交流下 qq 296506597
- 个人资料
- 访问:441662次
- 积分:10040分
- 排名:第316名
- 原创:495篇
- 转载:217篇
- 译文:0篇
- 评论:272条
- 文章搜索
- 博客专栏
Android进阶2
文章:17篇 阅读:27098 |
Android菜鸟分享
文章:44篇 阅读:83322 |
- 友情链接
- 文章分类
- Android(55)
- Java(89)
- Android进阶(38)
- Android总结(3)
- Android进阶2(23)
- Android开发技巧(7)
- Android(转载)(77)
- Div+CSS+JavaScript(37)
- OJ(70)
- 算法(54)
- 九度&天勤OJ(198)
- Linux(3)
- 我的工具(7)
- 南阳理工(7)
- 计算机(7)
- 杂谈(7)
- JSP(4)
- 剑指Offer(18)
- Mysql(0)
- c#(1)
- 阅读排行
- Android得到控件在屏幕中的坐标(9596)
- Android视频教学下载大全(VeryCD上)(7439)
- Android进阶2之Activity之间数据交流(onActivityResult的用法)(6006)
- android图片特效处理之模糊效果(5551)
- Android学习笔记进阶之在图片上涂鸦(能清屏)(4885)
- Android学习笔记之滑动翻页(屏幕切换)(4506)
- 阿里巴巴2013笔试题(4206)
- Android进阶2之PopupWindow弹窗(有点悬浮窗的感觉)(4041)
- android图片特效处理之怀旧效果(3953)
- android图像处理系列之三--图片色调饱和度、色相、亮度处理(3876)
- 评论排行
- 最新评论
-
UVA 10878 - Decode the tape
飞天小鹭flying: @Running_dog:这种方法耗时比较长,用getchar就没有这种问题啦!
-
UVA 10878 - Decode the tape
飞天小鹭flying: #includeint main(){ char c; int a=0; int i=0; whil...
-
阿里巴巴2013笔试题
feipeixuan: 去了?
-
Android进阶2之图片倒影效果
小梦: @zhangfengyueruxiang:很明显是那张图片的名字
-
UVA 10878 - Decode the tape
Running_dog: 为什么这个用c++交是AC 用ANSI C交是runtime error啊 跪求大神指点
-
Android得到控件在屏幕中的坐标
zhongxiaweimian: 那么要如何知道UI控件全部加载完了呢?
-
Android学习笔记之滑动翻页(屏幕切换)
尹梦龙: 谢谢了
-
Android进阶2之APK方式换肤
rengfeng: 其实就是切换背景图嘛......
-
阿里巴巴2013笔试题
继续微笑lsj: 略难啊
-
阿里巴巴2013笔试题
或许下一个路口: 有谁分析一下19,20,21吗?