0

ここでは、トップ バー、カスタムの垂直スクロール マネージャー、Editfieldメッセージを送信するためのボタン、および送信ボタンを含むチャット用の画面を作成しています。

次に、メッセージ レイアウトを作成します。これにはVerticalFieldManagerEditFieldフォーカス可能で読み取り専用のメッセージ レイアウトとLabelField、名前と日付用の 2 つの があります。この垂直フィールド マネージャーは、チャット メッセージの数に応じて動的に作成されます。これはすべてカスタムスクロールでレイアウトされています。

画面の下からスクロールする必要があります。今のところ、画面の上から動作します。

画面の下部に送信ボタンがBasicEditFieldあります

7 秒ごとにページを更新し、ページを更新するときにレイアウト全体を再作成します。BasicEditFieldそのため、ページが更新されるたびにフォーカスを維持する必要があります。また、スクロールを逆にしたいです。

ここに私の垂直スクロールマネージャークラス

public class VerticalScrollManager extends VerticalFieldManager implements
    ScrollChangeListener {


public VerticalScrollManager() {
    this(VERTICAL_SCROLL | NO_VERTICAL_SCROLLBAR|DOWNWARD, Integer.MAX_VALUE, Integer.MAX_VALUE);
}

public VerticalScrollManager(int w, int h) {
    this(VERTICAL_SCROLL | NO_VERTICAL_SCROLLBAR|DOWNWARD, w, h);
}

public VerticalScrollManager(long style) {
    this(style, Integer.MAX_VALUE, Integer.MAX_VALUE);
}

public VerticalScrollManager(long style, int w, int h) {
    super(style);
    maxVisibleHeight = h;
    maxVisibleWidth = w;

    setScrollListener(this);
}




protected void sublayout(int w, int h) {

    isScrolling = ((getStyle() & VERTICAL_SCROLL) == VERTICAL_SCROLL);

    int scrollbarWidth = isScrolling ? SCROLLBAR_WIDTH + SCROLLBAR_LEFT_MARGIN + SCROLLBAR_RIGHT_MARGIN : 0;

    visibleHeight = Math.min(h, maxVisibleHeight);
    visibleWidth = Math.min(w, maxVisibleWidth);

    int myWidth = visibleWidth - scrollbarWidth;
    super.sublayout(myWidth, visibleHeight);


    visibleHeight = getHeight();
    totalHeight = getVirtualHeight();
    visibleWidth = getWidth() + scrollbarWidth;

    setExtent(visibleWidth, visibleHeight);

    setVirtualExtent(visibleWidth, totalHeight);

    isScrolling = (visibleHeight < totalHeight);


    if (isScrolling) {
        sliderHeight = visibleHeight * visibleHeight / totalHeight;
        sliderHeight = Math.max(sliderHeight, 1);    // show at least one pixel!

        sliderXPosition = visibleWidth - SCROLLBAR_WIDTH - SCROLLBAR_RIGHT_MARGIN;

    }
}




public void scrollChanged(Manager mgr, int newX, int newY) {
if (mgr == this) {
       invalidate(newX + sliderXPosition, newY, SCROLLBAR_WIDTH + SCROLLBAR_RIGHT_MARGIN, getVisibleHeight());

}
}

}

そしてここに、UIと機能を処理する私の画面があります

public class ChatScreen extends MainScreen implements FieldChangeListener, FocusChangeListener {



    class MainTask implements Runnable
    {

        public MainTask()
        {}

