web-dev-qa-db-ja.com

前面に移動するビューが機能しない

アニメーション中に一部のビューのZオーダーを変更したい

4.1.2以上のAndroidでは問題なく動作し、4.1.2以下のAndroidではZオーダーが変更されないため、上面図が上に残ります。

これは私がしようとしていることです。

myView.bringToFront();
((View)myView.getParent()).invalidate();

古いデバイスで動作させるにはどうすればよいですか?

22
Lena Bru
   /**
     * Change the view's z order in the tree, so it's on top of other sibling
     * views. This ordering change may affect layout, if the parent container
     * uses an order-dependent layout scheme (e.g., LinearLayout). Prior
     * to {@link Android.os.Build.VERSION_CODES#KitKat} this
     * method should be followed by calls to {@link #requestLayout()} and
     * {@link View#invalidate()} on the view's parent to force the parent to redraw
     * with the new child ordering.
     *
     * @see ViewGroup#bringChildToFront(View)
     */
    public void bringToFront() {
        if (mParent != null) {
            mParent.bringChildToFront(this);
        }
    }

これによると、私は単に行を逃していた

((View)myView.getParent()).requestLayout();

そしてそれはうまくいった!

23
Lena Bru

私はそれをすべて試しました。 RelativeLayoutはボタンの上にあるはずでしたが、ただ従いたくありませんでした。

最後に、RelativeLayoutにAndroid:elevation="2dp"を追加して解決しました。

標高値は、APIレベル21以上でのみ使用されます。私の場合、APIレベル21以下はすべて問題なく、それ以上は問題ありませんでした。

これが誰かを助けるかもしれないことを願っています:)

13
Colibri

これが誰かに役立つことを願っています。上記の解決策はどれも私にとってうまくいきませんでした。どうして?葉っぱになりたかった私のビューは他のビューより標高が小さかったからです。したがって、標高の高いビューは常に、正面にありました。

6
Adrian Buciuman

親ビューがrelativelayoutの場合、機能する場合と機能しない場合があります。 bringToFrontrequestLayoutremoveView; addViewを試しましたが、うまくいきませんでした。私の解決策は、すべてをフレームレイアウトの中に置くことでした。上に必要なのは、可視性を非表示にしてフレームレイアウトのボタンを移動し、コードで可視化したことです。

1
kjoelbro

Apiの21以上の場合translateZと呼ばれるxml属性があり、ビューの標高レベルを定義できます。

あなたもそれをほとんど使うことができます。

Android:translateZ = "30dp"

* API> = 21

1
BOTJr.