[仿南航app开发日记5]查成绩界面开发完成以及使用PopupWindow踩过的坑
2016-12-27 02:00
666 查看
前言
这篇博客是接着前一篇博客开发的:[仿南航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>
相关文章推荐
- [仿南航app开发日记4]登陆对话框完成以及自定义对话框碰到的坑
- [仿南航app开发日记2]主界面完成
- iOS开发UI篇—在UITableview的应用中使用动态单元格来完成app应用程序管理界面的搭建
- iOS开发UI篇—在UITableview的应用中使用动态单元格来完成app应用程序管理界面的搭建
- iOS开发UI篇—在UITableview的应用中使用动态单元格来完成app应用程序管理界面的搭建
- iOS开发UI篇—在UITableview的应用中使用动态单元格来完成app应用程序管理界面的搭建
- iOS开发UI篇—在UITableview的应用中使用动态单元格来完成app应用程序管理界面的搭建
- iOS开发UI篇—在UITableview的应用中使用动态单元格来完成app应用程序管理界面的搭建
- iOS开发UI篇—在UITableview的应用中使用动态单元格来完成app应用程序管理界面的搭建
- iOS开发UI篇—在UITableview的应用中使用动态单元格来完成app应用程序管理界面的搭建
- iOS开发UI篇—在UITableview的应用中使用动态单元格来完成app应用程序管理界面的搭建
- [仿南航app开发日记7]自绘漂亮的课程表界面
- iOS开发UI基础—31在UITableview的应用中使用动态单元格来完成app应用程序管理界面的搭建
- 安卓简单app开发实践,代码完成后没报错,但功能就是无法使用,学生菜鸟,求指导
- iPad开发--美团界面的搭建(主要是对Popover的使用,以及监听)
- ios 版本迭代开发中,去重,支付,以及界面遇到的bug(使用到navigation防止界面的self.view坐标发生改变)
- [仿南航app开发日记8]解决部分bug
- 开发日记——手机安全卫士 Day06 2016-7-25 修改部分界面,增加了联系人搜索功能,完成部分黑名单功能
- 【iOS开发-1】AppIcon图标的尺寸,绘制,命名规则以及怎么回到HOME界面查看效果?
- 标签:ios开发 界面启动 APP下载安装第一次使用一般会显示一个首次启动引导界面然后进入主界面,非首次开启APP也通常会显示一个启动界面然后进入主界面。 1、本例首次启动显示First