2

MvxBaseAndroidTargetBindingを使用して、パス画像をボタンにバインドする方法は?

1) バインディングを作成します

public class MvxButtonIconBinding: MvxBaseAndroidTargetBinding
{
    private readonly View _view;

public MvxButtonIconBinding(View view)
{
    _view = view;
}

public override void SetValue(object value)
{
    string path = System.Environment.GetFolderPath(System.Environment.SpecialFolder.Personal);
    path = Path.Combine(path, "pictures");
    path = Path.Combine(path, (string)value);
    if (File.Exists(path))
    {
        var dr = Drawable.CreateFromPath(path);
        Button b = _view as Button;
        var drawables = b.GetCompoundDrawables();
        foreach (var d in drawables)
            if (d!=null)
                d.Dispose(); // To avoid "out of memory" messages
        b.SetCompoundDrawablesWithIntrinsicBounds(null, dr, null, null);
    }
    else
    {
        Console.WriteLine("File {0} does not exists", path);
    } 
}

public override MvxBindingMode DefaultMode
{
    get { return MvxBindingMode.OneWay; }
}

public override Type TargetType
{
    get { return typeof(string); }
}

protected override void Dispose(bool isDisposing)
{
    if (isDisposing)
    {
    }
    base.Dispose(isDisposing);
}

}

2) バインディングをセットアップします。

registry.RegisterFactory(new MvxCustomBindingFactory<View>("ButtonIcon", view => new MvxButtonIconBinding(view)));

3) button_list.аxml を作成する

<Button
android:id="@+id/ButtonArticle"
android:layout_width="fill_parent"
android:layout_height="160dp"
android:gravity="bottom|center"
android:paddingBottom="5dp"
android:paddingTop="5dp"
local:MvxBind="{'Click':{'Path':'Command1'},'ButtonIcon':{'Path':'Item.PictureFileName'}}"
android:textSize="14dip"
android:textColor="@drawable/ToggleButtonSelector" />

プロパティ PictureFileName を送信するパスはどれですか? 例を示してください。


から撮影

4

1 に答える 1

0

コードから、画像は次の場所にあるはずです。

string path = System.Environment.GetFolderPath(System.Environment.SpecialFolder.Personal);
path = Path.Combine(path, "pictures");
path = Path.Combine(path, (string)value);

したがって、入力値Item.PictureFileNameが「icon1.png」の場合、画像を次の場所に保存する必要があります。

/data/data/YOUR_APP_NAME/files/pictures/icon1.png

MonoDroid内のSQLiteのデータベースファイルの場所System.Environment.SpecialFolder.Personalの情報に従ってこれを解決しました


SetButtonBackground固定のアイコン セットを使用している (画像をダウンロードしたり、動的に作成したりしない) 場合は、会議のサンプルに示されているような resourceId アプローチを使用することをお勧めします。

于 2012-10-22T13:18:34.603 に答える