`
蓝月儿
  • 浏览: 50271 次
  • 性别: Icon_minigender_2
  • 来自: 北京
社区版块
存档分类
最新评论

popupwindow练习

阅读更多
今天查资源练习了这个的使用,对于焦点问题,整的脑袋有点大,不知道是模拟器原因 还是 程序原因,在弹出窗口里德按钮点击效果总是不明显。有时弹出窗口显示时,返回键感觉不好使,退出整个程序。晕了。不过收益还是挺大的了,学会使用了。有的时候alertdialog给他setView也是可行的,在android ophone 完全开发讲义 上那个悬浮的activity也很好,设置android:theme属性。
activity的代码:
import android.app.Activity;
import android.os.Bundle;
import android.view.Gravity;
import android.view.MotionEvent;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.PopupWindow;
import android.widget.PopupWindow.OnDismissListener;
import android.widget.TextView;
import android.widget.Toast;

public class TestPopwindow extends Activity {
    /** Called when the activity is first created. */
	private TextView txChange=null;
	private Button btShowWindow=null;
	private PopupWindow pop=null;
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        
        View popview=this.getLayoutInflater().inflate(R.layout.popwindow,null);
		pop=new PopupWindow(popview,ViewGroup.LayoutParams.WRAP_CONTENT,ViewGroup.LayoutParams.WRAP_CONTENT,true);
		pop.setAnimationStyle(android.R.anim.slide_in_left);
		pop.setBackgroundDrawable(getResources().getDrawable(android.R.drawable.screen_background_light));
		pop.setOnDismissListener(new OnDismissListener()//消失监听
		{

			public void onDismiss() {
				// TODO Auto-generated method stub
				System.out.println("TestPopWindow.pop.OnDismissListener");
				Toast.makeText(TestPopwindow.this,"悬浮消失",Toast.LENGTH_SHORT).show();
			}
			
		});
//		pop.setTouchable(true);//设置pop是否可以点击,默认是true,为false时点击屏幕响应的是屏幕的,里面的控件无焦点
//		pop.setTouchInterceptor(new OnTouchListener()//pop的touchable设为true,监听发生在pop上的触屏事件,在屏幕上的事件也是可以响应的
//		{
//
//			public boolean onTouch(View v, MotionEvent event) {
//				// TODO Auto-generated method stub
//				System.out.println("TestPopWindow.pop.OnTouchInterceptor");
////				pop.dismiss();
//				return true;
//			}
//			
//		});
		pop.setOutsideTouchable(true);//默认是false,控制pop是否监听pop以外的触屏事件。这个方法在pop可触,并且no focusable时有意义。这意味着在pop外点击屏幕,
        findViews();					//触屏是在后面的activity响应的。在pop内touch无效,在外时 pop dismiss,按钮可点
        btShowWindow.setOnClickListener(ShowWindow);
    }

	@Override
	public boolean onTouchEvent(MotionEvent event) {//在popwindow出现时不触发,他也是有焦点的,
//		popwindow不设置setOutsideTouchable(false),setTouchable(true),setTouchInterceptor,点击popwindow外部,消失
		// TODO Auto-generated method stub
		System.out.println("TestPopWindow.onTouchEvent");
		return super.onTouchEvent(event);
	}

	Button.OnClickListener ShowWindow=new Button.OnClickListener(){

		public void onClick(View v) {
			// TODO Auto-generated method stub
			showPopWindow();
		}
    };
    
    private void showPopWindow() {
		// TODO Auto-generated method stub
    	View popcontentview=pop.getContentView();
    	TextView tvinfor=(TextView) popcontentview.findViewById(R.id.textview_popwindow_showinfo);
    	tvinfor.setText("测试窗口");
    	ImageView iview=(ImageView) popcontentview.findViewById(R.id.imageview_popwindow_showimage);
    	iview.setImageResource(R.drawable.android11);
    	Button btTest=(Button) popcontentview.findViewById(R.id.button_popwindow_showinfo);
    	btTest.requestFocus();//pop set touchable 为true,并且pop 有焦点,显示点击效果
    	pop.setFocusable(true);
    	System.out.println("btTest.hasFocus()========"+btTest.hasFocus());//popupwindow中的按钮无焦点
    	System.out.println("pop.isFocusable()========"+pop.isFocusable());//输出 true
    	
    	System.out.println("TestPopwindow.this.hasWindowFocus()===="+TestPopwindow.this.hasWindowFocus());
		System.out.println("TestPopwindow.this.pop.isFocusable()===="+TestPopwindow.this.pop.isFocusable());
//    	btTest.hasFocus();
    	btTest.setOnClickListener(new  Button.OnClickListener()
    	{

			public void onClick(View v) {
				// TODO Auto-generated method stub
				TextView poptextview=(TextView)pop.getContentView().findViewById(R.id.textview_popwindow_showinfo);
				System.out.println("TestPopwindow.pop.btTest.click.v===="+v.getId());
				poptextview.setText("after click");
				txChange.setText("have changed");
//				pop.dismiss();
			}
    	});
		pop.setWidth(200);//设置这个悬浮的宽高尺寸
		pop.setHeight(300);
		pop.setAnimationStyle(R.style.PopupAnimation);//设置出现和消失的动画
		pop.showAtLocation(findViewById(R.id.linearlayout_main_show),Gravity.CENTER|Gravity.CENTER, 0,0);
	}
	
	private void findViews() {
		// TODO Auto-generated method stub
		btShowWindow=(Button)findViewById(R.id.button_main_showwindow);
		txChange=(TextView)findViewById(R.id.textview_main_showchange);
	}
}

pop布局
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
  xmlns:android="http://schemas.android.com/apk/res/android"
  android:id="@+id/linearlayout_popwindow_view"
  android:background="#b0000000"
  android:orientation="vertical"
  android:layout_width="wrap_content"
  android:layout_height="wrap_content">
  <ImageView
  android:id="@+id/imageview_popwindow_showimage"
  android:src="@drawable/icon"
  android:layout_marginLeft="10dip"
  android:layout_marginTop="30dip"
  android:layout_width="wrap_content"
  android:layout_height="wrap_content"
  />
  <TextView
  android:id="@+id/textview_popwindow_showinfo"
  android:text="information"
  android:textSize="18dip"
  android:layout_marginTop="15dip"
  android:layout_width="fill_parent"
  android:layout_height="wrap_content"
  />
   <Button
  android:id="@+id/button_popwindow_showinfo"
  android:text="buttontest"
  android:textSize="18dip"
  android:layout_marginTop="15dip"
  android:layout_width="fill_parent"
  android:layout_height="wrap_content"
  />
</LinearLayout>

动画效果借助了eoeandroid上的效果http://www.eoeandroid.com/thread-48051-1-1.html

分享到:
评论

相关推荐

    Android应用源码之PopupWindowSample-IT计算机-毕业设计.zip

    同时,对于进行毕业设计的学生,这个项目提供了一个实战练习的平台,有助于理论知识与实践技能的结合。 总结起来,"Android应用源码之PopupWindowSample"是一个关于PopupWindow使用和实践的示例,它涵盖了...

    Password Manager

    ... 功能: 1. 登录,用户管控。 2. 增、删、修改、查看用户保存数据 涉及android开发技术 1.activity切换 2.option menu/Context menu 3.popupwindow/listview ...开发环境:Eclipse Juno+ADT20.0+Android SDK ...练习程序

    myPopWindow2

    在Android开发中,`PopWindow`和`Dialog`都是用于创建弹出式界面的重要组件,它们为用户提供了一种非侵入性的交互方式,...记得结合实际项目练习,理论与实践相结合,这样才能更好地理解和掌握这两种弹出式界面的使用。

    javasmack源码-Uplus_Android:uplus的android版!用java的ssh框架写出一套即时通讯web应用基本也有朋友

    基本也有朋友圈的小功能,而android端就是这个,2014年练习作品 此app是基于现即时通讯软件流行的xmpp协议 xmpp+asmack+openfire 服务器在web端开放了9090以供web后台使用 #接下来介绍整个app构架 我先排除掉不介绍的...

    模仿微信界面开发demo

    在IT行业中,模仿微信界面开发是一项常见的练习,旨在提升开发者对于UI设计和用户体验的理解。这个“模仿微信界面开发demo”项目显然聚焦于Android平台,因为微信主要作为一个移动应用被广泛使用。下面我们将深入...

    Android开发教程:仿通讯录ListView小例子

    这个练习不仅可以帮助你掌握ListView的基本用法,还能让你了解到如何在实际项目中整合数据和视图,提升Android开发技能。记得实践是检验真理的唯一标准,动手尝试才能更好地理解和掌握这些知识点。

    Android典型技术模块开发详解

    9.6 动画组件——PopupWindow 9.7 自定义View 9.8 控件扩展(表格) 9.8.1 设计实体类 9.8.2 基于ListView的实现 9.9 本章小结 第10章 数据存储 10.1 File(文件) 10.1.1 java.io包的方法 10.1.2 openFileInput和...

    Android秋招面试指南

    8. Android特定功能:如Bitmap压缩策略、Context详解、全局异常处理、虚拟机及编译过程、Apk安装过程、PopupWindow与Dialog的区别等。 9. 开源框架解析:如OkHttp、Retrofit、EventBus、OkHttp等框架的源码解析。 10...

    使用Bmob实现失物招领app

    失物招领app,这个app是非常适合初学者在学习数据库或bmob云数据库开发时练习的项目。在我完成这个app的开发后,确实收获很多,那么。这篇文章我来整理一下思路和开发时遇到的坎坷和解决方法。 首先常规的按流程来,...

Global site tag (gtag.js) - Google Analytics