这周主要是练习了一个小程序,目的是熟悉一下这段日子以来学习的一些控件,让控件和布局看起来更协调,即使旋转手机也不会太影响画面的整体效果。更加深了对控件和布局的使用熟练程度。回顾这一个月来学习的知识以及遇到的问题,觉得在Calendar这个小程序时印象特别深刻。
做这个小程序的时候遇到的比较大的难题就是那个自定义的适配器。代码如下:
class CalendarAdapter extends BaseAdapter {
private LayoutInflater mInflater;
private Context mContext = null;
privateintx;
privateinty;
privateinthour;
public CalendarAdapter(Context context) {
mContext = context;
/* LayoutInflater的作用和findViewById()差不*多, 不同之处在于LayoutInflater是找layout文件夹下 *的某个xml布局文件!而findViewById()是找某一个xml
*下的具体 widget控件。
*/
mInflater = LayoutInflater.from(mContext);
}
// 得到一个Item
public Object getItem(int arg0) {
returnitems.get(arg0);
}
// 得到一个Item的id
publiclong getItemId(int position) {
return position;
}
// 返回Items的总数
publicint getCount() {
returnitems.size();
}
// 由position得到所对应的Item的View,从而进行操作。返回一个convertView,
// BaseAdapter类封装的有方法让Items的所有项都执行此操作
public View getView(int position, View convertView,
android.view.ViewGroup parent) {
final TextView indexText;
// if (convertView == null) {此处出现异常!!!
convertView = mInflater.inflate(R.layout.time02, null);
// }
convertView.setBackgroundColor(Color.WHITE);
indexText = (TextView) convertView.findViewById(R.id.time);
LinearLayout listItem = (LinearLayout) convertView
.findViewById(R.id.listitem);
// 设置item中的indexText的文本
indexText.setText(items.get(position).toString());
indexText.setTextColor(Color.GRAY);
// 获取当前时间
Time t = new Time();
t.setToNow();
hour = t.hour;
int minute = t.minute;
// Log.v("time",hour + "");
if (position < hour) {
convertView.setBackgroundColor(Color.LTGRAY);
}
if (position == hour) {
x = convertView.getWidth();
// 把convertView分成60等份
y = convertView.getHeight() * minute / 60;
/* Log.v("minute", minute + "");
* Log.v("width", x + "");
*Log.v("height",convertView.getHeight()
* + "");
* Log.v("Rectheight", y + "")
*/
/*MyView mv = newMyView();实例化MyView对象后,会自动调用onDraw方法
mv.onDraw(canvas);
setContentView(mv);*/
//此时convertView里面已经没有TextView了,所以要用canvas.drawText()设置文本
LinearLayout layout = new LinearLayout(mContext);
layout.addView(new MyView(mContext));
return layout;
}
return convertView;
}
这样的话在ListView 的当前时间栏中的画布已经占满了整个手机屏幕,不打算找一些方法设置一下画布的大小,后来找到了这个方法onMeasure。
在MyView中要添加另一个方法:
protectedvoidonMeasure(int widthMeasureSpec, int heightMeasureSpec){
setMeasuredDimension(1500, 60);
}
在网上查了一些资料,给出了一些解释:
1.onMeasure的两个参数用于测量水平和垂直空间大小,具体怎么测量,不得而知
2.onMeasure被调用时用来决定当前view以及所有它的子view的尺寸请求
画面终于恢复了正常,Ok!一切搞定!
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。