使用onConfigurationChanged进行SlidingDrawer旋转

时间:2012-05-03 13:41:22

标签: android rotation slidingdrawer

我发现了一个让我头疼的Android漏洞。

Manifest上的活动:

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

有人有任何解决方法吗?我正在尝试查看SlidingDrawer打开代码,以检查打开时为什么它没问题。但是没有运气。

我不愿意自行处理轮换,我现在不愿意选择加入......

2 个答案:

答案 0 :(得分:0)

我从未使用滑动抽屉,所以我只想在这里提出一个想法,也许它会贴在墙上。

如果在调用onConfiguration时,您获得scren的宽度并将滑动抽屉的layout_width设置为该值,该怎么办? 看起来就像你停在一半并旋转屏幕一样,宽度(旋转后)与旋转前的宽度相同。也许如果您明确设置宽度,它将正确扩展。

答案 1 :(得分:0)

好的,设法通过一些技巧修复它...触摸事件有时在旋转半开的抽屉之后无法进入视图......

首先我扩展了抽屉然后:在某些方法中添加了一些代码:

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