0

カスタム ボタンを含むカスタム ダイアログを追加しようとしていますが、これは可能ですか? もしそうなら、どうすればそれができますか?

ここに画像の説明を入力

4

1 に答える 1

2

それは確かに可能です。グリッド内の各アイテムの画像とタイトルをロードGridViewするカスタムを作成する必要があることを確認してください。Adapter

私はこれについてこのようなことをします。

グリッド内の各アイテムに関する情報を保持する単純なクラスを作成します。と呼びましょうGridItem

public class GridItem
{
    public string Title { get; set; }
    public int ImageResourceId { get; set; }
    public Action ClickAction { get; set; }
}

Titleは画像の下のタイトル、ImageResoruceIdはプロジェクト内の Resource Drawable ID です。つまりResource.Drawable.googleplusClickActionActionアイテムがクリックされたときに実行することです。

ここで、グリッド内のアイテムのレイアウトを作成します。grid_item.axml.

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content">
    <TextView
        android:id="@+id/grid_item_title"
        android:layout_height="wrap_content"
        android:layout_width="fill_parent"
        android:layout_marginTop="2dp"
        android:layout_marginBottom="2dp"
        android:layout_alignParentBottom="true"
        android:gravity="center_horizontal"
        android:layout_centerHorizontal="true" />
    <ImageView
        android:id="@+id/grid_item_image"
        android:layout_above="@+id/grid_item_title"
        android:layout_height="fill_parent"
        android:layout_width="fill_parent" />
</RelativeLayout>

今カスタムAdapterGridAdapter

public class GridAdapter : BaseAdapter<GridItem>
{
    private readonly IList<GridItem> _items;
    private readonly Context _context;

    public GridAdapter(Context context, IList<GridItem> items)
    {
        _context = context;
        _items = items;
    }

    public override long GetItemId(int position)
    {
        return position;
    }

    public override View GetView(int position, View convertView, ViewGroup parent)
    {
        var item = _items[position];
        var view = convertView;
        if (view == null)
        {
            var inflater = LayoutInflater.FromContext(_context);
            view = inflater.Inflate(Resource.Layout.grid_item, parent, false);
            view.Clickable = true;
            view.Click += (s, a) => item.ClickAction.Invoke();
        }

        var image = view.FindViewById<ImageView>(Resource.Id.grid_item_image);
        var title = view.FindViewById<TextView>(Resource.Id.grid_item_title);

        title.Text = item.Title;
        image.SetImageResource(item.ImageResourceId);

        return view;
    }

    public override int Count
    {
        get { return _items.Count; }
    }

    public override GridItem this[int position]
    {
        get { return _items[position]; }
    }
}

そして、GridViewそれ自体のレイアウト、CustomGridViewDialog.axml.

<GridView
  android:id="@+id/gridview"
  android:layout_width="fill_parent"
  android:layout_height="fill_parent"
  android:numColumns="2"
  android:verticalSpacing="10dp"
  android:horizontalSpacing="10dp"
  android:stretchMode="columnWidth"
  android:gravity="center"/>

次に、作成すると、次のDialogようなコードになります。

var customView = LayoutInflater.Inflate (Resource.Layout.CustomGridViewDialog, null);
var items = new List<GridItem>
{
    new GridItem
    {
        Title = "Google",
        ItemResourceId = Resource.Drawable.google,
        ClickAction = () => { Google(); }
    },
    ...
};
(customView.FindViewById<GridView>(Resource.Id.gridview)).Adapter = new GridAdapter(this, items);

var builder = new AlertDialog.Builder(this);
builder.SetTitle("Share");
builder.SetView(customView);

そして、それはそれであるべきです。

于 2013-07-23T22:04:35.737 に答える