        public void run() {

            try
            {
                if(textMsg.getText().equals(""))
                {   
                    IssueHTTPPostL();
                }
                else
                {
                    IssueHTTPPostChat(textMsg.getText());
                }
                UiApplication.getUiApplication().invokeLater(new Runnable() {

                    public void run() {
                        if(replyCode.equalsIgnoreCase("success"))
                        {   




                            if(chatMsgData!=null && chatMsgData.length>0 )
                            {

                                for( int i=0; i<chatMsgData.length; i++)
                                {


                                    final String name = chatMsgData[i].name;
                                    final String email = chatMsgData[i].email;
                                    final String date = chatMsgData[i].date;
                                    final String msg = chatMsgData[i].message;
                                    final String vappUser = chatMsgData[i].vappUser;

                                    if(chatMsgData[i].isReply.equals("0"))
                                    {   

                                        vfm = new VerticalFieldManager(VerticalFieldManager.FIELD_RIGHT)
                                        {
                                            protected void paintBackground(Graphics g) 
                                            {

                                                g.setColor(Color.WHITE);
                                                g.fillRoundRect(30, 0, getWidth()-30, getHeight(), 12, 12);
                                                g.setColor(0X626262);
                                                g.drawRoundRect(30, 0, getWidth()-30, getHeight(), 12, 12);
                                                //g.drawBitmap(0,0,getWidth(),getHeight(),imgRight,0,0);
                                            }   

                                        };

                                        lblName = new LabelField(name, LabelField.FIELD_LEFT|DrawStyle.LEFT)
                                        {
                                            protected void paint(Graphics g) 
                                            {
                                                g.setColor(Color.BLACK);
                                                super.paint(g);
                                            };
                                        };

                                        if(name.equals("")||name.equals("Name"))
                                        {
                                            lblName.setText(email);
                                        }

                                        lblDate = new LabelField(date, LabelField.FIELD_RIGHT|DrawStyle.RIGHT);
                                        lblDate.setFont(font.derive(Font.PLAIN, dateFontSize));
                                        lblName.setFont(font.derive(Font.BOLD, nameFontSize));
                                        JustifiedHorizontalFieldManager hfm = new JustifiedHorizontalFieldManager(lblName, lblDate, true);


                                        hfm.setMargin(10, 10, 10, 50);

                                            lblMsg = new EditField(EditField.FOCUSABLE|EditField.READONLY)
                                            {
                                                protected void paint(Graphics g) 
                                                {
                                                    g.setColor(0x626262);
                                                    super.paint(g);
                                                };
                                            };


                                        lblMsg.setText(msg);
                                        lblMsg.setMargin(10, 10, 10, 50);
                                        lblMsg.setFont(font.derive(Font.PLAIN, msgFontSize));
                                        vfm.add(hfm);

                                        vfm.add(lblMsg);
                                        vfm.setMargin(10, 20, 10, 0);
                                    }
                                    else
                                    {

                                        vfm = new VerticalFieldManager(VerticalFieldManager.FIELD_LEFT)
                                        {
                                            protected void paintBackground(Graphics g) 
                                            {
                                                g.setColor(Color.WHITE);
                                                g.fillRoundRect(0, 0, getWidth()-30, getHeight(), 12, 12);
                                                g.setColor(Color.BLACK);
                                                g.drawRoundRect(0, 0, getWidth()-30, getHeight(), 12, 12);
                                                //g.drawBitmap(0,0,getWidth(),getHeight(),imgLeft,0,0);
                                            }
                                        };


                                        lblName = new LabelField(vappUser, LabelField.FIELD_LEFT|DrawStyle.LEFT)
                                        {
                                            protected void paint(Graphics g) 
                                            {
                                                g.setColor(Color.BLACK);
                                                super.paint(g);
                                            };
                                        };

                                        if(name.equals("")||name.equals("Name"))
                                        {
                                            lblName.setText(email);
                                        }

                                        lblDate = new LabelField(date, LabelField.FIELD_RIGHT|DrawStyle.RIGHT)
                                        {
                                            protected void paint(Graphics g) 
                                            {
                                                g.setColor(0X626262);
                                                super.paint(g);
                                            };
                                        };
                                        lblDate.setFont(font.derive(Font.PLAIN, dateFontSize));
                                        lblName.setFont(font.derive(Font.BOLD, nameFontSize));
                                        JustifiedHorizontalFieldManager hfm = new JustifiedHorizontalFieldManager(lblName, lblDate, true);

                                        //hfm.setMargin("top", "right", "bottom", "left");
                                        hfm.setMargin(10, 50, 10, 10);


                                            lblMsg = new EditField(EditField.FOCUSABLE|EditField.READONLY)
                                            {
                                                protected void paint(Graphics g) 
                                                {
                                                    g.setColor(0x626262);
                                                    super.paint(g);
                                                };
                                            };


                                        lblMsg.setText(msg);
                                        lblMsg.setMargin(10, 40, 10, 10);
                                        lblMsg.setFont(font.derive(Font.PLAIN, msgFontSize));
                                        vfm.add(hfm);

                                        vfm.add(lblMsg);

                                        vfm.setMargin(10, 10, 20, 0);



                                    }


                                    vsm.add(vfm);


                                }   

                            }
                            add(vsm);

                            add(sendHfm);
                        }

                        else
                        {

                            timer.cancel();
                            UiApplication.getUiApplication().popScreen(ChatScreen.this);
                            UiApplication.getUiApplication().pushScreen(new ChatListScreen());
                        }
                    }
                });

            }
            catch(Exception e)
            {e.printStackTrace();}
        }

    }









}

ここに画像の説明を入力

4

1 に答える 1

2

私の理解が正しければVerticalFieldManager、画面の中央 (トップバーの下、送信ボタンの上) に 1 つ表示されます。そのマネージャーをコンテンツの最後から開始させたいと考えています。右?

そのために、使用してみてください

vsm.setVerticalScroll(vsm.getVirtualHeight());

vsm、古い読み取り専用メッセージを含む垂直フィールド マネージャーです。

フォーカスを外す可能性のある何か (ページの更新など) が発生した場合はいつでも、次のBasicEditFieldコマンドで元に戻すことができます。

textMsg.setFocus();

textMsg編集フィールドはどこですか。明らかに、これが機能するためには、vsmtextMsgをローカル変数として作成してadd().

于 2013-03-14T07:56:12.513 に答える