目录
效果图:
1.简单实现一个PoupWindow
例子:
新建一个包,命名为PoupWindow
新建一个Empty Activity,命名为PoupWindowActivity:
在activity_main布局文件设置一个按钮跳转到PoupWindowActivity,这个活动:
然后再MainActivity,获取按钮控件实体,并绑定监听器:
打开activity_poup_window的布局文件,添加一个按钮:
在PoupWindowActivity,获取控件实体,并绑定监听器:
新建一个布局文件为这个PoupWindow提供子布局:
命名为:layout_poupwindow
设置一个列表:
代码如下:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent">
<TextView
android:id="@+id/TextView_goodId"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:textSize="25sp"
android:textColor="@color/colorPrimaryDark"
android:text="很好"
android:gravity="center_horizontal"
android:layout_marginTop="10dp"
android:layout_marginBottom="10dp"/>
<View
android:layout_width="match_parent"
android:layout_height="1dp"
android:background="@color/colorGrid"/>
<View
android:layout_width="match_parent"
android:layout_height="1dp"
android:background="@color/colorGrid"/>
<TextView
android:id="@+id/TextView_sosoId"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:textSize="25sp"
android:textColor="@color/colorPrimaryDark"
android:text="一般"
android:gravity="center_horizontal"
android:layout_marginTop="10dp"
android:layout_marginBottom="10dp"/>
<View
android:layout_width="match_parent"
android:layout_height="1dp"
android:background="@color/colorGrid"/>
<TextView
android:id="@+id/TextView_badId"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:textSize="25sp"
android:textColor="@color/colorPrimaryDark"
android:text="糟糕"
android:gravity="center_horizontal"
android:layout_marginTop="10dp"
android:layout_marginBottom="10dp"/>
</LinearLayout>
回到PoupWindowActivity:
现在就可以运行程序了:
2.为PoupWindow设置监听事件
同样也是可以为这个PoupWindow的很好、一般、糟糕设置监听事件:
整体代码:
package com.example.yuan.e06_gridview.PoupWindow;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Button;
import android.widget.PopupWindow;
import android.widget.TextView;
import com.example.yuan.e05_listview.R;
import com.example.yuan.e06_gridview.util.ToastUtil;
public class PoupWindowActivity extends AppCompatActivity {
//声明引用
private Button mPWButton;
private PopupWindow mPoup;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_poup_window);
//获取控件实体
mPWButton = (Button) findViewById(R.id.PoupWindow_Id1);
// PoupWindowListener listener =new PoupWindowListener();
// mPWButton.setOnClickListener(listener);
//设置点击事件
mPWButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (v.getId() == R.id.PoupWindow_Id1){
//把layout_popwindow布局引荐引入到这个Activity
View view = getLayoutInflater().inflate(R.layout.layout_popwindow,null);
//设置PoupWindow的布局、宽度和按钮一致和高度包含内容
//获取控件对象
TextView goodtextView = (TextView) view.findViewById(R.id.TextView_goodId);
TextView sosotextView = (TextView) view.findViewById(R.id.TextView_sosoId);
TextView badtextView = (TextView) view.findViewById(R.id.TextView_badId);
goodtextView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
ToastUtil.showMsg(getApplicationContext(),"很好");
}
});
sosotextView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
ToastUtil.showMsg(getApplicationContext(),"一般");
}
});
badtextView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
ToastUtil.showMsg(getApplicationContext(),"糟糕");
}
});
mPoup = new PopupWindow(view,mPWButton.getWidth(), ViewGroup.LayoutParams.WRAP_CONTENT);
//点击外部的时候可以收回
mPoup.setOutsideTouchable(true);
//按键按一下收回,再按一次弹出
mPoup.setFocusable(true);
//显示在按钮的下面
mPoup.showAsDropDown(mPWButton);
}
}
});
}
}
3.为PoupWindow实则按压效果
顺便再设置一下点击效果吧:
新建一个drawable文件,根布局为selector:
然后回到layout_poupwindow设置TextView控件布局文件的背景色:
再次运行程序,现在就拥有了点击事件和按压效果了: