公司的项目中几乎都会有走工作流这个环节,为了提高效率,现在特意把弹出的填写审批意见PopWindow改转成工具类,提高效率,免得下次又得整。先看运行效果。
现在先看下PopWindowHelper,备注写的非常清楚啦。
package com.example.keranbin.myapplication; import android.app.Activity; import android.graphics.drawable.BitmapDrawable; import android.view.Gravity; import android.view.LayoutInflater; import android.view.MotionEvent; import android.view.View; import android.view.ViewGroup; import android.view.Window; import android.view.WindowManager; import android.widget.Button; import android.widget.EditText; import android.widget.LinearLayout; import android.widget.PopupWindow; /** * Created by keranbin on 2016/7/18. */ public class PopWindowHelper implements View.OnClickListener { private PopupWindow popupWindow; private PopWindowListener popWindowListener; private Button btnSure; private Button btnCancel; private EditText etOpnion; /* * layout 自定义的popWindow样式 * sureId 自定义的popWindow确定键Id * cancleId 自定义的popWindow取消键Id * approvalMsg 自定义的popWindow审批意见文本框Id * strHint自定义的popWindow审批意见文本框的提示信息 * */ public void createApprovalPopWindow(Activity context, View parent, final Window window, int layout, int sureId, int cancleId, int approvalMsg, String strHint){ final View view =LayoutInflater.from(context).inflate(layout,null); btnSure= (Button) view.findViewById(sureId); btnSure.setOnClickListener(this); btnCancel= (Button) view.findViewById(cancleId); btnSure.setOnClickListener(this); etOpnion= (EditText) view.findViewById(approvalMsg); etOpnion.setHint(strHint); LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT); view.setLayoutParams(params); popupWindow= new PopupWindow(view, WindowManager.LayoutParams.MATCH_PARENT, WindowManager.LayoutParams.WRAP_CONTENT); //设置PopupWindow的View popupWindow.setContentView(view); //设置PopupWindow的View弹出窗体的宽 popupWindow.setWidth(ViewGroup.LayoutParams.FILL_PARENT); //设置PopupWindow的View弹出窗体的高 popupWindow.setHeight(ViewGroup.LayoutParams.WRAP_CONTENT); //设置PopupWindow的View弹出窗体可点击,如果不添加这个属性,那么点击EditText无法弹出输入法 popupWindow.setFocusable(true); //设置PopupWindow去除边际黑线 popupWindow.setBackgroundDrawable(new BitmapDrawable()); //避免输入法覆盖掉popWindow popupWindow.setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_RESIZE);
//设置PopupWindow的显示位置 popupWindow.showAtLocation(parent, Gravity.BOTTOM, 0, 0); setWindowGray(window); //popWindow消失后,还原页面背景 popupWindow.setOnDismissListener(new PopupWindow.OnDismissListener() { @Override public void onDismiss() { setWindowGray(window); } }); view.setOnTouchListener(new View.OnTouchListener() { public boolean onTouch(View v, MotionEvent event) { int height = view.findViewById(R.id.ll_layout_xxtx_spyj).getTop(); int y = (int) event.getY(); if (event.getAction() == MotionEvent.ACTION_UP) { if (y < height) { popWindowListener.popWindowTouch(popupWindow); } } return true; } }); } public void setWindowGray(Window window) { WindowManager.LayoutParams lp = window.getAttributes(); if (popupWindow.isShowing()) { lp.alpha = 0.5f; window.setAttributes(lp); } else { lp.alpha = 1.0f; window.setAttributes(lp); } } @Override public void onClick(View v) { switch (v.getId()) { case R.id.btn_approval_sure: popWindowListener.getOpnion(etOpnion.getText().toString().trim(),popupWindow); break; case R.id.btn_approval_cancel: popupWindow.dismiss(); break; } } public void setPopWindowListener(PopWindowListener popWindowListener) { this.popWindowListener = popWindowListener; } public interface PopWindowListener { //回调用户填写的审批意见strOpnion到Activity中,用户得到可进行下一步操作 public void getOpnion(String strOpnion,PopupWindow popupWindow); public void popWindowTouch(PopupWindow popupWindow); } }
再看下在MainActivity中是怎么调用的。
package com.example.keranbin.myapplication; import android.app.Activity; import android.os.Bundle; import android.view.View; import android.widget.PopupWindow; import android.widget.Toast; public class MainActivity extends Activity implements PopWindowHelper.PopWindowListener { private PopWindowHelper popWindowHelper; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); popWindowHelper = new PopWindowHelper(); popWindowHelper.setPopWindowListener(this); findViewById(R.id.btnRight).setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { popWindowHelper.createApprovalPopWindow( MainActivity.this, MainActivity.this.findViewById(R.id.rl), MainActivity.this.getWindow(), R.layout.layout_popwindow_approval, R.id.btn_approval_sure, R.id.btn_approval_cancel, R.id.et_layout_approval, "请您填写审批意见" ); } }); } @Override public void getOpnion(String strOpnion,PopupWindow popupWindow) { if (!strOpnion.equals("")){ popupWindow.dismiss(); Toast.makeText(MainActivity.this, "您填写的审批意见为" + strOpnion, Toast.LENGTH_LONG).show(); }else{ Toast.makeText(MainActivity.this,"请填写审批意见",Toast.LENGTH_SHORT).show(); } } @Override public void popWindowTouch(PopupWindow popupWindow) { popupWindow.dismiss(); } }
自定义的popwindow样式xml文件代码如下
1 <?xml version="1.0" encoding="utf-8"?> 2 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 3 android:layout_width="match_parent" 4 android:layout_height="match_parent" 5 android:background="#999999" 6 android:orientation="vertical"> 7 8 <LinearLayout 9 android:id="@+id/ll_layout_xxtx_spyj" 10 android:layout_width="match_parent" 11 android:layout_height="match_parent" 12 android:orientation="vertical"> 13 14 <EditText 15 android:id="@+id/et_layout_approval" 16 android:layout_width="match_parent" 17 android:layout_height="200dip" 18 android:layout_marginLeft="25dip" 19 android:layout_marginRight="25dip" 20 android:layout_marginTop="25dip" 21 android:background="@drawable/spyj_popwindow" 22 android:gravity="left" 23 android:paddingBottom="2dip" 24 android:paddingLeft="2dip" 25 android:paddingRight="2dip" 26 android:paddingTop="2dip" /> 27 28 <RelativeLayout 29 android:layout_width="match_parent" 30 android:layout_height="60dip" 31 android:layout_alignParentBottom="true" 32 android:layout_marginTop="5dip" 33 android:background="#999999" 34 android:gravity="center_vertical"> 35 36 <Button 37 android:id="@+id/btn_approval_cancel" 38 android:layout_width="120dip" 39 android:layout_height="40dip" 40 android:layout_alignParentLeft="true" 41 android:layout_marginLeft="20dip" 42 android:background="@drawable/orange_click_selector" 43 android:text="取消" 44 android:textColor="#FFF" 45 android:textSize="18sp" /> 46 47 <Button 48 android:id="@+id/btn_approval_sure" 49 android:layout_width="120dip" 50 android:layout_height="40dip" 51 android:layout_alignParentRight="true" 52 android:layout_marginRight="20dip" 53 android:background="@drawable/blue_click_selector" 54 android:text="确定" 55 android:textColor="#FFF" 56 android:textSize="18sp" /> 57 </RelativeLayout> 58 59 </LinearLayout> 60 61 </LinearLayout>