PopupWindow
[功能]
PopupWindow 作為一種使用者提醒 而且其開銷也比Activity要小
[代碼 步驟]
1. 定義布局 供PopupWindow使用 如:hello.xml
Java代碼
- <?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);
}
6.5. emulator 運行:
http://www.iteye.com/topic/604462