AbsoluteLayoutに正方形のレイアウトを強制するにはどうすればよいですか?

Maximus

次のコードがフォームアプリでOnMeasure()を実行しない理由を誰かが知っていますか?私は基本的に、AbsoluteLayoutが正方形として表示されるように同じ高さ/幅を持つように強制しようとしています。

public class AbsoluteSquareLayout : AbsoluteLayout
{
    protected override SizeRequest OnMeasure(double widthConstraint, double heightConstraint)
    {
        var size = Math.Min(widthConstraint, heightConstraint);
        return base.OnMeasure(size, size);
    }
}
シャラダグルラジ

OnMeasure呼び出しでサイズ制約をオーバーライドしても、最終サイズが保証されるわけではありませんLayout。親レイアウトからの最終パスがこの値をオーバーライドするためです。ここでのXFの記事は、これについて詳しく説明しています。

正方形のレイアウトを実現するには、親レイアウトを更新してこれらの制約を考慮し、レイアウトパスで渡されるようにする必要があります。

たとえばAbsoluteLayout、子のサイズ制約を動的に計算するように拡張できますこのカスタムレイアウトは、デフォルトですべての子を正方形として扱います。特定の子の動作をオーバーライドするために、添付プロパティをSquareLayout.IsSquareとして設定できますfalse

public class SquareLayout : AbsoluteLayout
{

    public static readonly BindableProperty IsSquareProperty = 
          BindableProperty.CreateAttached("IsSquare",
                                          typeof(bool),
                                          typeof(SquareLayout),
                                          defaultValue: true,
                                          defaultBindingMode: BindingMode.OneWay);

    public static bool GetIsSquare(BindableObject view)
    {
        return (bool)view.GetValue(IsSquareProperty);
    }

    public static void SetIsSquare(BindableObject view, bool value)
    {
        view.SetValue(IsSquareProperty, value);
    }

    Dictionary<View, Rectangle> _boundsCache = new Dictionary<View, Rectangle>();
    protected override void LayoutChildren(double x, double y, double width, double height)
    {
        foreach(var child in Children)
        {
            var isSquare = GetIsSquare(child);
            if(isSquare)
            {
                Rectangle bounds;
                if (!_boundsCache.ContainsKey(child))
                    _boundsCache[child] = bounds = GetLayoutBounds(child);
                else
                    bounds = _boundsCache[child];

                var absFlags = GetLayoutFlags(child);

                var widthIsProportional = (absFlags & AbsoluteLayoutFlags.WidthProportional) != 0;
                var heightIsProportional = (absFlags & AbsoluteLayoutFlags.HeightProportional) != 0;

                var childWidth = widthIsProportional ? bounds.Width * width : bounds.Width;
                var childHeight = heightIsProportional ? bounds.Height * height : bounds.Height;

                var size = Math.Min(childWidth, childHeight);

                SetLayoutBounds(
                    child,
                    new Rectangle(
                        bounds.X,
                        bounds.Y,
                        (widthIsProportional ? (size / width) : size),
                        (heightIsProportional ? (size / height) : size)
                     )
                );
            }
        }

        base.LayoutChildren(x, y, width, height);
    }
}

使用例:

<local:SquareLayout>
    <AbsoluteLayout BackgroundColor="Green" 
                    AbsoluteLayout.LayoutBounds=".1,.1,1,1" 
                    AbsoluteLayout.LayoutFlags="All" />

    <AbsoluteLayout BackgroundColor="Blue" 
                    AbsoluteLayout.LayoutBounds=".5,.5,.2,.1" 
                    AbsoluteLayout.LayoutFlags="All" />

    <AbsoluteLayout BackgroundColor="Red" 
                    AbsoluteLayout.LayoutBounds=".9,.9,200,200" 
                    AbsoluteLayout.LayoutFlags="PositionProportional" />

    <AbsoluteLayout BackgroundColor="Yellow" 
                    AbsoluteLayout.LayoutBounds="10,20,.3,.3" 
                    AbsoluteLayout.LayoutFlags="SizeProportional" />

    <AbsoluteLayout BackgroundColor="Silver" 
                    local:SquareLayout.IsSquare="false"
                    AbsoluteLayout.LayoutBounds=".9,.9,1,.1" 
                    AbsoluteLayout.LayoutFlags="All" />
</local:SquareLayout>

ここに画像の説明を入力してください ここに画像の説明を入力してください

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

Xamarinで子供に正方形の寸法を強制するにはどうすればよいですか?

分類Dev

正方形のフレームレイアウトを作成するにはどうすればよいですか?

分類Dev

CSSで正方形の正方形を取得するにはどうすればよいですか?

分類Dev

ポイントの周りに正方形を合わせるにはどうすればよいですか?

分類Dev

Pythonで整数の正方形のリストを作成するにはどうすればよいですか?

分類Dev

長方形の写真を正方形の写真に入れるにはどうすればよいですか?

分類Dev

正方形を互いに同じレベルにするにはどうすればよいですか?

