2012-12-10 19 views
9

switch düğmem var (aslında özel bir tane) ve kaydırma işlevini herhangi bir nedenle devre dışı bırakmak istiyorum; Kullanıcının sadece tıklayabilmesini istiyorum. bunu arşivlemenin bir yolu var mı? Teşekkürler.Anahtar düğmesi - kaydırma işlevini devre dışı bırakma

+0

bu yardım etsin.com/questions/11753355/switch-arasında-doubletap-ve-swipe –

+0

swipes (FLING OLAYLAR denir) - bunu bilmiyordum ... Bunu bir dakika içinde deneyeceğim – Paul

cevap

23

Anahtarınıza Tıklatılabilir (yanlış) seçeneğini ayarlayabilir, ardından Anahtarın üst öğesinde bulunan onClick() olayını dinleyebilir ve program aracılığıyla geçiş yapabilirsiniz. Düğme etkin görünmeye devam edecek, ancak kaydırma animasyonu gerçekleşmeyecek.

...

[onCreate olarak()]

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

...

[

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); 
    }  
} 

...

[dinleyici tıklayın] 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

switchBtn Anahtarı nesne olduğunu

switchBtn.setClickable(false); 

+0

Çalışmıyor. Her şeyden önce, click olayında, clickBtn.setEnabled (false) düğmesinden sonra görünmez. İkinci olarak, engelli görünüm için farklı kaynaklara sahibiz. – Sinigami

14

daha iyi bir yolu önlemektir

switchBtn.setEnabled(false); 

anahtarı değil tıklanabilir oluşturmak için kullan yöntemi izlenerek Anahtarı kullanımını devre dışı bırakmak için Sınıfı MotionEvent.ACTION_MOVE olaylarından alma.

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

Sonra uygun olarak anahtara yapılan bir tıklama dinleyici ayarlayın serbesttir:

Bu

ile yapılabilir.

Sürüklemenin nasıl çalıştığını görmek için implementation of Switch'a bakın. Oldukça havalı!

+0

Çalışmıyor. Tıklama etkinliğinde görünmez. Hala kaydırmaya geçin. – Sinigami

+0

Set setableable (false) işlevini deneyin ve buna ek olarak setOnTouchListener öğesini uygulayın –

1

Benim çözüm:

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

Veya BUTTERKNIFE: Sen özel() onun onTouchEvent geçersiz sonra geçiş uzanan bir görünüm

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

Bu çalışması gerekir yapabilirsiniz

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

.

0

// Bu kod ince

public class MainActivity AppCompatActivity CompoundButton.OnCheckedChangeListener { Anahtarı my_switch uygular uzanır çalışır; -http: // stackoverflow

@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; 
    } 
} 

}

İlgili konular