Двойное нажатие на textView - PullRequest
0 голосов
/ 26 декабря 2011

enter image description here Например.,

Welcome to Android World.

Теперь, когда я дважды нажимаю на пробел между "Welcome" и "to", строка "from" to "to" World должна появиться в следующей строке.

То есть

Welcome <\n>
to Android World.

Аналогичным образом, когда я дважды нажимаю на пробел между «to» и «Android», это должно быть,

Welcome <\n>
to <\n>
Android World.

В первый раз это работает, но в следующий раз оно прекращается. Я не знаю, где я иду не так. Возможно, он не получает onTouchListener должным образом.

Нужна помощь.

linear_layout = (LinearLayout) findViewById(R.id.linearLayout);

    mTextView =  new TextView[10];
    mTextView[i] = new TextView(this);
    mTextView[i].setText("Hello Android Text View");
   linear_layout.addView(mTextView[i]);

    mTextView[i].setOnTouchListener(this);


    mGestureDetector = new GestureDetector(new GestureDetector.SimpleOnGestureListener() {
        @Override
        public void onLongPress(MotionEvent e) {
            Log.d(TAG, "Long Press event");
            Toast.makeText(getBaseContext(), "Long Press", Toast.LENGTH_LONG).show();
        }

        @Override
        public boolean onDoubleTap(MotionEvent e) {
            Log.d(TAG, "Double Tap event");

            Toast.makeText(getBaseContext(), "Double Tap", Toast.LENGTH_LONG).show();

            Log.i("Tag", "------------------------------ " + e.getX() + "      " + e.getY());

            Layout layout = ((TextView) view).getLayout();
            int x = (int)e.getX();
            int y = (int)e.getY();
            if (layout!=null){
                line = layout.getLineForVertical(y);
                characterOffset = layout.getOffsetForHorizontal(line, x);
                Log.i("index", ""+characterOffset);
            }

            String text = mTextView[i].getText().toString();
            char[] char_txt = text.toCharArray();
            int ascii_val = (int)text.charAt(characterOffset);
            String rem_txt = "";

            //if(ascii_val == 32) {
                int n=characterOffset;

                while(n < char_txt.length){
                    rem_txt += char_txt[n];
                    n++;
                }
            //}

            i++;
            String before_tap_txt = text.subSequence(0, characterOffset).toString();
            mTextView[i-1].setText(before_tap_txt);
            mTextView[i] = new TextView(GestureDetecterExampleActivity.this);
            mTextView[i].setText(rem_txt);
            linear_layout.addView(mTextView[i]);

            return true;

        }
        @Override
        public boolean onDown(MotionEvent e) {
            return true;
        }
    });
    mGestureDetector.setIsLongpressEnabled(true);
}

@Override
public boolean onTouch(View v, MotionEvent event) {
    view = v;
    return mGestureDetector.onTouchEvent(event);

}

1 Ответ

0 голосов
/ 26 декабря 2011
                    Log.d(TAG, "Double Tap event");

                /*  Toast.makeText(getBaseContext(), "Double Tap",
                            Toast.LENGTH_LONG).show();*/

                    Log.i("Tag",
                            "------------------------------ " + e.getX()
                                    + "      " + e.getY());

                    Layout layout = ((TextView) view).getLayout();
                    int x = (int) e.getX();
                    int y = (int) e.getY();
                    if (layout != null) {
                        line = layout.getLineForVertical(y);
                        characterOffset = layout.getOffsetForHorizontal(
                                line, x);
                        Log.i("index", "" + characterOffset);
                    }

                    String text = mTextView[i].getText().toString();

                    char[] char_txt = text.toCharArray();

                    int ascii_val = (int) text.charAt(characterOffset);
                    String rem_txt = "";

                    if(ascii_val == 32) {
                        int n = characterOffset;

                        while (n < char_txt.length) {
                            rem_txt += char_txt[n];
                            n++;
                        }
                        // }

                        i++;
                        String before_tap_txt = text.subSequence(0,
                                characterOffset).toString();
                        mTextView[i - 1].setText(before_tap_txt.trim());
                        mTextView[i] = new TextView(
                                DoubleTapActivity.this);
                        mTextView[i].setText(rem_txt.trim());
                        mTextView[i].setOnTouchListener(DoubleTapActivity.this);
                        linear_layout.addView(mTextView[i]);

                        return true;

                    }
                    else
                    {
                        Toast.makeText(DoubleTapActivity.this, "" + text.charAt(characterOffset), Toast
                                .LENGTH_SHORT).show();
                    }
                    return false;

Поместите этот код в метод двойного нажатия. прокомментируйте, если вам нужна помощь.

...