博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Calendar日视图
阅读量:6231 次
发布时间:2019-06-21

本文共 2466 字,大约阅读时间需要 8 分钟。

  这周主要是练习了一个小程序,目的是熟悉一下这段日子以来学习的一些控件,让控件和布局看起来更协调,即使旋转手机也不会太影响画面的整体效果。更加深了对控件和布局的使用熟练程度。回顾这一个月来学习的知识以及遇到的问题,觉得在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);

    }

// 得到一个Itemid

publiclong getItemId(int position) {

return position;

    }

// 返回Items的总数

publicint getCount() {

returnitems.size();

    }

// position得到所对应的ItemView,从而进行操作。返回一个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.time02null);

// }

      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!一切搞定!

本文转自HDDevTeam 51CTO博客,原文链接:http://blog.51cto.com/hddev/1218185,如需转载请自行联系原作者

你可能感兴趣的文章
BZOJ-4326: NOIP2015 运输计划 (二分+LCA+树上差分)
查看>>
linux并发控制之读写信号量
查看>>
MySQL表的四种分区类型
查看>>
Razor模板引擎
查看>>
Log4Net 日志配置[附带源码]
查看>>
企业级Nginx Web服务优化实战
查看>>
Google地图,Baidu地图数据供应商
查看>>
抽象类
查看>>
node溢出
查看>>
【转】充满浮躁的程序员
查看>>
jquery tips 提示层
查看>>
Python 之IO模型
查看>>
SSH项目tomcat发布时,Initializing Spring root WebApplicationContext卡死不动
查看>>
Lombok
查看>>
Single Number II
查看>>
由于一个老熟人对架构的一句话而拉黑了他。
查看>>
Mysql第八天 分区与分表
查看>>
CF 558A(Lala Land and Apple Trees-暴力)
查看>>
关于继承Fragment后重写构造方法而产生的错误
查看>>
2017-5-7 账号激活 权限设置 销售 仓库 财务三大模块
查看>>