0

BB アプリ用のカスタム ListField を作成したいと考えています。私はそれで成功しました。2 つの RichTextField、1 つの Image、1 つの RatingField を listField に描画します。

問題は、LIstField に RichTextField の単一行を表示したいだけです。したがって、複数の行がある場合は、1 行だけを表示する必要があります。

複数の行がある場合、rattingField がオーバーラップするという理由だけでそれが必要です。

下の画像を参照してください。

ここに画像の説明を入力

以下のコードを使用して作成し、値を設定しています。

rows = new TableRowManager[dealArray.length()];
       
        rating2 = new RatingField( Bitmap.getBitmapResource( "yellow_star.png" )
                , Bitmap.getBitmapResource( "white_star.png" )
                , Bitmap.getBitmapResource( "yellow_star.png" )
                , Bitmap.getBitmapResource( "white_star.png" )
                , 8, 5, Field.FIELD_HCENTER );
        try{
            System.out.println("================== = = ==HERE IT IS COMES");
            
        for(int i=0;i<dealArray.length();i++){
            // create a table row manager
            rows[i] = new TableRowManager();
            // set the menu item name
            EncodedImage encoded_img=EncodedImage.getEncodedImageResource("no_photo.png");
            byte[] data=encoded_img.getData();
            Bitmap bitmap=Bitmap.createBitmapFromBytes(data, 0, data.length,1);//Here we get the Image;
            Bitmap scaleBitmap=new Bitmap(100,100);//Now we are scaling that image;
            bitmap.scaleInto(scaleBitmap, Bitmap.FILTER_LANCZOS);
            
            
            rows[i].add(new BitmapField(scaleBitmap));
            
            rows[i].add(new RichTextField(dealArray.getJSONObject(i).getString("DealName"), DrawStyle.ELLIPSIS));
            
            rows[i].add(new RichTextField(dealArray.getJSONObject(i).getString("DealDescription"), TextField.NO_NEWLINE));
            
            rows[i].add(new RatingField( Bitmap.getBitmapResource( "yellow_star.png" )
                    , Bitmap.getBitmapResource( "white_star.png" )
                    , Bitmap.getBitmapResource( "yellow_star.png" )
                    , Bitmap.getBitmapResource( "white_star.png" )
                    , Integer.parseInt(dealArray.getJSONObject(i).getString("DealTotalStamp"))
                    , Integer.parseInt(dealArray.getJSONObject(i).getString("StampCompletionOnDeal"))
                    , Field.FIELD_HCENTER ));
            // create a table row manager
            
        }
        }catch(Exception e){
            e.printStackTrace();
        }
        
       System.out.println("HELLOOOOoo oo ooo");
        
        vfm.addAll(rows);

そして、drawListRow で描画するには、以下のコードを使用します。

private class TableRowManager extends Manager{
            public TableRowManager(){
                super(0);
            }
            public void drawRow(Graphics g, int x, int y, int width, int height){
                // Arrange the cell fields within this row manager.
                layout(width, height);

                // Place this row manager within its enclosing list.
                setPosition(x, y);

                // Apply a translating/clipping transformation to the graphics
                // context so that this row paints in the right area.
               //g.pushRegion(getExtent());

                // Paint this manager's controlled fields.
                subpaint(g);
                
                g.setColor(0x00000000);
               // g.drawLine(0, 0, getPreferredWidth(), 0);
                
                // Restore the graphics context.
                g.popContext();
            }
            
            protected void sublayout(int width, int height) {
                // TODO Auto-generated method stub
                 int preferredWidth = getPreferredWidth();
                 int preferredHeight = getPreferredHeight();
                 // for deal image
                 
                 
                 //SBitmapField bmp = new BitmapField(Bitmap.getBitmapResource(""));
                 Field field = getField(0);
                 layoutChild(field, 100, 100);
                 setPositionChild(field, 5, 5);
                 
                 // for deal name
                 field = getField(1);
                 layoutChild(field, preferredWidth - 100, 0);
                 setPositionChild(field, 110, 0);
                 
                 // for deal Description
                 field = getField(2);
                 layoutChild(field, preferredWidth, 5);
                 setPositionChild(field,110 , 35);
                   
                 // for Deal stamp
                 field = getField(3);
                 layoutChild(field, preferredWidth, 50);
                 setPositionChild(field, 110, 65);
                    
                    
                 setExtent(preferredWidth, 110);
            }
            public int getPreferredWidth()
            {
                return Graphics.getScreenWidth();
            }

            // The preferred height of a row is the "row height" as defined in the
            // enclosing list.
            public int getPreferredHeight()
            {
                return 30;
            }
        }

RichTextField の説明を 1 行だけにしたい場合はどうすればよいですか??

これを手伝ってください。

4

1 に答える 1

0

RichTextField に使用できるスペースの量を設定するには、 RichTextField のレイアウト メソッド使用する必要があります。

于 2012-12-19T13:16:43.300 に答える