-1

サイズ 24x24 で 0,0 に子を描画するテスト MvxFrameLayout 派生クラスを作成しました。

    public class MyCustomLayout : MvxFrameLayout
    {
        public MyCustomLayout(Context context, IAttributeSet attrs) : base(context, attrs)
        {
        }

        public MyCustomLayout(Context context, IAttributeSet attrs, IMvxAdapterWithChangedEvent adapter) : base(context, attrs)
        {
        }

        protected override void OnLayout(bool changed, int left, int top, int right, int bottom)
        {
            if (!changed)
            {
                return;
            }
            for (int i = 0; i < this.ChildCount; ++i)
            {
                var child = this.GetChildAt(i);
                child.Layout(0, 0, 24, 24);
            }
        }
    }

次のようなアクティビティ レイアウト (FirstView.axml) で使用されます。

<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:local="http://schemas.android.com/apk/res-auto"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent">
    <hotspotappandroid.droid.views.MyCustomLayout
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        local:MvxBind="ItemsSource Hotspots"
        local:MvxItemTemplate="@layout/hotspot" />
</FrameLayout>

1 つの項目を持つビュー モデル:

public class FirstViewModel : MvxViewModel
{
    public string[] Hotspots { get; private set; }

    public FirstViewModel()
    {
        this.Hotspots = new string[] { "A" };
    }
}

hotspot.xml は、24x24 の画像 (circle.png) を持つ ImageView です。

<?xml version="1.0" encoding="utf-8"?>
<ImageView xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:local="http://schemas.android.com/apk/res-auto"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:src="@drawable/circle" />

問題は、円の画像が描画されていないことです。

hotspot.xml で と を変更するandroid:layout_width="fill_parent"と、画像は描画されますが、正しくは表示されません。画像は半分に描いています。画像がそのサイズの 2 倍にスケーリングされて描画され、半分にトリミングされているように見えます (おそらく「child.Layout(0, 0, 24, 24)」が原因です)。android:layout_height="fill_parentwrap_content

何が起こっているのかわかりません。childinが「ImageView」ではなくOnLayoutタイプであることがわかりますcirrious.mvvmcross.binding.droid.views.MvxListItemView。これは、私が期待していたからです。多分それは何か関係がありますか?

4

1 に答える 1

0

は、子ごとに子をMvxFrameLayout膨らませることで機能します。MvxListItemView自体はMvxListItemViewから継承しFrameLayout、デフォルトのレイアウト パラメータを持っています。

ドキュメントによると - http://developer.android.com/reference/android/widget/FrameLayout.html - これは、各子 FrameLayout のサイズを変更する必要があることを意味します。

FrameLayout のサイズは、その最大の子 (およびパディング) のサイズであり、表示されるかどうか (FrameLayout の親が許可する場合) です。

ここで内側の孫を指定fill_parentしているのでImageView、それが原因で内側のビューのサイズがゼロになっていると思います。

ImageView子フレームにある程度のサイズを与えるには、要求するのではなく、内側の子 XML で直接サイズを与える方がよい場合があります。fill_parent


ImageViewを直接返し、それを子として使用したい場合は、中間体なしMvxListItemViewで、最新の MvvmCross ソースで次のことができると思います。

于 2013-11-13T14:10:33.430 に答える