2013-08-23 5 views
14

voglio usare un SeekBar in un cassetto di navigazioneSeekBar in un NavigationDrawer

Fondamentalmente ho bisogno di far scorrere a destra ea sinistra per impostare SeekBar e, beh, avete indovinato, scorre il cassetto navigazione ...

Quello che mi piacerebbe fare è far scorrere la barra di ricerca quando è focalizzata e il cursore di navigazione quando non lo è.

Come devo fare?

Ecco il mio codice quando si imposta una voce (non ho impostato il SeekBar ancora)

private View onCritereView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 

    View mView = inflater.inflate(R.layout.fragment_critere, container, false); 
    LinearLayout mLinearLayout = (LinearLayout) mView.findViewById(R.id.critere_linearlayout); 

    View mViewElement = inflater.inflate(R.layout.item_critere, null); 
    ((TextView)mViewElement.findViewById(R.id.critere_title)).setText("Prix Maximum"); 

    mLinearLayout.addView(mViewElement); 

    return mView; 
} 

Ecco la item_critere.xml con SeekBar:

<?xml version="1.0" encoding="utf-8"?> 
<TableLayout 
     xmlns:android="http://schemas.android.com/apk/res/android" 
     android:id="@+id/critere_item" 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content" 
     android:stretchColumns="*"> 

    <TableRow 
      android:layout_width="fill_parent" 
      android:layout_height="fill_parent"> 

     <TextView 
       android:layout_width="wrap_content" 
       android:layout_height="wrap_content" 
       android:textAppearance="?android:attr/textAppearanceMedium" 
       android:text="Large Text" 
       android:id="@+id/critere_title" 
       android:layout_gravity="left|center_vertical" 
       android:layout_column="0"/> 

     <SeekBar 
       android:layout_width="match_parent" 
       android:layout_height="wrap_content" 
       android:id="@+id/critere_qualifier" 
       android:layout_column="1" 
       android:layout_span="4"/> 
    </TableRow> 

    <TableRow 
      android:layout_width="fill_parent" 
      android:layout_height="fill_parent"> 

     <TextView 
       android:layout_width="wrap_content" 
       android:layout_height="wrap_content" 
       android:textAppearance="?android:attr/textAppearanceSmall" 
       android:text="Medium Text" 
       android:id="@+id/critere_value" 
       android:layout_span="4"/> 
    </TableRow> 

</TableLayout> 

Grazie in anticipo :)

risposta

28

Basta aggiungere un onTouchListener. Quando si tocca lo schermo sulla barra di ricerca (action_down), non si consente ai genitori di intercettare l'evento.

seekbar.setOnTouchListener(new ListView.OnTouchListener() 
{ 
    @Override 
    public boolean onTouch(View v, MotionEvent event) 
    { 
     int action = event.getAction(); 
     switch (action) 
     { 
     case MotionEvent.ACTION_DOWN: 
      // Disallow Drawer to intercept touch events. 
      v.getParent().requestDisallowInterceptTouchEvent(true); 
      break; 

     case MotionEvent.ACTION_UP: 
      // Allow Drawer to intercept touch events. 
      v.getParent().requestDisallowInterceptTouchEvent(false); 
      break; 
     } 

     // Handle seekbar touch events. 
     v.onTouchEvent(event); 
     return true; 
    } 
}); 
+0

Wow funziona così bene! Grazie :) – nsvir

+0

Questo è stato effettivamente copiato per l'utilizzo di ListViews all'interno di una ScrollView. Quindi è nuovo SeekBar.OnTouchListener invece di ListView.onTouchListener. È davvero un modo semplice e funziona per molti di questi problemi – dumazy

+0

Ok più difficile ora .. x) Ho aggiunto una scrollview tra il cassetto di navigazione e la barra di ricerca. Voglio solo disabilitare l'evento intercettazione del navigatore e non la scrollview x) È possibile? – nsvir