EditText скроллер и ScrollView - PullRequest
1 голос
/ 09 марта 2012

имеют виджет EditText вместе с некоторыми виджетами, помещенными в ScrollView.

Я установил свойство EditText с android: scrollbars = "vertical", чтобы включить вертикальную прокрутку внутри editText.

Теперь, когдая запустил действие, editText имеет фокус, и он показывает вертикальные полосы прокрутки в течение нескольких секунд.

Проблема здесь в том, что когда я пытаюсь прокрутить внутри EditText, ScrollView перемещается.

Как включить прокрутку в EditText, а не в просмотре прокрутки.

<ScrollView
    android:id="@+id/scrollView1"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <LinearLayout
        android:id="@+id/main"
        android:layout_width="match_parent"            
        android:layout_height="wrap_content"
        android:orientation="vertical" >
        .
        .
        .
        <EditText
            android:id="@+id/smset"
            android:layout_width="match_parent"
            android:gravity="top|left"
            android:height="100dip"
            android:inputType="textMultiLine" >
        </EditText>
        .
        .
        .
   </LinearLayout>
</ScrollView>

Ответы [ 4 ]

5 голосов
/ 21 мая 2013

В вашем Java-файле

     EditText dwEdit = (EditText) findViewById(R.id.DwEdit);       
     dwEdit.setOnTouchListener(new OnTouchListener() {
           public boolean onTouch(View view, MotionEvent event) {
                // TODO Auto-generated method stub
                if (view.getId() ==R.id.DwEdit) {
                    view.getParent().requestDisallowInterceptTouchEvent(true);
                    switch (event.getAction()&MotionEvent.ACTION_MASK){
                    case MotionEvent.ACTION_UP:
                        view.getParent().requestDisallowInterceptTouchEvent(false);
                        break;
                    }
                }
                return false;
            }
        });

В XML

   <EditText
    android:id="@+id/DwEdit"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:minLines="10"
    android:scrollbarStyle="insideInset"
    android:scrollbars="vertical" 
    android:overScrollMode="always"
    android:inputType="textCapSentences">
    </EditText> 
2 голосов
/ 11 мая 2012

Вы не можете поместить что-то, что может прокручивать, и то, что прокручивает.

Android не может точно сказать, какой элемент вы хотите прокручивать, когда вы касаетесь экрана, поэтому он вообще не поддерживается. (игнорируя некоторые хаки, которые являются довольно плохой практикой).

0 голосов
/ 03 октября 2012

Я бы не сказал, что это плохая практика, если все сделано правильно, но это не то, что естественно ожидалось.

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

Вы можете изменить ScrollView для блокировки, как в здесь .

Затем программно заблокируйте LockableScrollView прокрутку при касании внутренней вещи.

smset.setOnTouchListener(new OnTouchListener()
{
    public boolean onTouch(View v, MotionEvent event)
    {
        // Disables LockableScrollView when the EditText is touched
        if (event.getAction() == MotionEvent.ACTION_DOWN)
        {
            scrollView1.setScrollingEnabled(false);
        }

        // Enables LockableScrollView when the EditText is touched
        if (event.getAction() == MotionEvent.ACTION_UP)
        {
            scrollView1.setScrollingEnabled(true);
        }
        return false;
    }
});

Недостатком этого является то, что он отключит прокрутку при касании EditText, но он не должен вызывать никаких других побочных эффектов.

0 голосов
/ 02 октября 2012

Один из таких хаков:

scroll.setOnTouchListener(new OnTouchListener()
{ 
    public boolean onTouch(View v, MotionEvent event) 
    {
        return true; 
    }
});

Обратите внимание, что для включения прокрутки в ScrollView вам нужно будет запустить ту же функцию, но с «return false;»вместо этого.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...