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
          如何自定義一個自己的UI組件?
          創(chuàng)建一個自定義UI,需要繼承自現(xiàn)有的組件或者直接繼承Field類,通常我們必須實(shí)現(xiàn)layout()和paint()方法用于顯示想要的UI界面。
          1. layout()方法可在手機(jī)屏幕上實(shí)現(xiàn)一個具有寬度和高度的區(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對象繪制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無
              
              
          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) 閱讀(1838) 評論(1)  編輯  收藏 所屬分類: BlackBerry

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

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

          常用鏈接

          留言簿(11)

          我參與的團(tuán)隊

          隨筆分類

          隨筆檔案

          文章分類

          文章檔案

          新聞分類

          新聞檔案

          收藏夾

          圍脖

          最新隨筆

          搜索

          •  

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 西林县| 上蔡县| 二手房| 伽师县| 道真| 河源市| 明光市| 维西| 杨浦区| 双柏县| 霸州市| 万源市| 扎赉特旗| 宁南县| 双江| 铁岭县| 汤原县| 安陆市| 洛川县| 徐水县| 长治市| 乐陵市| 九江市| 武宣县| 东海县| 宁陵县| 古丈县| 瓦房店市| 定州市| 临潭县| 信宜市| 广德县| 泽州县| 临朐县| 泊头市| 蒙阴县| 通海县| 万年县| 历史| 中牟县| 万宁市|