如何实现PopWindows的详细案例

这是项目的俯瞰图:

现在首先是main的xml文件布局:

<RelativeLayout xmlns:

android="http://schemas.android.com/apk/res/android"   

  xmlns:tools="http://schemas.android.com/tools"   

  android:layout_width="match_parent"   

  android:layout_height="match_parent"   

  android:paddingBottom="@dimen/activity_vertical_margin"    

android:paddingLeft="@dimen/activity_horizontal_margin"    

android:paddingRight="@dimen/activity_horizontal_margin"    

android:paddingTop="@dimen/activity_vertical_margin"  

   tools:context=".MainActivity" >

 <LinearLayout     

android:gravity="center_horizontal"    

  android:id="@+id/mybutton"     

android:layout_height="wrap_content"     

android:layout_width="match_parent"    

  android:orientation="horizontal">   

  <TextView                

android:id="@+id/aboutname"        

android:textSize="28sp"        

android:layout_width="wrap_content"        

android:layout_height="wrap_content"      

   android:text="京" />    <ImageView    

    android:paddingTop="5dp"      

  android:layout_height="wrap_content"     

   android:layout_width="wrap_content"      

  android:src="@drawable/jiantou"/>

</LinearLayout>

</RelativeLayout>

 

界面如图:

下面是需要悬浮的布局文件。效果如图:

其xml文件如下:

<?xml version="1.0" encoding="utf-8"?>

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"   

  android:layout_width="match_parent"    

android:layout_height="match_parent"    

android:orientation="vertical">   

  <LinearLayout        

android:id="@+id/setname"   

 android:layout_height="match_parent"        

android:layout_width="match_parent"        

android:orientation="vertical">        

<TableRow        

android:layout_height="wrap_content"        

android:orientation="vertical"        

android:layout_width="match_parent">        

<TextView            

android:id="@+id/beijing"            

android:textSize="25dp"            

android:layout_height="wrap_content"            

android:layout_width="wrap_content"            

android:text="京"            

android:padding="8dp"/>        

<TextView            

android:id="@+id/tianjing"            

android:textSize="25dp"            

android:layout_height="wrap_content"          

   android:layout_width="wrap_content"           

  android:text="津"          

   android:padding="8dp"/>        

<TextView            

android:id="@+id/shanghai"     

 android:textSize="25dp"         

    android:layout_height="wrap_content"       

      android:layout_width="wrap_content"        

     android:text="沪"      

       android:padding="6dp"/>        

<TextView            

android:id="@+id/chongqin"           

  android:textSize="25dp"            

android:layout_height="wrap_content"            

android:layout_width="wrap_content"            

android:text="渝"            

android:padding="6dp"/>        

<TextView            

android:id="@+id/hebei"           

  android:textSize="25dp"          

   android:layout_height="wrap_content"          

   android:layout_width="wrap_content"           

  android:text="冀"         

    android:padding="6dp"/>       

  <TextView            

android:id="@+id/henan"            

android:textSize="25dp"       

      android:layout_height="wrap_content"            

android:layout_width="wrap_content"            

android:text="豫"           

  android:padding="6dp"/>

        <TextView            

android:id="@+id/yunnan"            

android:layout_width="wrap_content"            

android:layout_height="wrap_content"         

    android:padding="6dp"            

android:text="云"            

android:textSize="25dp" />

      <TextView          

android:id="@+id/liaonin"           

  android:layout_width="wrap_content"            

android:layout_height="wrap_content"          

   android:padding="6dp"           

  android:text="辽"            

android:textSize="25dp" />              

</TableRow>      

  <TableRow        

android:layout_height="wrap_content"        

android:orientation="horizontal"        

android:layout_width="match_parent">

          

        <TextView            

android:id="@+id/hlj"             

android:textSize="25dp"            

android:layout_height="wrap_content"            

android:layout_width="wrap_content"          

   android:text="黑"            

android:padding="6dp"/>       

  <TextView            

android:id="@+id/hunan"             

android:textSize="25dp"            

android:layout_height="wrap_content"          

   android:layout_width="wrap_content"            

android:text="湘"            

android:padding="6dp"/>      

   <TextView            

android:id="@+id/anhui"             

android:textSize="25dp"            

android:layout_height="wrap_content"            

android:layout_width="wrap_content"           

  android:text="皖"            

android:padding="6dp"/>        

