android之弹窗popupWindow

来源:互联网 发布:360游戏优化 编辑:程序博客网 时间:2024/05/17 07:16

        最近一直在研究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, 2020);  在我的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>

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



原创粉丝点击