0

私は私に多くの頭痛を与えているAndroidのバグを見つけました。

マニフェストでの活動:

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

次に、引き出しのハンドルをつかみ、中央に移動して、デバイスを回転させている間、指を維持します。

引き出しの寸法はすべてねじ込まれます...完全に開くまで。

肖像画の引き出しが閉じています 引き出しの半分が縦向きに開いています サイズ変更されていない横向きに回転した後の引き出し(指を押したまま)

誰かがそれを修正する方法のアイデアを持っていますか?SlidingDrawerのオープニングコードを調べて、開いたときに問題がない理由を確認しようとしていますが、まだ運がありません。

自分でローテーションを処理しないことは、今すぐオプトインするオプションではありません...

4

2 に答える 2

0

スライド式の引き出しを使ったことがないので、ここにアイデアを投げかけるだけで、壁にくっつくかもしれません。

onConfigurationが呼び出されるたびに、画面の幅を取得し、スライドドロワーのlayout_widthをその値に設定するとどうなりますか?途中で停止して画面を回転させると、(回転後の)幅は回転前の幅と同じになります幅を明示的に設定すると、適切に拡張される可能性があります。

于 2012-05-03T14:41:28.633 に答える
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;
    }
}
于 2012-05-04T10:29:01.547 に答える