`
abc20899
  • 浏览: 914799 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

PopupWindow

阅读更多
1. 定义布局 供PopupWindow使用 如:hello.xml

<?xml version="1.0" encoding="utf-8"?>  
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:orientation="horizontal" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    android:padding="10dp" 
    >  
<ImageView    
    android:id="@+id/image" 
    android:layout_width="wrap_content"   
    android:layout_height="wrap_content"   
    android:src="@drawable/robot" />  
<LinearLayout   
    android:orientation="vertical" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:paddingLeft="20dip" 
    >  
<TextView    
    android:layout_width="wrap_content"   
    android:layout_height="wrap_content"   
    android:text="HelloPop!" 
    />  
<Button    
    android:id="@+id/helloButton" 
    android:layout_width="100dip"   
    android:layout_height="wrap_content"   
    android:text="OK" 
    />  
</LinearLayout>  
</LinearLayout> 

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="horizontal"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:padding="10dp"
    >
<ImageView 
android:id="@+id/image"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:src="@drawable/robot" />
<LinearLayout
    android:orientation="vertical"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:paddingLeft="20dip"
    >
<TextView 
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="HelloPop!"
    />
<Button 
android:id="@+id/helloButton"
    android:layout_width="100dip"
    android:layout_height="wrap_content"
    android:text="OK"
    />
</LinearLayout>
</LinearLayout>



2. 通过LayoutInflater 得到hello.xml 的 View view

Java代码 
view = this.getLayoutInflater().inflate(R.layout.hello, null); 

view = this.getLayoutInflater().inflate(R.layout.hello, null);

3. 创建PopupWindow pop 使用上面布局文件view

Java代码 
pop = new PopupWindow(view,500,200); 

pop = new PopupWindow(view,500,200);

4. 弹出PopupWindow

* 定义布局文件:main.xml 包括一个Button

Java代码 
<?xml version="1.0" encoding="utf-8"?>  
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:orientation="vertical" 
    android:id="@+id/main" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    >  
<TextView    
    android:layout_width="fill_parent"   
    android:layout_height="wrap_content"   
    android:text="pop demo!" 
    />  
<Button    
    android:id="@+id/button" 
    android:layout_width="fill_parent"   
    android:layout_height="wrap_content"   
    android:text="to pop!" 
    />  
</LinearLayout> 

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:id="@+id/main"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    >
<TextView 
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:text="pop demo!"
    />
<Button 
android:id="@+id/button"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:text="to pop!"
    />
</LinearLayout>




* 弹出:有2种方式:一个是下拉方式 一个是指定位置

- 下拉:

Java代码 
findViewById(R.id.button).setOnClickListener(new View.OnClickListener() {  
              
            public void onClick(View v) {  
                    // TODO Auto-generated method stub  
                pop.showAsDropDown(v);  
            }  
    
    }); 

findViewById(R.id.button).setOnClickListener(new View.OnClickListener() {
           
            public void onClick(View v) {
                    // TODO Auto-generated method stub
            pop.showAsDropDown(v);
            }
 
    });



- 指定位置:

Java代码 
findViewById(R.id.button).setOnClickListener(new View.OnClickListener() {  
              
            public void onClick(View v) {  
                    // TODO Auto-generated method stub  
                pop.showAtLocation(findViewById(R.id.main), Gravity.CENTER, 20, 20);  
                  
            }  
    
    }); 

findViewById(R.id.button).setOnClickListener(new View.OnClickListener() {
           
            public void onClick(View v) {
                    // TODO Auto-generated method stub
            pop.showAtLocation(findViewById(R.id.main), Gravity.CENTER, 20, 20);
           
            }
 
    });



5. 取消

Java代码 
view.findViewById(R.id.helloButton).setOnClickListener(new View.OnClickListener() {  
              
            public void onClick(View v) {  
                    // TODO Auto-generated method stub  
                pop.dismiss();  
                  
            }  
    
    }); 

view.findViewById(R.id.helloButton).setOnClickListener(new View.OnClickListener() {
           
            public void onClick(View v) {
                    // TODO Auto-generated method stub
            pop.dismiss();
           
            }
 
    });

6. 其他问题:

* 发现很多人对PopupWindow 里面包含ListView后 对具体哪个item被点击的获取有疑问 所以就顺便测试一下 发现和普通用法一样啊 没什么特别之处啊 现在把用法和大家分享分享



写道
因为ListView是展开显示的 会导致不美观 所以以Spinner为例




6.1. 定义包含Spinner 的布局文件 hello.xml

Java代码 
<?xml version="1.0" encoding="utf-8"?>  
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:orientation="vertical" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    >  
<LinearLayout   
    android:orientation="horizontal" 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    >  
<ImageView    
    android:id="@+id/image" 
    android:layout_width="wrap_content"   
    android:layout_height="wrap_content"   
    android:src="@drawable/robot" />  
<TextView    
    android:layout_width="wrap_content"   
    android:layout_height="wrap_content"   
    android:text="HelloPop!" 
    />  
</LinearLayout>  
<Spinner   
        android:id="@+id/spinner"   
        android:layout_width="wrap_content"   
        android:layout_height="40dip"/>  
</LinearLayout> 

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    >
<LinearLayout
    android:orientation="horizontal"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    >
<ImageView 
android:id="@+id/image"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:src="@drawable/robot" />
<TextView 
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="HelloPop!"
    />
</LinearLayout>
<Spinner
        android:id="@+id/spinner"
        android:layout_width="wrap_content"
        android:layout_height="40dip"/>
</LinearLayout>

6.2. 得到Spinner的实例:spinner

Java代码 
spinner = (Spinner)view.findViewById(R.id.spinner); 

spinner = (Spinner)view.findViewById(R.id.spinner);

6.3. 绑定Spinner与具体数据 本例以联系人为例

Java代码 
public void specifySpinner(){  
        Cursor c = getContentResolver().query(People.CONTENT_URI,   
                null, null, null, null);  
        SimpleCursorAdapter adapter = new SimpleCursorAdapter(this,  
                android.R.layout.simple_list_item_1,c,   
                new String[] {People.NAME},   
                new int[] {android.R.id.text1});  
        adapter.setDropDownViewResource(  
                android.R.layout.simple_spinner_dropdown_item);  
          
          
        spinner.setAdapter(adapter);  
    } 

public void specifySpinner(){
    Cursor c = getContentResolver().query(People.CONTENT_URI,
                null, null, null, null);
        SimpleCursorAdapter adapter = new SimpleCursorAdapter(this,
                android.R.layout.simple_list_item_1,c,
                new String[] {People.NAME},
                new int[] {android.R.id.text1});
        adapter.setDropDownViewResource(
                android.R.layout.simple_spinner_dropdown_item);
       
       
        spinner.setAdapter(adapter);
    }

写道
别忘了联系人访问权限:

<uses-permission android:name="android.permission.READ_CONTACTS" />


6.4. 具体item的获取:

Java代码 
spinner.setOnItemSelectedListener(new OnItemSelectedListener(){  
 
            public void onItemSelected(AdapterView<?> adapter,View v,  
                    int pos, long id) {  
                updateTitle(pos);  
            }  
 
            public void onNothingSelected(AdapterView<?> arg0) {  
                // TODO Auto-generated method stub  
                  
            }  
 
        }); 

spinner.setOnItemSelectedListener(new OnItemSelectedListener(){

            public void onItemSelected(AdapterView<?> adapter,View v,
                    int pos, long id) {
            updateTitle(pos);
            }

public void onNothingSelected(AdapterView<?> arg0) {
// TODO Auto-generated method stub

}

        });

写道
updateTitle(int) 用来把位置在标题中显示

public void updateTitle(int i){
this.setTitle("HelloPop:"+i);
}
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics