android之彈窗popupWindow

來源:互聯網
上載者:User

        最近一直在研究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>

        我只是改了原文的一小部分,也知道自己確實很欠缺,欠缺的很多,但是我肯定會做的更好!

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.