[仿南航app开发日记5]查成绩界面开发完成以及使用PopupWindow踩过的坑

前言

这篇博客是接着前一篇博客开发的:

[仿南航app开发日记4]登陆对话框完成以及自定义对话框碰到的坑

源码

先看效果
这里写图片描述
既然是写一个界面,先上布局文件好了:

<?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">
    <!--整个界面的布局-->
    <LinearLayout
        android:layout_centerInParent="true"
        android:orientation="vertical"
        android:background="@color/menuColor"
        android:layout_width="match_parent"
        android:layout_height="match_parent">
        <!--顶部返回-->
        <include layout="@layout/back_layout"/>
        <!--选择周数-->
        <LinearLayout
            android:id="@+id/score_checkWeek"
            android:layout_width="match_parent"
            android:background="@android:color/white"
            android:layout_height="45dp"
            android:gravity="center">
            <TextView
                android:id="@+id/score_week"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="2015-2016(上学期)"
                android:textSize="16sp"
                android:textColor="@android:color/black"/>
            <ImageView
                android:layout_marginLeft="5dp"
                android:layout_width="18dp"
                android:layout_height="18dp"
                android:src="@drawable/xiala"/>
        </LinearLayout>
        <View
            android:layout_width="match_parent"
            android:layout_height="1px"
            android:background="@drawable/back_line"/>
        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="45dp"
            android:gravity="center">
            <LinearLayout
                android:layout_width="0dp"
                android:layout_height="wrap_content"
                android:layout_weight="1"
                android:gravity="center"
                android:orientation="vertical">
                <TextView
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:text="113.0"/>
                <TextView
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:text="当前学分"/>
            </LinearLayout>
            <View android:layout_width="1px"
                android:layout_height="match_parent"
                android:background="@color/scoreDivideColor"/>
            <LinearLayout
                android:layout_width="0dp"
                android:layout_height="wrap_content"
                android:layout_weight="1"
                android:gravity="center"
                android:orientation="vertical">
                <TextView
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:text="113.0"/>
                <TextView
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:text="需要学分"/>
            </LinearLayout>
            <View android:layout_width="1px"
                android:layout_height="match_parent"
                android:background="@color/scoreDivideColor"/>
            <LinearLayout
                android:layout_width="0dp"
                android:layout_height="wrap_content"
                android:layout_weight="1"
                android:gravity="center"
                android:orientation="vertical">
                <TextView
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:text="0.0"/>
                <TextView
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:text="还需学分"/>
            </LinearLayout>
            <View android:layout_width="1px"
                android:layout_height="match_parent"
                android:background="@color/scoreDivideColor"/>
            <LinearLayout
                android:layout_width="0dp"
                android:layout_height="wrap_content"
                android:layout_weight="1"
                android:gravity="center"
                android:orientation="vertical">
                <TextView
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:text="0.0"/>
                <TextView
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:text="平均绩点"/>
            </LinearLayout>

        </LinearLayout>
        <View
            android:layout_width="match_parent"
            android:layout_height="1px"
            android:background="@color/scoreDivideColor"/>
        <!--显示成绩-->
        <ListView
            android:id="@+id/score_list"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:paddingLeft="15dp"
            android:paddingRight="15dp"
            android:paddingTop="10dp"
            android:dividerHeight="10dp"
            android:divider="@color/menuColor"
            android:background="@color/menuColor"
            android:scrollbarStyle="insideOverlay"
            android:scrollbars="none">
        </ListView>

    </LinearLayout>
    <!--接收事件-->
    <View
        android:id="@+id/score_cancelPopup"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_centerInParent="true"/>
</RelativeLayout>

这里面有一个id叫做score_cancelPopup的View,它并没有什么作用,只是当popupWindow弹出的时候将它取消(我无论怎么设置都无法让PopupWindow消失,具体的后面讲)
还有一个

<include layout="@layout/back_layout"/>

