Android实现点击某个按钮指定位置弹出布局
16lz
2021-12-04
package com.topcee.report.report;import android.app.Activity;import android.content.Context;import android.graphics.Color;import android.graphics.drawable.ColorDrawable;import android.os.Bundle;import android.view.Gravity;import android.view.LayoutInflater;import android.view.View;import android.view.ViewGroup;import android.widget.AdapterView;import android.widget.ArrayAdapter;import android.widget.ListView;import android.widget.PopupWindow;import android.widget.TextView;import com.topcee.report.R;import java.util.ArrayList;import java.util.List;public class HomeActivity extends Activity { private Context context; private List reportList; private List productList; private TextView tvReport; private TextView tvProduct; private TextView tvCompany; private String reportName = ""; private String productName = ""; private String companyName = ""; private ListView lvData; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_home); context = HomeActivity.this; initView(); } private void initView(){ lvData = findViewById(R.id.lv_data); lvData.setOnItemClickListener(new AdapterView.OnItemClickListener() { @Override public void onItemClick(AdapterView<?> parent, View view, int position, long id) { } }); tvReport = findViewById(R.id.tv_report); tvProduct = findViewById(R.id.tv_product); tvCompany = findViewById(R.id.tv_company); tvReport.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { showReportDialog(); } }); tvProduct.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { showProductDialog(); } }); tvCompany.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { } }); } /** * 报表弹窗 */ private void showReportDialog(){ reportList = new ArrayList<>(); reportList.add("生产报表"); reportList.add("设备报表"); reportList.add("抛料率报表"); reportList.add("在线预警报表"); View view = LayoutInflater.from(context).inflate(R.layout.popupwindow, null); // 为了演示效果,简单的设置了一些数据,实际中大家自己设置数据即可,相信大家都会。 ListView lsvMore = (ListView) view.findViewById(R.id.lsvMore); lsvMore.setAdapter(new ArrayAdapter(context, android.R.layout.simple_list_item_1, reportList)); // 创建PopupWindow对象,指定宽度和高度 PopupWindow window = new PopupWindow(view, ViewGroup.LayoutParams.WRAP_CONTENT,ViewGroup.LayoutParams.WRAP_CONTENT); window.setWidth(tvReport.getWidth()); // 设置动画// window.setAnimationStyle(R.style.popup_window_anim); // 设置背景颜色 window.setBackgroundDrawable(new ColorDrawable(Color.parseColor("#FFFFFF"))); // 设置可以获取焦点 window.setFocusable(true); // 设置可以触摸弹出框以外的区域 window.setOutsideTouchable(true); // 更新popupwindow的状态 window.update(); // 以下拉的方式显示,并且可以设置显示的位置// window.showAsDropDown(tvReport, 0, 20); window.showAtLocation(tvReport, Gravity.LEFT | Gravity.BOTTOM, 0, 50);//这里的50是因为我底部按钮的高度是50 lsvMore.setOnItemClickListener(new AdapterView.OnItemClickListener() { @Override public void onItemClick(AdapterView<?> parent, View view, int position, long id) { if("生产报表".equals(reportName)){ } } }); } /** * 生产情况弹窗 */ private void showProductDialog(){ productList = new ArrayList<>(); productList.add("生产描述"); productList.add("生产进度"); productList.add("生产指标"); productList.add("异常信息"); View view = LayoutInflater.from(context).inflate(R.layout.popupwindow, null); // 为了演示效果,简单的设置了一些数据,实际中大家自己设置数据即可,相信大家都会。 ListView lsvMore = view.findViewById(R.id.lsvMore); lsvMore.setAdapter(new ArrayAdapter(context, android.R.layout.simple_list_item_1, productList)); // 创建PopupWindow对象,指定宽度和高度 PopupWindow window = new PopupWindow(view, ViewGroup.LayoutParams.WRAP_CONTENT,ViewGroup.LayoutParams.WRAP_CONTENT); window.setWidth(tvProduct.getWidth()); // 设置动画// window.setAnimationStyle(R.style.popup_window_anim); // 设置背景颜色 window.setBackgroundDrawable(new ColorDrawable(Color.parseColor("#FFFFFF"))); // 设置可以获取焦点 window.setFocusable(true); // 设置可以触摸弹出框以外的区域 window.setOutsideTouchable(true); // 更新popupwindow的状态 window.update(); // 以下拉的方式显示,并且可以设置显示的位置// window.showAsDropDown(tvProduct, 0, 20); window.showAtLocation(tvProduct, Gravity.CENTER | Gravity.BOTTOM, 0, 50); lsvMore.setOnItemClickListener(new AdapterView.OnItemClickListener() { @Override public void onItemClick(AdapterView<?> parent, View view, int position, long id) { productName = productList.get(position);//获取点击的状态名字 } }); }}
activity_home.xml
<?xml version="1.0" encoding="utf-8"?>
btn_pressed.xml
<?xml version="1.0" encoding="utf-8"?>
triangle_bg.xml
<?xml version="1.0" encoding="utf-8"?> -
-
triangle_bg_pressed.xml
<?xml version="1.0" encoding="utf-8"?> -
-
这里本来是想在右下角显示一个小三角形的,不知道为啥不显示,给它单独拿出来设置宽度和高度就显示。希望有知道的给我解惑一下。大家知识共享。
popupwindow.xml
<?xml version="1.0" encoding="utf-8"?>
这是最终的效果。
更多相关文章
- android中设置分割线
- android主页框架FragmentTabHost+ViewPager,左右滑动
- android studio 57 MP3 音乐播放器 下载网络歌曲 代码
- Android中GPRS 开关
- Android(安卓)两种方式实现圆形头像
- android跳转至权限设置界面
- Android获取、设置音频的音量大小
- FragmentTabHost QQ 选项卡
- Android常用控件技巧总结