2015-08-04 13 views
9

Normalmente è sufficiente impostare focusable, focusableInTouch + clickable su falso. Ma qui non funziona.Evita che EditText consumi evento click

voglio il genitore LinearLayout di consumare clic sul EditText come pure, ma non funziona ...

<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> 

ho cercato editable=false e inputType=none ma non funziona. Perchè no? Il EditText consuma il clic e non lo consegna al suo genitore.

EDIT

sto impostando un onClickListener al LinearLayout e non funziona se si preme direttamente il EditText ...

+0

Hai provato 'Android: clickable = "true" 'sul tuo layout lineare? –

+0

sì, sto impostando un 'onClickListener' ad esso ... funziona fintanto che non preme il' EditText' ... – prom85

risposta

0

Si dovrebbe usare ViewGroup.onInterceptTouchEvent (MotionEvent)

Questo metodo consente di intercettare tutti gli eventi di movimento dello schermo tattile

+0

Preferisco usare un 'TextView' e lo stile come un' EditText' a questo ... Comunque, mi interessa perché sopra soluzione funziona ovunque ma con un 'EditText' ... – prom85

24

In ritardo, ma forse qualcun altro ha bisogno di queste informazioni. Dopo aver impostato attivabile, focusableInTouch + cliccabile su false, aggiungere questo nel codice Java:

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

Non dimenticare di salvare quei valori di ripristinare in un secondo momento:

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

l'edittext non funzionerebbe per me dopo aver ripristinato gli ascoltatori fino a quando ho impostato' focusableInTouchMode' su true – shoe

+0

Perfect man! Grazie ! – anthony