这个在:

<?xml version="1.0" encoding="utf-8"?>
<!--顶部返回的布局,用于被其他的布局加载-->
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="horizontal" android:layout_width="match_parent"
    android:layout_height="45dp"
    android:background="@color/backLayoutColor">
    <ImageView
        android:layout_width="40dp"
        android:layout_height="wrap_content"
        android:layout_marginLeft="-10dp"
        android:src="@drawable/back_arrow_off"/>
    <TextView
        android:layout_marginLeft="-10dp"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center"
        android:gravity="center"
        android:text="成绩查询"
        android:textColor="@android:color/white"/>
    <View
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_weight="1"/>
    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center"
        android:gravity="center"
        android:text="设置"
        android:textColor="@android:color/white"
        android:layout_marginRight="10dp"
        android:visibility="invisible"/>

</LinearLayout>

这里有我没用使用系统自带的下拉框,而是选择View(Click事件)+PopupWindow来弹出自定义下拉框(后面讲),先讲显示成绩的那个吧,因为这整个显示成绩的就是一个ListView,所以我为它写了一个Adapter:

package cn.karent.nanhang.adapter;

import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.TextView;
import cn.karent.nanhang.model.Score;
import cn.karent.nanhang.R;

/**
 * Created by wan on 2016/12/26.
 * 成绩的Adapter
 */
public class ScoreAdapter extends ArrayAdapter<Score> {

    private Context mContext;

    private int mResouceId;

    public ScoreAdapter(Context context, int resourceId) {
        super(context, resourceId);
        mContext = context;
        mResouceId = resourceId;
    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        ViewHold hold = null;
        if( convertView == null) {
            convertView = LayoutInflater.from(mContext).inflate(mResouceId, null);
            hold = new ViewHold();
            hold.setName((TextView)convertView.findViewById(R.id.scoreItem_name));
            hold.setCourseTime((TextView)convertView.findViewById(R.id.scoreItem_courseTime));
            hold.setCoursePropety((TextView)convertView.findViewById(R.id.scoreItem_courseProperty));
            hold.setProperty((TextView)convertView.findViewById(R.id.scoreItem_property));
            hold.setWay((TextView)convertView.findViewById(R.id.scoreItem_way));
            hold.setScore((TextView)convertView.findViewById(R.id.scoreItem_score));
            hold.setCredit((TextView)convertView.findViewById(R.id.scoreItem_credit));
            convertView.setTag(hold);
        } else {
            hold = (ViewHold)convertView.getTag();
        }
        Score s = getItem(position);
        hold.getName().setText(s.getName());
        hold.getCourseTime().setText(s.getCourseTime());
        hold.getCoursePropety().setText(s.getCourseProperty());
        hold.getProperty().setText(s.getProperty());
        hold.getWay().setText(s.getWay());
        hold.getScore().setText(s.getScore() + "分");
        hold.getCredit().setText(s.getCredit() + "");
        return convertView;
    }

    class ViewHold {
        /**
         * 课时
         */
        private TextView courseTime;
        /**
         * 课程名称
         */
        private TextView name;
        /**
         * 课程性质,比如:全校任选课
         */
        private TextView coursePropety;
        /**
         * 选修还是必修
         */
        private TextView property;
        /**
         * 考试方式
         */
        private TextView way;
        /**
         * 分数
         */
        private TextView score;
        /**
         * 学分
         */
        private TextView credit;

        public TextView getCourseTime() {
            return courseTime;
        }

        public void setCourseTime(TextView courseTime) {
            this.courseTime = courseTime;
        }

        public TextView getName() {
            return name;
        }

        public void setName(TextView name) {
            this.name = name;
        }

        public TextView getCoursePropety() {
            return coursePropety;
        }

        public void setCoursePropety(TextView coursePropety) {
            this.coursePropety = coursePropety;
        }

        public TextView getProperty() {
            return property;
        }

