使用popupwindow自定义一个服务评价
来源:互联网 发布:我们相识网络里 编辑:程序博客网 时间:2024/06/03 20:19
昨天一哥们说要弄一个服务评价的popupwindow,可以实现通过选择几颗星以及可以编辑输入自己想输入的内容来进行评价,自己试了一下,可以完成。 最开始想用dialog来实现了,可是发现由于还有一个edittext控件在里面,所以如果dialog高度稍高一点,当输入法打开的时候dialog会跑到外面去,甚至把通知栏都盖住,效果非常不好,所以决定使用popupwindow来解决了!废话少说,先上布局文件(mainactivty):
<?xml version="1.0" encoding="utf-8"?><RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:background="@drawable/bg_main" > <Button android:id="@+id/button" android:onClick="showPopUpWindow" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="点我出现pop"/></RelativeLayout> popupwindow的布<?xml version="1.0" encoding="utf-8"?><RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:background="@android:color/transparent" android:orientation="vertical"> <LinearLayout android:id="@+id/ll_star_holder" android:layout_width="match_parent" android:layout_height="match_parent" android:layout_marginRight="16dp" android:layout_marginTop="16dp" android:background="@drawable/bg" android:orientation="vertical"> <LinearLayout android:layout_width="match_parent" android:layout_height="0dp" android:layout_weight="3" android:orientation="vertical" android:weightSum="3"> <LinearLayout android:layout_width="match_parent" android:layout_height="0dp" android:layout_marginLeft="10dp" android:layout_marginRight="10dp" android:layout_marginTop="10dp" android:layout_weight="1" android:orientation="horizontal"> <TextView android:layout_width="wrap_content" android:layout_height="match_parent" android:layout_marginRight="5dp" android:gravity="center" android:text="导航评价" android:textColor="@android:color/black" android:textSize="18sp" /> <LinearLayout android:id="@+id/ll_daohang" android:layout_width="match_parent" android:layout_height="match_parent" android:gravity="center" android:orientation="horizontal" android:weightSum="5"></LinearLayout> </LinearLayout> <LinearLayout android:layout_width="match_parent" android:layout_height="0dp" android:layout_marginLeft="10dp" android:layout_marginRight="10dp" android:layout_marginTop="20dp" android:layout_weight="1" android:orientation="horizontal"> <TextView android:layout_width="wrap_content" android:layout_height="match_parent" android:layout_marginRight="5dp" android:gravity="center" android:text="效率评价" android:textColor="@android:color/black" android:textSize="18sp" /> <LinearLayout android:id="@+id/ll_xiaolv" android:layout_width="match_parent" android:layout_height="match_parent" android:gravity="center" android:orientation="horizontal" android:weightSum="5"></LinearLayout> </LinearLayout> <LinearLayout android:layout_width="match_parent" android:layout_height="0dp" android:layout_marginBottom="10dp" android:layout_marginLeft="10dp" android:layout_marginRight="10dp" android:layout_marginTop="20dp" android:layout_weight="1" android:orientation="horizontal"> <TextView android:layout_width="wrap_content" android:layout_height="match_parent" android:layout_marginRight="5dp" android:gravity="center" android:textColor="@android:color/black" android:text="服务评价" android:textSize="18sp" /> <LinearLayout android:id="@+id/ll_fuwu" android:layout_width="match_parent" android:layout_height="match_parent" android:gravity="center" android:orientation="horizontal" android:weightSum="5"></LinearLayout> </LinearLayout> </LinearLayout> <EditText android:id="@+id/custom_pingjia" android:layout_width="match_parent" android:layout_height="0dp" android:layout_below="@+id/ll_star_holder" android:layout_marginLeft="10dp" android:layout_marginRight="10dp" android:layout_weight="2" android:gravity="top" android:background="@null" android:textColor="@android:color/darker_gray" android:hint="请输入您对本次导航及作业的评价" android:textSize="15sp" /> <TextView android:id="@+id/certen" android:layout_width="match_parent" android:layout_height="0dp" android:layout_gravity="center" android:layout_marginBottom="10dp" android:layout_marginLeft="25dp" android:layout_marginRight="25dp" android:layout_marginTop="10dp" android:layout_weight="0.6" android:background="@drawable/bg_text" android:clickable="true" android:gravity="center" android:text="退出导航" android:textColor="@android:color/white" android:textSize="25sp" /> </LinearLayout> <ImageView android:id="@+id/iv_colse" android:layout_width="32dp" android:layout_height="32dp" android:clickable="true" android:layout_alignParentRight="true" android:src="@drawable/icon_close" /></RelativeLayout>下面是程序代码:package ubi.com.popupwindowtext;import android.app.Activity;import android.content.Context;import android.graphics.Bitmap;import android.graphics.BitmapFactory;import android.graphics.drawable.ColorDrawable;import android.os.Bundle;import android.view.Display;import android.view.Gravity;import android.view.LayoutInflater;import android.view.View;import android.view.ViewGroup;import android.widget.Button;import android.widget.EditText;import android.widget.ImageView;import android.widget.LinearLayout;import android.widget.PopupWindow;import android.widget.TextView;import android.widget.Toast;public class MainActivity extends Activity { private int screenHeight; private int screenWidth; private LayoutInflater inflater; private LinearLayout mDaoHang; private LinearLayout mXiaoLv; private LinearLayout mFuWu; private EditText mCustomerPingjia; private TextView mCerten; private Button mButton; private int widths; private ImageView mIv_Close; private PopupWindow popupWindow; /** * 以下三个参数为记录上一次点击导航评价,效率评价,服务评价星星的位置,初始化默认为-1 */ private int mPrePositonDaoHang=-1; private int mPrePositionXiaoLv=-1; private int mPrePositionFuWu=-1; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); mButton= (Button) findViewById(R.id.button); Display defaultDisplay = getWindowManager().getDefaultDisplay(); //得到屏幕的宽和高为了做到屏幕适配(此宽和高包括了通知栏的宽和高) screenHeight=defaultDisplay.getHeight(); screenWidth=defaultDisplay.getWidth(); inflater=getLayoutInflater(); } public void showPopUpWindow(View view){ popupWindow=new PopupWindow(this); popupWindow.setFocusable(true); popupWindow.setHeight(screenHeight / 2); popupWindow.setWidth(screenWidth * 2 / 3); View v=inflater.inflate(R.layout.layout_pop_upwindow,null); mDaoHang= (LinearLayout) v.findViewById(R.id.ll_daohang); mFuWu= (LinearLayout) v.findViewById(R.id.ll_fuwu); mXiaoLv= (LinearLayout) v.findViewById(R.id.ll_xiaolv); mIv_Close= (ImageView) v.findViewById(R.id.iv_colse); mCustomerPingjia= (EditText) v.findViewById(R.id.custom_pingjia); mCerten= (TextView) v.findViewById(R.id.certen); mCerten.setOnClickListener(mCertenClickListener); mIv_Close.setOnClickListener(mColseClickListener); widths=mDaoHang.getWidth()/5; initGrayStar(mDaoHang,mDaoHangStarCilckListener); initGrayStar(mXiaoLv,mXiaoLvStarCilckListener); initGrayStar(mFuWu, mFuWuStarCilckListener); mDaoHang.setTag(true); mXiaoLv.setTag(true); mFuWu.setTag(true); int width=screenWidth/20; int height=screenHeight/4; popupWindow.setContentView(v);// 这是设置popupwindow外屏幕的背景的// WindowManager.LayoutParams lp = getWindow().getAttributes();// lp.alpha = 0; //0.0-1.0// getWindow().setAttributes(lp); popupWindow.setBackgroundDrawable(new ColorDrawable(getResources().getColor(R.color.trasnlate))); /** * 这个方法是说将pop挂在那个控件之下面,基准点为所挂控件的左下角 */ //popupWindow.showAsDropDown(mButton,width,0); /** * 这个方法是以屏幕为控件放置的 */ popupWindow.showAtLocation(mButton, Gravity.TOP,width,height); } /* *初始化添加灰色星星 */ private void initGrayStar(LinearLayout viewHolder,View.OnClickListener clickListener) { for(int i=0;i<5;i++){ ImageView imageView=new ImageView(this); imageView.setImageBitmap(getResBitmap(this, R.drawable.icon_star_gray)); imageView.setTag(i); LinearLayout.LayoutParams params=new LinearLayout.LayoutParams(0, ViewGroup.LayoutParams.MATCH_PARENT,1); imageView.setLayoutParams(params); viewHolder.addView(imageView); imageView.setOnClickListener(clickListener); } } //导航评价星星的点击事件处理 private View.OnClickListener mDaoHangStarCilckListener=new View.OnClickListener() { @Override public void onClick(View v) { changeStarState(mPrePositonDaoHang,(int) v.getTag(),mDaoHang); } }; //效率评价星星的点击事件处理 private View.OnClickListener mXiaoLvStarCilckListener=new View.OnClickListener() { @Override public void onClick(View v) { changeStarState(mPrePositionXiaoLv,(int) v.getTag(),mXiaoLv); } }; //服务评价星星的点击事件处理 private View.OnClickListener mFuWuStarCilckListener=new View.OnClickListener() { @Override public void onClick(View v) { changeStarState(mPrePositionFuWu, (int) v.getTag(), mFuWu); } }; //退出导航按钮的点击事件处理 private View.OnClickListener mCertenClickListener=new View.OnClickListener() { @Override public void onClick(View v) { Toast.makeText(MainActivity.this,"点击了退出导航",Toast.LENGTH_SHORT).show(); dismissPop(); } }; //右上角结束按钮的点击事件处理 private View.OnClickListener mColseClickListener=new View.OnClickListener() { @Override public void onClick(View v) { dismissPop(); } }; /** * popupwindow消失 */ private void dismissPop() { if(popupWindow!=null&&popupWindow.isShowing()){ popupWindow.dismiss(); popupWindow=null; mPrePositonDaoHang=-1; mPrePositionXiaoLv=-1; mPrePositionFuWu=-1; } } /** * 如何高效率读取省内存的方式读取本地图片资源 */ private static BitmapFactory.Options bitmapFatoryOption; public static Bitmap getResBitmap(Context context,int srcId){ if(bitmapFatoryOption ==null){ bitmapFatoryOption =new BitmapFactory.Options(); bitmapFatoryOption.inPreferredConfig=Bitmap.Config.RGB_565; bitmapFatoryOption.inPurgeable=true; bitmapFatoryOption.inInputShareable=true; } return BitmapFactory.decodeStream(context.getResources().openRawResource(srcId),null,bitmapFatoryOption); } /** * 公共方法来改变点击星星的状态(此方法评价可以为全部灰色,如有其它要求可自行改变) * @param prePosition * @param position * @param viewHolder */ private void changeStarState(int prePosition,int position,LinearLayout viewHolder) { //如果两次点击的位置相同,改变当前星星的状态 if(prePosition==position){ if((boolean)viewHolder.getTag()){ ((ImageView)viewHolder.getChildAt(position)).setImageBitmap(getResBitmap(MainActivity.this, R.drawable.icon_star_gray)); position--; }else{ ((ImageView)viewHolder.getChildAt(position)).setImageBitmap(getResBitmap(MainActivity.this, R.drawable.icon_star_shine)); position++; } }else //如果当下点击位置大于上一次点击的位置,则只需要设置点亮的星星即可 if(position>prePosition){ if(prePosition==-1){ prePosition=0; } for(int i=prePosition;i<=position;i++){ ((ImageView)viewHolder.getChildAt(i)).setImageBitmap(getResBitmap(MainActivity.this, R.drawable.icon_star_shine)); } viewHolder.setTag(true); }else{//只需要设置熄灭的星星即可 for(int i=position;i<=prePosition;i++){ ((ImageView)viewHolder.getChildAt(i)).setImageBitmap(getResBitmap(MainActivity.this, R.drawable.icon_star_gray)); } viewHolder.setTag(false); } if(viewHolder==mDaoHang){ mPrePositonDaoHang=position; } if(viewHolder==mXiaoLv){ mPrePositionXiaoLv=position; } if(viewHolder==mFuWu){ mPrePositionFuWu=position; } }}最后是运行出来的效果图:![这里写图片描述](http://img.blog.csdn.net/20160319165342096)![这里写图片描述](http://img.blog.csdn.net/20160319165659929)![这里写图片描述](http://img.blog.csdn.net/20160319165716557)最后demo下载地址,希望对朋友有帮助:http://download.csdn.net/detail/zhq217217/9466596
0 0
- 使用popupwindow自定义一个服务评价
- android自定义一个PopupWindow
- android自定义一个PopupWindow
- 自定义PopupWindow的使用
- 一个简单的自定义popupwindow
- 自定义一个简单的PopupWindow
- 点击显示一个样式自定义的Popupwindow
- 一个自定义的PopupWindow的实例
- 使用PopupWindow实现全局自定义menu
- Android的自定义Menu使用PopupWindow实现
- 使用PopupWindow实现的自定义下拉列表
- 使用PopupWindow自定义的下拉框
- 自定义键盘使用popupwindow弹出问题
- 自定义View之PopupWindow的使用
- PopupWindow自定义对话框的使用技巧
- PopupWindow自定义对话框的使用技巧
- 自定义PopupWindow
- 自定义popupWindow
- Revenge of Fibonacc
- Qt 拖拽问题
- Connection to https://dl-ssl.google.com refused
- 后台进行数据更新和下载
- EL
- 使用popupwindow自定义一个服务评价
- 九、四大组件的工作过程
- Android 中外部存储在不同android版本上面的位置
- 第六届蓝桥杯题目练习-4
- 学习经验之Sql Server的简单操作
- hdu4313(图,和最小生成树类似)
- 快速幂||矩阵快速幂
- can not run c compiled programmes
- NOIP2015 口胡题解