2013-08-23 13 views
14

ich eine seekbar in einer NavigationsleisteSeekBar in einem NavigationDrawer

Grundsätzlich muss ich schieben links und rechts verwenden, um die seekbar zu setzen und, na ja, Sie ahnen es, schiebt sie die Navigationsleiste ...

Was ich tun möchte, ist die Suchleiste zu schieben, wenn es fokussiert ist und die Navigationsleiste, wenn es nicht ist.

Wie soll ich das tun?

Hier ist mein Code, wenn ein Element Einstellung (ich habe die seekbar noch nicht festgelegt)

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

Hier ist die item_critere.xml mit dem 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> 

Vielen Dank im Voraus :)

Antwort

28

Fügen Sie einfach eine onTouchListener hinzu. Wenn Sie den Bildschirm auf der Suchleiste (action_down) berühren, dürfen die Eltern das Ereignis nicht abfangen.

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, es funktioniert so gut! Danke :) – nsvir

+0

Dies wurde tatsächlich für die Verwendung von ListViews in einer ScrollView kopiert. Es ist also ein neuer SeekBar.OnTouchListener anstelle von ListView.onTouchListener. Es ist ein wirklich einfacher Weg und es funktioniert für viele dieser Arten von Problemen – dumazy

+0

Ok härter jetzt .. x) Ich fügte ein scrollview zwischen der Navigationsschublade und der Suchleiste hinzu. Ich möchte nur das InterceptTouch-Ereignis der Navigationsleiste und nicht die Scrollview deaktivieren. X) Ist das möglich? – nsvir