<TextView           

  android:id="@+id/shandong"             

android:textSize="25dp"            

android:layout_height="wrap_content"            

android:layout_width="wrap_content"            

android:text="鲁"            

android:padding="6dp"/>        

<TextView            

android:id="@+id/xinjiang"             

android:textSize="25dp"            

android:layout_height="wrap_content"          

   android:layout_width="wrap_content"           

  android:text="新"            

android:padding="6dp"/>        

<TextView            

android:id="@+id/jiangsu"             

android:textSize="25dp"            

android:layout_height="wrap_content"            

android:layout_width="wrap_content"            

android:text="苏"            

android:padding="6dp"/>        

<TextView            

android:id="@+id/zhejiang"             

android:textSize="25dp"            

android:layout_height="wrap_content"            

android:layout_width="wrap_content"           

  android:text="浙"            

android:padding="6dp"/>        

<TextView            

android:id="@+id/jiangxi"             

android:textSize="25dp"            

android:layout_height="wrap_content"            

android:layout_width="wrap_content"            

android:text="赣"            

android:padding="6dp"/>              

</TableRow>  <TableRow        

android:layout_height="wrap_content"       

  android:orientation="horizontal"        

android:layout_width="match_parent">                

<TextView            

android:id="@+id/hubei"             

android:textSize="25dp"            

android:layout_height="wrap_content"           

  android:layout_width="wrap_content"           

  android:text="鄂"            

android:padding="6dp"/>        

<TextView            

android:id="@+id/guangxi"            

  android:textSize="25dp"            

android:layout_height="wrap_content"            

android:layout_width="wrap_content"            

android:text="桂"            

android:padding="6dp"/>        

<TextView            

android:id="@+id/gansu"             

android:textSize="25dp"            

android:layout_height="wrap_content"           

  android:layout_width="wrap_content"            

android:text="甘"            

android:padding="6dp"/>        

<TextView            

android:id="@+id/shanxi"            

  android:textSize="25dp"            

android:layout_height="wrap_content"           

  android:layout_width="wrap_content"            

android:text="晋"            

android:padding="6dp"/>        

<TextView            

android:id="@+id/neimen"            

  android:textSize="25dp"            

android:layout_height="wrap_content"            

android:layout_width="wrap_content"            

android:text="蒙"            

android:padding="6dp"/>        

<TextView            

android:id="@+id/xian"             

android:textSize="25dp"            

android:layout_height="wrap_content"            

android:layout_width="wrap_content"            

android:text="陕"            

android:padding="6dp"/>        

<TextView            

android:id="@+id/jiling"             

android:textSize="25dp"            

android:layout_height="wrap_content"            

android:layout_width="wrap_content"            

android:text="吉"            

android:padding="6dp"/>        

<TextView            

android:id="@+id/fujian"             

android:textSize="25dp"            

android:layout_height="wrap_content"           

  android:layout_width="wrap_content"           

  android:text=" 闽"            

android:padding="6dp"/>              

</TableRow>         

<TableRow        

android:layout_height="wrap_content"        

android:orientation="horizontal"        

android:layout_width="match_parent">                

<TextView            

android:id="@+id/guizhou"             

android:textSize="25dp"            

android:layout_height="wrap_content"            

android:layout_width="wrap_content"            

android:text=" 贵"            

android:padding="6dp"/>        

<TextView                        

android:id="@+id/guangdong"             

android:textSize="25dp"          

   android:layout_height="wrap_content"           

  android:layout_width="wrap_content"            

android:text="粤"            

android:padding="6dp"/>        

<TextView            

android:id="@+id/qinghai"             

android:textSize="25dp"            

android:layout_height="wrap_content"            

android:layout_width="wrap_content"            

android:text="青"            

android:padding="6dp"/>        

<TextView            

android:id="@+id/xizang"             

android:textSize="25dp"            

android:layout_height="wrap_content"            

android:layout_width="wrap_content"            

android:text="藏"            

android:padding="6dp"/>        

<TextView            

android:id="@+id/sichuan"             

android:textSize="25dp"            

android:layout_height="wrap_content"            

android:layout_width="wrap_content"            

android:text="川"            

android:padding="6dp"/>        

<TextView            

android:id="@+id/ninxia"             

android:textSize="25dp"            

android:layout_height="wrap_content"            

android:layout_width="wrap_content"            

android:text="宁"            

