0
我想添加自定義按鈕的自定義對話框,這可能嗎?如果是這樣,我們該怎麼做?使用按鈕的網格創建自定義對話框
我想添加自定義按鈕的自定義對話框,這可能嗎?如果是這樣,我們該怎麼做?使用按鈕的網格創建自定義對話框
這當然是可能的。看看GridView
,您需要創建一個自定義的Adapter
來爲網格中的每個項目加載圖像和標題。
我會這樣想。
創建一個簡單的類來保存關於網格中每個項目的信息。我們稱之爲GridItem
。
public class GridItem
{
public string Title { get; set; }
public int ImageResourceId { get; set; }
public Action ClickAction { get; set; }
}
Title
是圖片的標題下,ImageResoruceId
是資源繪製對象ID在你的項目,即:Resource.Drawable.googleplus
和ClickAction
是Action
被點擊的項目什麼時候做。
現在爲網格中的項目創建佈局。 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>
現在定製Adapter
,GridAdapter
。
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);
這應該是它。
我無法完成它的工作,我對Xamarin相當陌生,所以也許我做錯了什麼。有沒有一種方法可以創建這樣的解決方案並提供它? –
無法正常工作對您的體驗描述非常糟糕。隨意編輯你的初始文章,你已經嘗試了什麼,出了什麼問題。我沒有時間免費創建整個解決方案。 – Cheesebaron
Cheesebaron,我完全理解,今天我會嘗試更多。然後我會看看我是否可以附上代碼或其他東西。我只是無法得到任何工作。 –