0

アプリにスライド可能なメニューを実装する必要があります。ユーザーは、タップして左右に移動することで、表示/非表示を切り替えることができる必要があります。

これを実装するために、 FrameLayout を拡張するカスタム SlidableFrameLayout を作成ましonTouchEventメソッドをオーバーライドすることで、スライドの位置を計算して呼び出します

private void setLeftLayout(int left) {
    layout(left, getTop(), getRight(), getBottom());
}

SlideableFrameLayoutの位置を変更します。すべて正常に動作しますが、(EditText にフォーカスした後) キーボードで表示すると、SlideableFrameLayout左の値を 0 に変更するため、メニューが閉じられている場合は開かれます。キーボードを非表示にすると同じことが起こります (通常、レイアウト メソッドの呼び出しを妨げるすべてのアクションに表示されます)。

私はそれを修正する方法を発明することはできません。私たちを手伝ってくれますか?追加情報が必要な場合は、添付します。ありがとう

4

2 に答える 2

0

その結果、ロジックを次のように変更しました。

private void setLeftLayout(int left) {
    FrameLayout.LayoutParams params = getFrameLayoutParams();
    params.leftMargin = left;
    params.rightMargin = -left;
    requestLayout();
}

私の場合、view は FrameLayout の親であるため、メソッドの 1 行目には条件を追加していません。この方法はかなりうまくいきます。

于 2013-09-30T13:59:27.177 に答える