温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

Calendar日视图

发布时间:2020-07-06 05:36:36 来源:网络 阅读:443 作者:HDDevTeam 栏目:开发技术

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


向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI