溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Calendar日視圖

發布時間:2020-07-06 05:36:36 來源:網絡 閱讀:466 作者: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

亚洲午夜精品一区二区_中文无码日韩欧免_久久香蕉精品视频_欧美主播一区二区三区美女