0

Я успешно создал список (LinearLayout), который содержит несколько динамических элементов/строк. Он заполнен содержимым, полученным webservice. Один из элементов в строке - это HorizontalScrollView, который содержит переменную величину полей EditText.HorizontalScrollView с прокруткой EditText при появлении клавиатуры

Это означает, что все edittexts из всех строк (включая заголовок) могут прокручиваться с помощью этого горизонтальногоScrollView.

Scrollmanager будет следить за тем, чтобы все horizontalScrollviews перемещались одновременно. Таким образом, это в основном прокручиваемый столбец внутри списка.

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

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

Мои ScrollManager OnScrollChanged

@Override 
    public void onScrollChanged(View sender, int l, int t, int oldl, int oldt) { 
     // avoid notifications while scroll bars are being synchronized 
     if (isSyncing) 
      return; 

     isSyncing = true; 

     // remember scroll type 
     if (l != oldl) 
      scrollType = SCROLL_HORIZONTAL; 
     else if (t != oldt) 
      scrollType = SCROLL_VERTICAL; 
     else { 
      // not sure why this should happen 
      isSyncing = false; 
      return; 
     } 

     // update clients 
     for (ScrollNotifier client : clients) { 
      View view = (View) client; 

      if (view == sender) 
       continue; // don't update sender 

      // scroll relevant views only 
      // TODO Add support for horizontal ListViews - currently weird things happen when ListView is being scrolled horizontally 
      if ((scrollType == SCROLL_HORIZONTAL && view instanceof HorizontalScrollView) 
        || (scrollType == SCROLL_VERTICAL && view instanceof ScrollView) 
        || (scrollType == SCROLL_VERTICAL && view instanceof ListView)) { 
       view.scrollTo(l, t); 
      } 
     } 

     isSyncing = false; 
    } 

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

ответ

1

Я не проверял это, но вы должны быть в состоянии остановить Размножение сенсорного события к HorizontalScrollView, установив OnTouchListener вашего EditText и переопределение метода OnTouch так:

@Override 
public boolean onTouch(View v, MotionEvent event) 
{ 
    Log.i("OnTouch", "Fired On Touch in " + v.getId()); 

    // Do this on the down event too so it's not getting fired before up event 
    if(event.getAction() == MotionEvent.ACTION_DOWN) 
    { 
     // Disallow ScrollView to intercept touch events. 
     v.getParent().requestDisallowInterceptTouchEvent(true); 
    } 

    //only do this on the up event so you're not doing it for down too 
    if(event.getAction() == MotionEvent.ACTION_UP) 
    { 
     // Disallow ScrollView to intercept touch events. 
     v.getParent().requestDisallowInterceptTouchEvent(true); 
    } 

    //Keep going with the touch event to show the keyboard   
    v.onTouchEvent(event); 
    return true; 
} 
+0

Безразлично» t, похоже, работает на меня :-( – stackr

+0

@stackr Все еще прокрутка – airowe

+0

@stackr Что вы подразумеваете под «не работает»? – airowe