android:padding="6dp"/>         

<TextView             

android:id="@+id/hainan"             

android:textSize="25dp"            

android:layout_height="wrap_content"            

android:layout_width="wrap_content"            

android:text=" 琼"           

  android:padding="6dp"/>        

<TextView            

android:id="@+id/taiwan"             

android:textSize="25dp"            

android:layout_height="wrap_content"           

  android:layout_width="wrap_content"           

  android:text="台"            

android:padding="6dp"/>              

</TableRow>            

<Button            

android:id="@+id/cancel"            

android:layout_width="match_parent"           

  android:layout_height="wrap_content"            

android:layout_marginLeft="18dp"           

  android:layout_marginRight="18dp"            

android:layout_marginTop="15dp"            

android:background="@drawable/bg_btn"            

android:text="取消"            

android:textColor="#FFFFFF"           

  android:textSize="22sp" />  

</LinearLayout>

</LinearLayout>

 

 

 

 

这是主方法里面的代码:

package com.example.mypopwindowdemo;

import android.app.ActionBar.LayoutParams;

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.widget.Button;

import android.widget.LinearLayout;

import android.widget.PopupWindow;

import android.widget.TextView;

public class MainActivity extends Activity {

 LinearLayout mybutton;  

   PopupWindow popWin;   

  Button cancel;   

  View popView;   

  View setname;   

  TextView aboutname;   

  String info;    

TextView beijing,tianjing,shanghai,chongqin,hebei, henan,yunnan,liaonin,hlj,hunan, anhui,shandong,xinjiang,zhejiang,jiangxi,     hubei,guangxi,gansu,shanxi,neimen,     xian,jiling,fujian,guizhou,guangdong,     qinhai,xizang,sichuan,ninxia,hainan,taiwan,jiangsu;  

   @Override     protected void onCreate(Bundle savedInstanceState) {      

   super.onCreate(savedInstanceState);     

    setContentView(R.layout.activity_main);       

  find();

//    mybutton是textview和小三角的组合的Linearlayout,给其设置监听       

mybutton.setOnClickListener(new OnClickListener() {   

@Override

  public void onClick(View v) {

//  取得LayoutInflater对象主要作用是 用来获取布局文件  

 LayoutInflater lay = LayoutInflater.from(MainActivity.this);

//  读取布局管理器,换句话说就是讲布局文件读到一个view当中  

 MainActivity.this.popView = lay.inflate(R.layout.myxiao, null);

 // 实例化popwindow   

popWin = new PopupWindow(popView,LayoutParams.FILL_PARENT,LayoutParams.WRAP_CONTENT,true);

//Gravity.BOTTOM这里是这个悬浮层是从底部显示

  popWin.showAtLocation(MainActivity.this.mybutton, Gravity.BOTTOM, 0, 0);       

  findpopwin();       

  listener();   

setname = popView.findViewById(R.id.setname);     

    cancel = (Button) popView.findViewById(R.id.cancel);   

cancel.setOnClickListener(new OnClickListener() {        

@Override

   public void onClick(View v) {   

  // 关闭弹出窗口    

 popWin.dismiss();    }   });  }

 

 

//  用来获取popwin里面的每个textview的id  

 private void findpopwin() {  

  // TODO Auto-generated method stub    

beijing    = (TextView) popView.findViewById(R.id.beijing);       

tianjing   = (TextView) popView.findViewById(R.id.tianjing);    

    shanghai   = (TextView)popView.findViewById(R.id.shanghai);     

   chongqin   = (TextView)popView.findViewById(R.id.chongqin);      

  hebei      = (TextView)popView.findViewById(R.id.hebei);   

     henan      = (TextView)popView.findViewById(R.id.henan);      

  yunnan     = (TextView)popView.findViewById(R.id.yunnan);      

  liaonin    = (TextView)popView.findViewById(R.id.liaonin);      

  hlj        = (TextView)popView.findViewById(R.id.hlj);       

hunan      = (TextView)popView.findViewById(R.id.hunan);       

anhui      = (TextView)popView.findViewById(R.id.anhui);     

   shandong   = (TextView)popView.findViewById(R.id.shandong);     

   xinjiang   = (TextView)popView.findViewById(R.id.xinjiang);     

   jiangsu    = (TextView)popView.findViewById(R.id.jiangsu);       

zhejiang   = (TextView)popView.findViewById(R.id.zhejiang);      

  jiangxi    = (TextView)popView.findViewById(R.id.jiangxi);       

hubei      = (TextView)popView.findViewById(R.id.hubei);       

guangxi    = (TextView)popView.findViewById(R.id.guangxi);    

    gansu      = (TextView)popView.findViewById(R.id.gansu);       

shanxi     = (TextView)popView.findViewById(R.id.shanxi);       

neimen     = (TextView)popView.findViewById(R.id.neimen);      

  xian       = (TextView)popView.findViewById(R.id.xian);     

   jiling     = (TextView)popView.findViewById(R.id.jiling);      

  fujian     = (TextView)popView.findViewById(R.id.fujian);    

    guizhou    = (TextView)popView.findViewById(R.id.guizhou);      

  guangdong  = (TextView)popView.findViewById(R.id.guangdong);     

   qinhai     = (TextView)popView.findViewById(R.id.qinghai);      

  xizang     = (TextView)popView.findViewById(R.id.xizang);     

   sichuan    = (TextView)popView.findViewById(R.id.sichuan);     

   ninxia     = (TextView)popView.findViewById(R.id.ninxia);     

   hainan     = (TextView)popView.findViewById(R.id.hainan);     

   taiwan     = (TextView)popView.findViewById(R.id.taiwan);     

       }        });    

         }

 

//    给popwin里面的每个值设置产生监听的操作