        public void setProperty(TextView property) {
            this.property = property;
        }

        public TextView getWay() {
            return way;
        }

        public void setWay(TextView way) {
            this.way = way;
        }

        public TextView getScore() {
            return score;
        }

        public void setScore(TextView score) {
            this.score = score;
        }

        public TextView getCredit() {
            return credit;
        }

        public void setCredit(TextView credit) {
            this.credit = credit;
        }
    }

}

那里面有一个Score,这是一个Model,封装了一个Item该显示哪些数据:

package cn.karent.nanhang.model;

/**
 * Created by wan on 2016/12/26.
 * 成绩的model
 */
public class Score {
    /**
     * 课程名称
     */
    private String name;
    /**
     * 课时
     */
    private String courseTime;
    /**
     * 选修还是必修
     */
    private String property;
    /**
     * 课程性质
     */
    private String courseProperty;
    /**
     * 考试方式
     */
    private String way;
    /**
     * 分数
     */
    private float score;
    /**
     * 学分
     */
    private float credit;

    public String getCourseTime() {
        return courseTime;
    }

    public void setCourseTime(String courseTime) {
        this.courseTime = courseTime;
    }

    public String getProperty() {
        return property;
    }

    public void setProperty(String property) {
        this.property = property;
    }

    public String getWay() {
        return way;
    }

    public void setWay(String way) {
        this.way = way;
    }

    public float getScore() {
        return score;
    }

    public void setScore(float score) {
        this.score = score;
    }

    public float getCredit() {
        return credit;
    }

    public void setCredit(float credit) {
        this.credit = credit;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getCourseProperty() {
        return courseProperty;
    }

    public void setCourseProperty(String courseProperty) {
        this.courseProperty = courseProperty;
    }
}

还有item的布局:

<?xml version="1.0" encoding="utf-8"?>
<!--显示成绩的每一项-->
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_marginLeft="30dp"
    android:layout_marginRight="30dp"
    android:layout_marginTop="10dp"
    android:background="@drawable/score_item_shape"
    android:layout_width="wrap_content"
    android:layout_height="164dp">
    <!--标题-->
    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="35dp"
        android:paddingLeft="10dp"
        android:paddingRight="10dp"
        android:gravity="center_vertical">
        <TextView
            android:id="@+id/scoreItem_name"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="大数据与社会生活"
            android:textSize="15sp"
            android:textColor="@android:color/black"/>
        <TextView
            android:id="@+id/scoreItem_courseTime"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="(总学时:20小时)"
            android:layout_marginLeft="10dp"
            android:textColor="@color/scoreTypefaceColor"/>
    </LinearLayout>
    <!--分割线-->
    <View
        android:layout_width="match_parent"
        android:layout_height="1px"
        android:background="@color/scoreDivideColor"/>
    <!--课程性质-->
    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="horizontal"
        android:gravity="center_vertical"
        android:padding="10dp">
        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="课程性质:"
            android:textColor="@color/scoreTypefaceColor1"/>
        <TextView
            android:id="@+id/scoreItem_courseProperty"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginLeft="5dp"
            android:text="全校任选课"
            android:textColor="@android:color/black"/>
        <TextView
            android:id="@+id/scoreItem_property"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginLeft="10dp"
            android:text="选修"
            android:textColor="@android:color/white"
            android:background="@drawable/score_item_property_shape"/>
    </LinearLayout>
    <!--考查方式-->
    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:padding="10dp">
        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="考试方式:"
            android:textColor="@color/scoreTypefaceColor1"/>
        <TextView
            android:id="@+id/scoreItem_way"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginLeft="5dp"
            android:text="考查"
            android:textColor="@android:color/black"/>
        <View
            android:layout_width="0dp"
            android:layout_height="1dp"
            android:layout_weight="1"/>
        <TextView
            android:id="@+id/scoreItem_score"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="73.0分"
            android:textColor="@color/scoreWayColor"/>
    </LinearLayout>
    <!--学分-->
    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:padding="10dp">
        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="学分:"
            android:textColor="@color/scoreTypefaceColor1"/>
        <TextView
            android:id="@+id/scoreItem_credit"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginLeft="5dp"
            android:text="1.0"
            android:textColor="@color/scoreScoreColor"/>
    </LinearLayout>
</LinearLayout>

一开始我打算在LinearLayout里面设置上、下、左、右边距拉达到间隔的效果,但是发现无论怎么设置都无效,默认就会填充整个ListView,幸好ListView可以设置divide属性:

 <ListView
            android:id="@+id/score_list"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:paddingLeft="15dp"
            android:paddingRight="15dp"
            android:paddingTop="10dp"
            android:dividerHeight="10dp"
            android:divider="@color/menuColor"
            android:background="@color/menuColor"
            android:scrollbarStyle="insideOverlay"
            android:scrollbars="none">
        </ListView>

我让设置ListView的padding属性来达到挤压每一个Item的目的,并设置divideHeight属性来达到两个item之间的距离,对了,还有每一个Item有一个shape:

<?xml version="1.0" encoding="utf-8"?>
<!--每一项成绩的item-->
<shape xmlns:android="http://schemas.android.com/apk/res/android">
    <corners android:radius="10dp"/>
    <solid android:color="@android:color/white"/>
    <stroke android:width="1px" android:color="#d9d6d6"/>
</shape>

这个是设置了每一个item的背景,来达到圆角的目的,
结果如图:
这里写图片描述
接下来将自定义下拉框了,我前面说过,我这里是使用View+PopupWindow来实现的下拉框,也就是说,上面就是一个普通的LinearLayout,然后监听OnClick事件,在事件里面new出一个PopupWindow来,就达到了PopupWindow的效果,先上PopupWindow的布局:

<?xml version="1.0" encoding="utf-8"?>
<!--选择周数的popupWindow-->
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="250dp"
    android:layout_height="match_parent">
    <ImageView
        android:layout_gravity="center_horizontal"
        android:layout_width="15dp"
        android:layout_height="10dp"
        android:scaleType="fitEnd"
        android:src="@drawable/upsanjiao"/>
    <ListView
        android:id="@+id/checkweek_list"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:divider="@null"
        android:dividerHeight="10dp"
        android:scrollbars="none"
        android:padding="10dp"
        android:background="@drawable/btn_blue_on">

    </ListView>

</LinearLayout>

在程序中使用:

public void onClick(View v) {
      if( mCheckWeekPopupWindow == null ) {
            mCheckWeekPopupWindow = new PopupWindow(this);
            View contentView = LayoutInflater.from(this).inflate(R.layout.checkweek_popup_layout, null);
            mCheckWeekPopupWindow.setContentView(contentView);
            mCheckWeekPopupWindow.setWidth(mPopupWidth);
            mCheckWeekPopupWindow.setHeight(ViewGroup.LayoutParams.MATCH_PARENT);
            mList = (ListView) contentView.findViewById(R.id.checkweek_list);
            mCheckWeekPopupWindow.setBackgroundDrawable(null);
            mCheckWeekPopupWindow.setFocusable(false);
            mCheckWeekPopupWindow.setOutsideTouchable(true);
            mList.setOnItemClickListener(new AdapterView.OnItemClickListener() {
                @Override
                public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
                    mCurrentYear.setText(((TextView)view).getText());
                    //让popupWindow消失
                    mCheckWeekPopupWindow.dismiss();
                    mCheckWeekPopupWindow = null;
                }
            });
            //去除背景
            initPopupWindow();
            //计算要偏移的像素
            int offsetX = (ScreenUtil.getScreenWidth() - mPopupWidth) / 2;
            mCheckWeekPopupWindow.showAsDropDown(mCheckWeek, offsetX, 0);
        }
    }

