最近一直在研究android,還是菜鳥層級,所以想記錄在部落格裡見證自己的成長。老闆給了一個不輕不重的活:介面設計,所以一直在水水的做著,現在就開始記錄下一點一滴,催促自己努力吧!
在網上找了個例子,代碼不全,又查了博主(部落格園---noTice501)其他的文章,再加上自己動手改了改,終於能運行了,運行效果如下,
可能是gridView的設定不對,位移不成功,不過我想要的效果是在最底下的標題列中點擊到某個表徵圖時彈出一個透明的popupwindow,現在離實現不遠了啊,呵呵
MainActivity.java
package me.example.popup01;
import android.app.Activity;
import android.content.Context;
import android.os.Bundle;
import android.view.Gravity;
import android.view.KeyEvent;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.view.View.OnClickListener;
import android.view.ViewGroup.LayoutParams;
import android.widget.BaseAdapter;
import android.widget.Button;
import android.widget.GridView;
import android.widget.ImageView;
import android.widget.PopupWindow;
import android.widget.TextView;
public class MainActivity extends Activity {
private GridView gv;
private Button bt1;
private Button bt2;
private Button bt3;
private Button bt4;
private Button bt5;
private int[] icons = { R.drawable.ic_launcher, R.drawable.ic_launcher,
R.drawable.ic_launcher, R.drawable.ic_launcher,
R.drawable.ic_launcher, R.drawable.ic_launcher,
R.drawable.ic_launcher, R.drawable.ic_launcher,
R.drawable.ic_launcher };
private String[] items = { "瀏覽器", "圖片", "相機", "時鐘", "音樂", "市場", "撥號", "資訊",
"地圖" };
private PopupWindow mPop;
private View layout;
private void initPopWindow() {
if (mPop == null) {
mPop = new PopupWindow(layout, LayoutParams.WRAP_CONTENT,
LayoutParams.WRAP_CONTENT);
}
if (mPop.isShowing()) {
mPop.dismiss();
}
}
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
bt1 = (Button) findViewById(R.id.bt1);
bt2 = (Button) findViewById(R.id.bt2);
bt3 = (Button) findViewById(R.id.bt3);
bt4 = (Button) findViewById(R.id.bt4);
bt5 = (Button) findViewById(R.id.bt5);
layout = View.inflate(this, R.layout.window, null);
gv = (GridView) layout.findViewById(R.id.gv);
MyAdapter adapter = new MyAdapter(this, items, icons);
gv.setAdapter(adapter);
bt1.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
initPopWindow();
mPop.showAsDropDown(v);// 以這個Button為anchor(可以理解為錨,基準),在下方彈出
}
});
bt2.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
initPopWindow();
mPop.showAsDropDown(v, 20, -20);// 橫軸位移20,縱軸-20,一個狀態列的長度
}
});
bt3.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
initPopWindow();
mPop.showAtLocation(layout,
Gravity.CENTER, 0, 0);// 原文為mPop.showAtLocation(PopWindow.this.findViewById(R.id.rl),
// Gravity.TOP | Gravity.LEFT, 20, 20);
在我的eclipse中出錯了,可能因為我用的是2.3.3吧
//所以就把第一個參數改成layout了,下同!
}
});
bt4.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
initPopWindow();
mPop.showAtLocation(layout,
Gravity.BOTTOM | Gravity.LEFT, 0, 60);// 在螢幕頂部|居右,帶位移
}
});
//快顯視窗出現後,點擊“clearOut”(bt5)使快顯視窗消失,人性化的設計應該是點擊螢幕空白處消失的
bt5.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
if (mPop != null) {
mPop.dismiss();
}
}
});
}
public boolean onKeyDown(int keyCode, KeyEvent event) {
// 截獲按鍵事件
if (keyCode == KeyEvent.KEYCODE_MENU) {
initPopWindow();
mPop.showAtLocation(layout, Gravity.BOTTOM
| Gravity.CENTER_HORIZONTAL, 0, 0); // 在螢幕底部
} else if (keyCode == KeyEvent.KEYCODE_BACK) {
if (mPop.isShowing()) {
mPop.dismiss();
} else {
System.exit(0);
}
}
return false;
}
}
// 自訂配接器
class MyAdapter extends BaseAdapter {
private Context _ct;
private String[] _items;
private int[] _icons;
public MyAdapter(Context ct, String[] items, int[] icons) // 構造器,建立時需傳入三個參數
{
_ct = ct;
_items = items;
_icons = icons;
}
@Override
public int getCount() {
return _items.length;
}
@Override
public Object getItem(int arg0) {
return _items[arg0];
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
LayoutInflater factory = LayoutInflater.from(_ct);
View v = (View) factory.inflate(R.layout.gv, null); // 綁定自訂的xml檔案,也可以在這裡建立一個gridView
ImageView iv = (ImageView) v.findViewById(R.id.icon);
TextView tv = (TextView) v.findViewById(R.id.text);
iv.setImageResource(_icons[position]);
tv.setText(_items[position]);
return v;
}
}
activity_Main.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="horizontal"
android:gravity="center"
android:background="@drawable/pic0"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
>
<Button
android:id="@+id/bt1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="btn1"
android:textColor="#00ffff"/>
<Button
android:id="@+id/bt2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="btn2"
android:textColor="#00ffff"/>
<Button
android:id="@+id/bt3"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="btn3"
android:textColor="#00ffff"/>
<Button
android:id="@+id/bt4"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="btn4"
android:textColor="#00ffff"/>
<Button
android:id="@+id/bt5"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="clearOut"
android:textColor="#00ffff"/>
</LinearLayout>
window.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"
>
<GridView
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/gv"
android:background="#808080"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:numColumns="3"
android:gravity="center">
</GridView>
</LinearLayout>
gv.xml
<?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"
>
<ImageView
android:id="@+id/icon"
android:layout_width="wrap_content"
android:layout_height="40px"
android:layout_gravity="center"
/>
<TextView
android:id="@+id/text"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:gravity="center"
android:textColor="#ffffffff"
/>
</LinearLayout>
我只是改了原文的一小部分,也知道自己確實很欠缺,欠缺的很多,但是我肯定會做的更好!