 private void listener() {  

 beijing.setOnClickListener(new OnListenerImple()); 

  tianjing.setOnClickListener(new OnListenerImple());  

 shanghai.setOnClickListener(new OnListenerImple());

  chongqin.setOnClickListener(new OnListenerImple());  

 hebei.setOnClickListener(new OnListenerImple());

  henan.setOnClickListener(new OnListenerImple());

  yunnan.setOnClickListener(new OnListenerImple());

  liaonin.setOnClickListener(new OnListenerImple());

  hlj.setOnClickListener(new OnListenerImple());  

 hunan.setOnClickListener(new OnListenerImple());  

 anhui.setOnClickListener(new OnListenerImple());   

shandong.setOnClickListener(new OnListenerImple());   

xinjiang.setOnClickListener(new OnListenerImple());

  jiangsu.setOnClickListener(new OnListenerImple());  

 zhejiang.setOnClickListener(new OnListenerImple());

  jiangxi.setOnClickListener(new OnListenerImple());  

 hubei.setOnClickListener(new OnListenerImple());

  guangxi.setOnClickListener(new OnListenerImple());   

gansu.setOnClickListener(new OnListenerImple());   

shanxi.setOnClickListener(new OnListenerImple());   

neimen.setOnClickListener(new OnListenerImple());   

xian.setOnClickListener(new OnListenerImple());

  jiling.setOnClickListener(new OnListenerImple());  

 fujian.setOnClickListener(new OnListenerImple());  

 guizhou.setOnClickListener(new OnListenerImple());  

 guangdong.setOnClickListener(new OnListenerImple());   

qinhai.setOnClickListener(new OnListenerImple());  

 xizang.setOnClickListener(new OnListenerImple());  

 sichuan.setOnClickListener(new OnListenerImple());  

 ninxia.setOnClickListener(new OnListenerImple());  

 hainan.setOnClickListener(new OnListenerImple());

  taiwan.setOnClickListener(new OnListenerImple());      

       }  

private void find() {  

 // TODO Auto-generated method stub  

   aboutname = (TextView)findViewById(R.id.aboutname);      

    mybutton = (LinearLayout)findViewById(R.id.mybutton);       

   cancel = (Button)findViewById(R.id.cancel);  }

 

// 单击popwin里面的每一项的时候产生的操作就是讲本身的text赋值给前面activity_main里面的textview  

private class OnListenerImple implements OnClickListener{

