2012-05-03 2 views
0

Я нашел ошибку Android, которая дает мне много головных болей.SlidingDrawer rotation using onConfigurationChanged

активность на манифеста:

<activity 
     android:name=".ActivityTest" 
     android:configChanges="orientation" 
     android:label="@string/app_name" /> 

Планировка:

<TextView 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    android:text="TEST" /> 

<SlidingDrawer 
    android:id="@+id/drawer" 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    android:content="@+id/content" 
    android:handle="@+id/handle" 
    android:orientation="vertical" > 

    <ImageView 
     android:id="@id/handle" 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content" 
     android:src="@drawable/ic_launcher" /> 

    <LinearLayout 
     android:id="@id/content" 
     android:layout_width="fill_parent" 
     android:layout_height="fill_parent" 
     android:orientation="vertical" > 

     <Button 
      android:layout_width="fill_parent" 
      android:layout_height="fill_parent" 
      android:text="Big Big Button" /> 
    </LinearLayout> 
</SlidingDrawer> 

Теперь .. возьмите ручку ящика, и переместить его в середину и сохранить палец при вращении устройства ...

Размеры выдвижных ящиков полностью завинчиваются ... до тех пор, пока он не будет полностью открыт.

Drawer in portrait closed Drawer half opened in portrait Drawer after rotation to landscape not resized (with finger still pressing)

Кто-то имеет какие-либо Ideia о том, как это исправить? Я пытаюсь посмотреть открывающий код SlidingDrawer, чтобы проверить, почему он открывается, когда он открыт ... но пока не повезло.

Не обработки ротацию на моей не вариант, что я готов отказаться в прямо сейчас ...

ответ

0

Хорошо, удалось зафиксировать его с некоторыми трюками ... сенсорные события иногда не получают мнения после поворота с полкой приоткрыл ...

Сначала я расширил Drawer, а затем: добавлены некоторый код для некоторых методов:

@Override 
protected void onLayout(boolean changed, int l, int t, int r, int b) 
{ 
    if (mTracking && !rotationStopTracking) 
    { 
     return; 
    } 
    else if (rotationStopTracking) 
    { 
     rotationStopTracking = false; 
     if (isMoving()) 
     { 
      animateOpen(); 
      close(); 
     }else{ 
      animateOpen(); 
     } 
    } 

    ... 

    } 


//Called from Activity onConfigurationChanged 
public void enableRotationResize() 
{ 
    if (mTracking) 
    { 
     mTracking = false; 
     rotationStopTracking = true; 
    } 
} 
0

Я никогда не работал с раздвижными ящики, так что я просто хочу, чтобы бросаться Идея здесь и, возможно, она прилипает к стене.

Что делать, если вы вызываете функцию OnConfiguration, вы получаете ширину scren и устанавливаете layout_width скользящего выдвижного ящика на это значение? Это выглядит так: нравится, когда вы останавливаете половину пути и поворачиваете экран, чтобы ширина (после вращения) была такой же, как ширина перед вращением. Возможно, если вы явно установите ширину, она будет правильно расширяться.

+0

Был там, сделал это. – neteinstein