分類Dev

この正方形が特定の値に達した後、この正方形の方向を逆にするにはどうすればよいですか?

分類Dev

この正方形のグリッドを中央に配置するにはどうすればよいですか?

分類Dev

CSSでテーブルの背景の正方形を削除するにはどうすればよいですか?

分類Dev

円形ではなく正方形のListItemアバターをレンダリングするにはどうすればよいですか?

分類Dev

カメを正方形の特定の領域に重ねるにはどうすればよいですか?

分類Dev

ncursesで正方形のシンボルを設計するにはどうすればよいですか?

分類Dev

Qt QMLで正方形のボタンを作成するにはどうすればよいですか?

分類Dev

Flutterで正方形の隆起したボタンを作成するにはどうすればよいですか?

分類Dev

アンドロイドで背景に正方形のボタンを作成するにはどうすればよいですか?

分類Dev

Android:レイアウトに単色の長方形を配置するにはどうすればよいですか?

分類Dev

この正方形を壁に跳ね返らせるにはどうすればよいですか?

分類Dev

特定のCSSグリッドアイテムに完全な正方形を作成するにはどうすればよいですか?

分類Dev

正方形の背景ではなく、textViewの背景として円をペイントするにはどうすればよいですか?

分類Dev

自動サイズ変更で正方形のボタンのリストを作成するにはどうすればよいですか?

分類Dev

色で正方形にするボタンを作成するにはどうすればよいですか?

分類Dev

ハイチャートで正方形と水平の線を作成するにはどうすればよいですか?

分類Dev

OpenCV2でしきい値を正方形に分割するにはどうすればよいですか?

分類Dev

フレーム上で正方形を移動するJava-フレームの端で停止するにはどうすればよいですか?

分類Dev

pygameで正方形と円を同時に表示するにはどうすればよいですか?

分類Dev

AndroidでimageViewを正方形ビューに設定するにはどうすればよいですか?

分類Dev

チャートの左下に表示されている正方形を非表示にするにはどうすればよいですか?

分類Dev

ペア名に基づいてシリーズの要素を正方形の対称DataFrameに入力するにはどうすればよいですか?

Related 関連記事

  1. 1

    Xamarinで子供に正方形の寸法を強制するにはどうすればよいですか?

  2. 2

    正方形のフレームレイアウトを作成するにはどうすればよいですか?

  3. 3

    CSSで正方形の正方形を取得するにはどうすればよいですか?

  4. 4

    ポイントの周りに正方形を合わせるにはどうすればよいですか?

  5. 5

    Pythonで整数の正方形のリストを作成するにはどうすればよいですか?

  6. 6

    長方形の写真を正方形の写真に入れるにはどうすればよいですか?

  7. 7

    正方形を互いに同じレベルにするにはどうすればよいですか?

  8. 8

    この正方形が特定の値に達した後、この正方形の方向を逆にするにはどうすればよいですか?

  9. 9

    この正方形のグリッドを中央に配置するにはどうすればよいですか?

  10. 10

    CSSでテーブルの背景の正方形を削除するにはどうすればよいですか?

  11. 11

    円形ではなく正方形のListItemアバターをレンダリングするにはどうすればよいですか?

  12. 12

    カメを正方形の特定の領域に重ねるにはどうすればよいですか?

  13. 13

    ncursesで正方形のシンボルを設計するにはどうすればよいですか?

  14. 14

    Qt QMLで正方形のボタンを作成するにはどうすればよいですか?

  15. 15

    Flutterで正方形の隆起したボタンを作成するにはどうすればよいですか?

  16. 16

    アンドロイドで背景に正方形のボタンを作成するにはどうすればよいですか?

  17. 17

    Android:レイアウトに単色の長方形を配置するにはどうすればよいですか?

  18. 18

    この正方形を壁に跳ね返らせるにはどうすればよいですか?

  19. 19

    特定のCSSグリッドアイテムに完全な正方形を作成するにはどうすればよいですか?

  20. 20

    正方形の背景ではなく、textViewの背景として円をペイントするにはどうすればよいですか?

  21. 21

    自動サイズ変更で正方形のボタンのリストを作成するにはどうすればよいですか?

  22. 22

    色で正方形にするボタンを作成するにはどうすればよいですか?

  23. 23

    ハイチャートで正方形と水平の線を作成するにはどうすればよいですか?

  24. 24

    OpenCV2でしきい値を正方形に分割するにはどうすればよいですか?

  25. 25

    フレーム上で正方形を移動するJava-フレームの端で停止するにはどうすればよいですか?

  26. 26

    pygameで正方形と円を同時に表示するにはどうすればよいですか?

  27. 27

    AndroidでimageViewを正方形ビューに設定するにはどうすればよいですか?

  28. 28

    チャートの左下に表示されている正方形を非表示にするにはどうすればよいですか?

  29. 29

    ペア名に基づいてシリーズの要素を正方形の対称DataFrameに入力するにはどうすればよいですか?

ホットタグ

アーカイブ