var _gaq = _gaq || []; _gaq.push(['_setAccount', 'UA-20738293-1']); _gaq.push(['_trackPageview']); (function() { var ga = document.createElement('script')"/>

          jutleo
          歡迎走進(jìn)有風(fēng)的地方~~
          posts - 63,  comments - 279,  trackbacks - 0
          如何自定義一個(gè)自己的UI組件?
          創(chuàng)建一個(gè)自定義UI,需要繼承自現(xiàn)有的組件或者直接繼承Field類,通常我們必須實(shí)現(xiàn)layout()和paint()方法用于顯示想要的UI界面。
          1. layout()方法可在手機(jī)屏幕上實(shí)現(xiàn)一個(gè)具有寬度和高度的區(qū)域,調(diào)用setExtent(width, height);實(shí)現(xiàn)。getPreferredWidth()、getPreferredHeight()告訴容器出現(xiàn)在屏幕上合適的高度和寬度
          public int getPreferredWidth() {
                  
          return this.getScreen().getWidth() / 7;
              }

              
          /**
               * Gets the preferred height of the button.
               
          */
              
          public int getPreferredHeight() {
                  
          return _labelHeight;
              }

              
          protected void layout(int width, int height) {
                  
          // Calc width.
                  width = getPreferredWidth();

                  
          // Calc height.
                  height =getPreferredHeight();

                  
          // Set dimensions.
                  setExtent(width, height);
              }
          2. paint()方法使用Graphics對(duì)象繪制UI,drawLine, drawRect,drawText
          protected void paint(Graphics graphics) {
          //        graphics.setColor(0xDDDDDD);
          //        graphics.fillRect( 0, 0, getWidth(), getHeight() );
                  int textX, textY, textWidth;
                  
          int w = getWidth();
                  
          if (_isBorder == 0) {
                      graphics.drawRect(
          00, w, getHeight());
                  }
                  textX 
          = 4;
                  textY 
          = 2;
                  textWidth 
          = w - 6;
                  graphics.drawText(_label, textX, textY, (
          int) (getStyle() 
                          
          & DrawStyle.ELLIPSIS | DrawStyle.HALIGN_MASK), textWidth);
              }
          3. 如果要處理鍵盤和滾輪事件可以實(shí)現(xiàn)keyChar()/trackwheelClick()方法
          4. 如果在控件獲取到焦點(diǎn),實(shí)現(xiàn)onFocus()方法,可查看黑莓自帶的例子
          貼上完整的代碼:CalenderField.java
          package org.bulktree.calender;

          import net.rim.device.api.ui.*;

          class CalenderField extends Field implements DrawStyle {
              
          public static final int RECTANGLE = 1;
              
          public static final int TRIANGLE = 2;
              
          public static final int OCTAGON = 3;

              
          private String _label;
              
          private Font _font;
              
          private int _labelHeight;
              
          private int _isBorder = 0;//是否有邊框0有1無(wú)
              
              
          public CalenderField(String label, int shape, long style) {
                  
          super(style);
                  _label 
          = label;
                  _font 
          = getFont();
                  _labelHeight 
          = _font.getHeight();
              }
              
              
          public CalenderField(String lable, int shape, long style, int isBorder) {
                  
          super(style);
                  _label 
          = lable;
                  _font 
          = getFont();
                  _labelHeight 
          = _font.getHeight();
                  _isBorder 
          = isBorder;
              }

              
          /**
               * Gets the preferred width of the button.
               
          */
              
          public int getPreferredWidth() {
                  
          return this.getScreen().getWidth() / 7;
              }

              
          /**
               * Gets the preferred height of the button.
               
          */
              
          public int getPreferredHeight() {
                  
          return _labelHeight;
              }

              
          protected void layout(int width, int height) {
                  
          // Calc width.
                  width = getPreferredWidth();

                  
          // Calc height.
                  height =getPreferredHeight();

                  
          // Set dimensions.
                  setExtent(width, height);
              }

              
          protected void paint(Graphics graphics) {
          //        graphics.setColor(0xDDDDDD);
          //        graphics.fillRect( 0, 0, getWidth(), getHeight() );
                  int textX, textY, textWidth;
                  
          int w = getWidth();
                  
          if (_isBorder == 0) {
                      graphics.drawRect(
          00, w, getHeight());
                  }
                  textX 
          = 4;
                  textY 
          = 2;
                  textWidth 
          = w - 6;
                  graphics.drawText(_label, textX, textY, (
          int) (getStyle() 
                          
          & DrawStyle.ELLIPSIS | DrawStyle.HALIGN_MASK), textWidth);
              }
          }
          posted on 2011-01-20 15:45 凌晨風(fēng) 閱讀(1841) 評(píng)論(1)  編輯  收藏 所屬分類: BlackBerry

          FeedBack:
          # re: 黑莓開發(fā)學(xué)習(xí)入門系列,自己動(dòng)手實(shí)現(xiàn)一個(gè)日歷軟件(五)
          2011-01-20 15:56 | 蒙奇奇
          沙發(fā)觀看  回復(fù)  更多評(píng)論
            

          <2011年1月>
          2627282930311
          2345678
          9101112131415
          16171819202122
          23242526272829
          303112345

          常用鏈接

          留言簿(11)

          我參與的團(tuán)隊(duì)

          隨筆分類

          隨筆檔案

          文章分類

          文章檔案

          新聞分類

          新聞檔案

          收藏夾

          圍脖

          最新隨筆

          搜索

          •  

          最新評(píng)論

          閱讀排行榜

          評(píng)論排行榜

          主站蜘蛛池模板: 岑巩县| 安新县| 双流县| 平原县| 宝应县| 临漳县| 九江县| 龙川县| 额济纳旗| 敦煌市| 文水县| 宁津县| 东乡县| 涟源市| 莒南县| 清水河县| 德清县| 竹溪县| 延津县| 敦化市| 长海县| 青海省| 威宁| 正宁县| 沂源县| 营口市| 申扎县| 兴和县| 大英县| 启东市| 渝中区| 朝阳区| 马鞍山市| 浪卡子县| 天镇县| 大田县| 四川省| 南木林县| 静宁县| 玉田县| 高碑店市|