上面的就是我说的OnClick事件了,但是有一个问题,点击空白处不会消失,我自己想到了一个解决办法,那就是在整个布局里面在添加一个充满全屏的View。监听它的Touch事件,但是不消费事件仅仅将PopupWindow 关掉,接下来就是一样的使用了,因为PopupWindow里面也使用了ListView,它也有一个Adapter:

package cn.karent.nanhang.adapter;

import android.content.Context;
import android.graphics.Color;
import android.graphics.drawable.ColorDrawable;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.TextView;
import cn.karent.nanhang.R;

/**
 * Created by wan on 2016/12/27.
 */
public class WeekAdapter extends ArrayAdapter<String> {

    private Context mContext;

    private int mResourceId;
    /**
     * 显示成绩的Activity中显示当前年份的TextView
     */
    private TextView mTextView;

    public WeekAdapter(Context context, int resourceId) {
        super(context, resourceId);
        mResourceId = resourceId;
        mContext = context;
    }

    public void setWeekTextView(TextView textView) {
        mTextView = textView;
    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        if( convertView == null) {
            convertView = LayoutInflater.from(mContext).inflate(R.layout.check_week_layout, null);
        }
        TextView t = (TextView)convertView.findViewById(R.id.check_week_week);
        String s = getItem(position);
        //如果当前要加载的周数等于TextView里面的周数,那么改变背景色
Log.d("s:" + s, "mTextView.getText:" + mTextView.getText());
        if( s.equals(mTextView.getText())) {
Log.d("WeekAdapter", "invoked!");
            t.setBackground(new ColorDrawable(0xffffffff));
            t.setTextColor(Color.rgb(0, 0, 0));
        } else {
            t.setBackground(null);
            t.setTextColor(Color.rgb(255, 255, 255));
        }
        t.setText(s);
        return convertView;
    }
}

每一个Item的布局:

<?xml version="1.0" encoding="utf-8"?>
<TextView xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/check_week_week"
    android:layout_width="match_parent"
    android:layout_height="40dp"
    android:gravity="center"
    android:textSize="14sp"
    android:layout_marginLeft="10dp"
    android:layout_marginRight="10dp"
    android:textColor="@android:color/white">

</TextView>

因为这是一个显示成绩的Activity,先写一个吧:

package cn.karent.nanhang.activity;

import android.app.Activity;
import android.graphics.drawable.ColorDrawable;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.MotionEvent;
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 cn.karent.nanhang.R;
import cn.karent.nanhang.adapter.ScoreAdapter;
import cn.karent.nanhang.adapter.WeekAdapter;
import cn.karent.nanhang.model.Score;
import cn.karent.nanhang.util.ScreenUtil;

/**
 * Created by wan on 2016/12/26.
 * 显示成绩的Activity
 */
public class ScoreActivity extends Activity implements View.OnClickListener{
    /**
     * 显示成绩的列表
     */
    private ListView mScoreList;
    /**
     * 分数的Adapter
     */
    private ScoreAdapter mScoreAdapter;
    /**
     * 选择星期的View
     */
    private View mCheckWeek;
    /**
     * 弹出框
     */
    private PopupWindow mCheckWeekPopupWindow;
    /**
     * PopupWindow的宽度
     */
    private int mPopupWidth;
    /**
     * 选择年份的ListView
     */
    private ListView mList;
    /**
     * 用来接收所有的事件但不消费,用于消除PopupWindow无法消失的情况
     */
    private View mCancelPopup;
    /**
     * 显示当前的年份
     */
    private TextView mCurrentYear;
    /**
     * 显示周数的Adapter
     */
    private WeekAdapter mWeekAdapter;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.score_layout);
        mScoreList = (ListView)findViewById(R.id.score_list);
        mScoreAdapter = new ScoreAdapter(this, R.layout.score_item_layout);
        fillContent();
        mScoreList.setAdapter(mScoreAdapter);
        mCheckWeek = findViewById(R.id.score_checkWeek);
        mCheckWeek.setOnClickListener(this);
        mPopupWidth = ScreenUtil.dp2px(250);
        mCancelPopup = findViewById(R.id.score_cancelPopup);
        mCancelPopup.setOnTouchListener(new View.OnTouchListener() {
            @Override
            public boolean onTouch(View v, MotionEvent event) {
                if( mCheckWeekPopupWindow != null ) {
                    mCheckWeekPopupWindow.dismiss();
                    mCheckWeekPopupWindow = null;
                }
                return false;
            }
        });
        mCurrentYear = (TextView)findViewById(R.id.score_week);

    }

    /**
     * 填充测试数据
     */
    private void fillContent() {
        Score s = new Score();
        s.setName("美食与文化");
        s.setCourseTime("(总学时:20小时)");
        s.setCourseProperty("全校任选课");
        s.setProperty("选修");
        s.setWay("考查");
        s.setScore(93);
        s.setCredit(1);
        mScoreAdapter.add(s);
        mScoreAdapter.add(s);
        mScoreAdapter.add(s);
        mScoreAdapter.add(s);
        mScoreAdapter.add(s);
        mScoreAdapter.add(s);
        mScoreAdapter.add(s);
    }

    /**
     * 初始化popupWindow当中的数据
     */
    private void initPopupWindow() {
        if( mWeekAdapter != null) {
            mList.setAdapter(mWeekAdapter);
            return;
        }
        mWeekAdapter = new WeekAdapter(this, R.layout.check_week_layout);
        mWeekAdapter.setWeekTextView(mCurrentYear);
        int year = 2015;
        for(int i = 26; i > 0; i--) {
            String s = year + "-" + (year + 1);
            if( i % 2 == 0) {
                s += "(上学期)";
            } else {
                s += "(下学期)";
            }
            mWeekAdapter.add(s);
            year -= 1;
        }
        mList.setAdapter(mWeekAdapter);
    }

    /**
     * 弹出选择周数的框
     * @param v
     */
    @Override
    public void onClick(View v) {
      if( mCheckWeekPopupWindow == null ) {
            mCheckWeekPopupWindow = new PopupWindow(this);
            View contentView = LayoutInflater.from(this).inflate(R.layout.checkweek_popup_layout, null);
            mCheckWeekPopupWindow.setContentView(contentView);
            mCheckWeekPopupWindow.setWidth(mPopupWidth);
            mCheckWeekPopupWindow.setHeight(ViewGroup.LayoutParams.MATCH_PARENT);
            mList = (ListView) contentView.findViewById(R.id.checkweek_list);
            mCheckWeekPopupWindow.setBackgroundDrawable(null);
            mCheckWeekPopupWindow.setFocusable(false);
            mCheckWeekPopupWindow.setOutsideTouchable(true);
            mList.setOnItemClickListener(new AdapterView.OnItemClickListener() {
                @Override
                public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
                    mCurrentYear.setText(((TextView)view).getText());
                    //让popupWindow消失
                    mCheckWeekPopupWindow.dismiss();
                    mCheckWeekPopupWindow = null;
                }
            });
            //去除背景
            initPopupWindow();
            //计算要偏移的像素
            int offsetX = (ScreenUtil.getScreenWidth() - mPopupWidth) / 2;
            mCheckWeekPopupWindow.showAsDropDown(mCheckWeek, offsetX, 0);
        }
    }


}

原先的PopupWindow会有一个半透明的背景,如果ContentView完全填充了背景就不会显示出来,但是我这里最上面是一个小箭头,旁边就显示,解决办法是直接将它的背景设置为空:

mCheckWeekPopupWindow.setBackgroundDrawable(null);

在androidMenifest.xml里面注册一下:

 <!--显示成绩的Activity-->
        <activity android:name=".activity.ScoreActivity">

        </activity>
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章