2015-08-04 13 views
9

Zwykle wystarczy ustawić wartość focusable, focusableInTouch + clickable na wartość false. Ale tutaj to nie działa.Unikaj, że EditText zużywa zdarzenie kliknięcia.

Chcę rodzica LinearLayout spożywać kliknięcia na EditText jak dobrze, ale to nie działa ...

<LinearLayout 
    android:id="@+id/llText" 
    android:layout_width="0dp" 
    android:layout_weight="1" 
    android:background="?attr/selectableItemBackground" 
    android:layout_height="match_parent" 
    android:orientation="horizontal"> 

    <TextView 
     android:id="@+id/tvText" 
     android:layout_width="0dp" 
     android:layout_weight="1" 
     android:layout_height="wrap_content" 
     android:layout_gravity="center_vertical" 
     android:paddingRight="5dp" 
     android:text="@null" /> 

    <EditText 
     android:id="@+id/etText" 
     android:inputType="none" 
     android:gravity="center_horizontal" 
     android:focusable="false" 
     android:focusableInTouchMode="false" 
     android:clickable="false" 
     android:layout_width="wrap_content" 
     android:ems="4" 
     android:layout_gravity="center_vertical" 
     android:layout_height="wrap_content" /> 

</LinearLayout> 

Próbowałem editable=false i inputType=none ale to nie działa. Dlaczego nie? EditText pochłania kliknięcie i nie przekazuje go rodzicowi.

EDIT

mam ustawiwszy onClickListener do LinearLayout i to nie działa, jeśli bezpośrednio nacisnąć EditText ...

+0

próbowałeś 'android: clickable = "true" 'w twoim układzie liniowym? –

+0

tak, ustawiam na nim 'onClickListener' ... działa tak długo, jak długo nie wciskam' EditText' ... – prom85

Odpowiedz

0

Należy użyć ViewGroup.onInterceptTouchEvent (MotionEvent)

Ta metoda służy do przechwytywania wszystkich zdarzeń związanych z ruchem ekranu dotykowego:

+0

Wolę używać 'TextView' i stylizować go jak' EditText' do to ... Nadal jestem zainteresowany, dlaczego powyższe rozwiązanie działa wszędzie, ale z "EditText" ... – prom85

24

Późno, ale może ktoś inny potrzebuje tych informacji. Po ustawieniu aktywowana, focusableInTouch + klikalne false, dodać to w kodzie Java:

editText.setMovementMethod(null); 
    editText.setKeyListener(null); 

Nie zapomnij zapisać te wartości, aby przywrócić je później:

mMovementMethod = mEditText.getMovementMethod(); 
    mKeyListener = mEditText.getKeyListener(); 
+2

edittext nie zadziała dla mnie po przywróceniu słuchaczy, dopóki nie ustawię 'focusableInTouchMode' na true – shoe

+0

Perfect man! dzięki ! – anthony

Powiązane problemy