2010-08-22 7 views
3

Это безумие. У меня есть следующий XML-макет:EditText не захватывает ViewFlipper flings?

<FrameLayout android:layout_width="fill_parent" android:layout_height="wrap_content" android:background="@drawable/shadow" android:focusable="true" android:focusableInTouchMode="true"> 
    <ViewFlipper android:id="@+id/flipper" android:layout_width="fill_parent" android:layout_height="fill_parent"> 
     <EditText android:id="@+id/reviews" style="@style/DescriptionArea" android:layout_width="fill_parent" android:layout_height="wrap_content" android:enabled="false" android:background="@null" /> 
    <EditText android:id="@+id/notes" style="@style/DescriptionArea" android:hint="@string/detail_hint" android:layout_width="fill_parent" android:layout_height="wrap_content" android:enabled="false" android:maxLines="4"/> 
    </ViewFlipper> 
</FrameLayout> 

И в Java:

viewFlipper = (ViewFlipper)findViewById(R.id.flipper); 
    slideLeftIn = AnimationUtils.loadAnimation(this, R.anim.slide_left_in); 
    slideLeftOut = AnimationUtils.loadAnimation(this, R.anim.slide_left_out); 
    slideRightIn = AnimationUtils.loadAnimation(this, R.anim.slide_right_in); 
    slideRightOut = AnimationUtils.loadAnimation(this, R.anim.slide_right_out); 

    gestureDetector = new GestureDetector(new MyGestureDetector()); 
    gestureListener = new View.OnTouchListener() { 
     public boolean onTouch(View v, MotionEvent event) { 
      if (gestureDetector.onTouchEvent(event)) { 
       return true; 
      } 
      return false; 
     } 
    }; 

Похоже, если я пытаюсь бросить на верхней части области EditText, этот жест не регистрирует. Однако, если я бросаю вокруг это, то есть фон EditText, он работает. Я пробовал следовать вокруг с высотами и ширинами fill_parent/wrap_content, но, похоже, это ничего не меняет. Я подтвердил это подозрение, сделав фон EditText «красным» и отметив, что ничто внутри этого красного прямоугольника не может активировать бросок. Итак, как мне сделать эту работу?

ответ

5

Вы можете переопределить метод dispatchTouchEvent активность в:

@Override 
public boolean dispatchTouchEvent(MotionEvent ev) { 
    if (gestureDetector != null) { 
     gestureDetector.onTouchEvent(ev); 
    } 
    return super.dispatchTouchEvent(ev); 
} 

Очевидно gestureDetector является переменной-члена вам нужно объявить и инициализировать от вашей активности.

+0

Как ужасно! Я только переопределял onTouchEvent: @Override public boolean onTouchEvent (событие MotionEvent) { if (gestureDetector.onTouchEvent (event)) \t return true; \t прочее \t \t return false; } Спасибо за помощь. Если бы я мог, то стопроцентно. – GJTorikian

+0

Как насчет моего дела? У меня есть макет с tabcontrol с двумя таблицами. один из них имеет вид. этот viewflipper имеет некоторые edittexts, кнопки и т. д. внутри его макета. Мой вопрос заключается в том, как я могу управлять детектором жестов, чтобы активировать его, только если пользователь переместит палец внутри моей видоискателя? Я имею в виду ... если я сделаю то, что вы сказали, пользователь может бежать, пока не может видеть viewflipper ... Я попытался установить фокусируемый макет, но он «onTouch» не является дескриптором, даже если я установил фокусность потомка на «Фокус перед потомками» – digulino

+0

@ digulino хорошо, я думаю, вам нужно проверить параметр MotionEvent и решить, нацеливается ли он на ваш флиппер или нет. –

1

пытаются применить setLongClickable(true) для ViewFlipper

 Смежные вопросы

  • Нет связанных вопросов^_^