2012-12-10 13 views
9

Ho un pulsante switch (in realtà è un pulsante personalizzato) e desidero disattivare la funzionalità di scorrimento per qualche motivo; Voglio che l'utente sia in grado di fare clic solo su di esso. C'è un modo per ottenere questo? Grazie.Pulsante di commutazione - disabilita la funzione di scorrimento

+0

può aiutare questo: -http: // StackOverflow.it/questions/11753355/switch-between-doubletap-and-swipe –

+0

swipes (sono chiamati EVENTI FLING) - non lo sapevo ... ci proverò in un minuto – Paul

risposta

23

È possibile impostareClickable (false) sul proprio Switch, quindi ascoltare l'evento onClick() all'interno del genitore dello Switch e attivarlo a livello di programmazione. L'interruttore apparirà comunque abilitato ma l'animazione a scorrimento non avverrà.

...

[In onCreate()]

Switch _Switch_Internet = (Switch) findViewById(R.id.m_switch_internet); 
_Switch_Internet.setClickable(false); 

...

[clicca ascoltatore]

public void ParentLayoutClicked(View _v){ 

    Switch _Switch_Internet = (Switch) findViewById(R.id.m_switch_internet); 

     if(_Switch_Internet.isChecked()){ 
      _Switch_Internet.setChecked(false);   
     } 
     else{ 
      _Switch_Internet.setChecked(true); 
    }  
} 

...

[ layout.xml]

<RelativeLayout 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:onClick="ParentLayoutClicked" 
     android:focusable="false" 
     android:orientation="horizontal" 
     > 

     <Switch 
      android:layout_marginTop="5dip" 
      android:layout_marginBottom="5dip" 
      android:id="@+id/m_switch_internet" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:textOff="NOT CONNECTED" 
      android:textOn="CONNECTED" 
      android:focusable="false" 
      android:layout_alignParentRight="true"             
      android:text="@string/s_internet_status" /> 

    </RelativeLayout> 
7

Per disattivare un uso Dell'Interruttore seguente metodo

switchBtn.setEnabled(false); 

Per fare interruttore non uso cliccabile

switchBtn.setClickable(false); 

dove switchBtn è oggetto Dell'Interruttore

+0

Non funziona. Prima di tutto perché l'evento click non appare dopo che switchBtn.setEnabled (false). In secondo luogo, per la vista disabilitata abbiamo risorse diverse. – Sinigami

14

Un modo migliore è quello di prevenire la Passare alla classe dalla ricezione degli eventi MotionEvent.ACTION_MOVE.

Questo può essere fatto con:

switchButton.setOnTouchListener(new View.OnTouchListener() { 
    @Override 
    public boolean onTouch(View v, MotionEvent event) { 
    return event.getActionMasked() == MotionEvent.ACTION_MOVE; 
    } 
}); 

Poi si è liberi di impostare un clic ascoltatore sullo switch a seconda dei casi.

Controlla il implementation of Switch per vedere come funziona il trascinamento. È molto bello!

+0

Non funziona. L'evento di clic non viene visualizzato. Passa ancora a scorrere. – Sinigami

+0

Prova 'setClickable (false)' e implementa 'setOnTouchListener' in aggiunta –

1

La mia soluzione è:

switchView.setOnTouchListener(new View.OnTouchListener() { 
@Override   
public boolean onTouch(View view, MotionEvent event) { 
       if (event.getAction() == MotionEvent.ACTION_UP) { 
          //Your code 
       } 
       return true;    
    }  
}); 

O butterknife:

@OnTouch(R.id.switchView) 
public boolean switchStatus(Switch switchView, MotionEvent event) { 
    if (event.getAction() == MotionEvent.ACTION_UP) { 
     // your code 
    } 
    return true; 
} 
2

È possibile personalizzato una vista che si estende Passa poi ignorare la sua onTouchEvent()

@Override 
public boolean onTouchEvent(MotionEvent ev) { 
    boolean handle = ev.getActionMasked() == MotionEvent.ACTION_MOVE; 
    return handle ? handle : super.onTouchEvent(ev); 
} 

dovrebbe funzionare.

0

// Questo codice funziona bene

public class MainActivity estende AppCompatActivity implementa CompoundButton.OnCheckedChangeListener { interruttore my_switch;

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 

    my_switch = (Switch) findViewById(R.id.my_switch); 
    my_switch.setOnCheckedChangeListener(this); 
} 
@Override 
public void onClick(View v) { 
    switch (v.getId()){ 
     case R.id.my_switch: 
      if(my_switch.isChecked()) 
       my_switch.setChecked(true);     
      else   
       my_switch.setChecked(true); 
      break; 
    } 
} 

}

Problemi correlati