  @Override   

public void onClick(View vv) {   

 // TODO Auto-generated method stub    

TextView tv = (TextView)vv;   

 switch (vv.getId()) {   

 case R.id.beijing:    

 info = beijing.getText().toString();   

  aboutname.setText(info);   

  popWin.dismiss();     break;   

 case R.id.shanghai:   

  info = shanghai.getText().toString();   

  aboutname.setText(info);  

   popWin.dismiss();     break;   

 case R.id.tianjing:  

   info = tianjing.getText().toString();    

 aboutname.setText(info);    

 popWin.dismiss();    

 break;    case R.id.chongqin:   

  info = chongqin.getText().toString();   

  aboutname.setText(info);  

   popWin.dismiss();

    break;  

  case R.id.hebei:    

 info = hebei.getText().toString();     

aboutname.setText(info);  

   popWin.dismiss();  

   break;  

  case R.id.henan:  

   info = henan.getText().toString();    

 aboutname.setText(info);   

  popWin.dismiss();    

 break;

   case R.id.yunnan:

    info = yunnan.getText().toString();    

 aboutname.setText(info);  

   popWin.dismiss();  

   break;    case R.id.liaonin:   

  info = liaonin.getText().toString();

    aboutname.setText(info);   

  popWin.dismiss();  

   break;    case R.id.hlj:     

info = hlj.getText().toString();  

   aboutname.setText(info);  

   popWin.dismiss();  

   break;    case R.id.hunan:    

 info = hunan.getText().toString();    

 aboutname.setText(info);   

  popWin.dismiss();     

break;   

 case R.id.anhui:    

 info = anhui.getText().toString();   

  aboutname.setText(info);    

 popWin.dismiss();    

 break;   

 case R.id.shandong:   

  info = shandong.getText().toString();    

 aboutname.setText(info);   

  popWin.dismiss();     

break;   

 case R.id.xinjiang:    

 info = xinjiang.getText().toString();  

   aboutname.setText(info);    

 popWin.dismiss();    

 break;   

 case R.id.jiangsu:     

info = jiangsu.getText().toString();  

   aboutname.setText(info);   

  popWin.dismiss();   

  break;   

 case R.id.zhejiang:    

 info = zhejiang.getText().toString();

    aboutname.setText(info);    

 popWin.dismiss();   

  break;   

 case R.id.jiangxi:    

 info = jiangxi.getText().toString();    

 aboutname.setText(info);    

 popWin.dismiss();    

 break;  

  case R.id.hubei:   

  info = hubei.getText().toString();    

 aboutname.setText(info);    

 popWin.dismiss();  

   break;    

case R.id.guangxi:  

   info = guangxi.getText().toString();

    aboutname.setText(info);  

   popWin.dismiss();   

  break;   

 case R.id.gansu:

    info = gansu.getText().toString();    

 aboutname.setText(info);   

  popWin.dismiss();  

   break;   

 case R.id.shanxi:    

 info = shanxi.getText().toString();   

  aboutname.setText(info);   

  popWin.dismiss();  

   break;

   case R.id.neimen:   

  info = neimen.getText().toString();    

 aboutname.setText(info);    

 popWin.dismiss();

    break;    case R.id.xian:  

   info = xian.getText().toString();   

  aboutname.setText(info);   

  popWin.dismiss();

    break;  

  case R.id.jiling:    

 info = jiling.getText().toString();    

 aboutname.setText(info);    

 popWin.dismiss();    

 break;  

  case R.id.fujian:    

 info = fujian.getText().toString();  

   aboutname.setText(info);    

 popWin.dismiss();   

  break;    

case R.id.guizhou:  

   info = guizhou.getText().toString();     

aboutname.setText(info);   

  popWin.dismiss();    

 break;   

 case R.id.guangdong:    

 info = guangdong.getText().toString();     

aboutname.setText(info);   

  popWin.dismiss();  

   break;  

  case R.id.qinghai:     

info = qinhai.getText().toString();    

 aboutname.setText(info);   

  popWin.dismiss();    

 break;    

case R.id.xizang:

    info = xizang.getText().toString();    

 aboutname.setText(info);    

 popWin.dismiss();   

  break;   

 case R.id.sichuan:  

   info = sichuan.getText().toString();   

  aboutname.setText(info);     

popWin.dismiss();     break;    

case R.id.ninxia:   

  info = ninxia.getText().toString();  

   aboutname.setText(info);   

  popWin.dismiss();    

 break;    case R.id.hainan:     

info = hainan.getText().toString();   

  aboutname.setText(info);     

popWin.dismiss();   

  break;   

 case R.id.taiwan:    

 info = taiwan.getText().toString();

    aboutname.setText(info);  

   popWin.dismiss();   

  break;         }   }     }

}

 

这是实现效果图:

 

这里是源代码:

 

posted @ 2014-09-10 15:24  清猿啸夜  阅读(589)  评论(0编辑  收藏  举报