gpt4 book ai didi

android - Xamarin Android 使用自定义皮肤和点击事件从数据库构建自定义动态按钮

转载 作者:行者123 更新时间:2023-11-30 01:39:01 25 4
gpt4 key购买 nike

我正在构建一个 Xamarin Android 应用程序,我有一个部分需要构建自定义动态按钮。下面的方法将动态构建这些按钮,但我需要在我的@drawable 文件夹中调用一个 xml 文件来获取按钮的背景和样式,我不确定如何实现这一点。我还需要为每个按钮创建点击事件,但我不确定该怎么做。下面是我的动态按钮代码。

    protected async override void OnResume()
{
base.OnResume();
Vm.ShowCurrentUser();
buttonCollection = await Vm.ShowButtons();
foreach (UserButtonLabel label in buttonCollection)
{
Button custButton = new Button(this);
custButton.Id = label.iAvailableTimeStatusID;


custButton.Text = label.nStatus;

LinearLayout.LayoutParams lp = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.FillParent, LinearLayout.LayoutParams.WrapContent);
ButtonLayout.AddView(custButton, lp);

}
}

现在我需要点击委托(delegate),但我还需要弄清楚如何调用按钮的可绘制样式。下面是我将如何在 xml 中构建按钮。

            <Button
android:id="@+id/childButton"
android:layout_height="wrap_content"
android:background="@drawable/GreenButton"
android:text="Place Holder text"
style="@style/button_text"
android:layout_marginLeft="10dp"
android:layout_marginRight="10dp" />

也许有一种方法可以从不同的 xml 调用按钮?

最佳答案

所以我基本上发现从逻辑和 UI 的角度来看最简单的方法是创建一个只有按钮的 ListView 。这样,UI 将构建具有垂直滚动的按钮。我使用了一个 xml 模板、一个适配器和适配器的逻辑。其中很大一部分是在每个按钮的适配器中都有一个点击事件。

AXML 自定义按钮.axml:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:minWidth="25px"
android:minHeight="25px"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@+id/relativeLayout1"
android:padding="4dp">
<Button
android:id="@+id/childButton"
android:layout_height="wrap_content"
android:background="@drawable/GreenButton"
android:text="Clock In"
style="@style/button_text" />
</RelativeLayout>

带有名为 UserButtonLabel 的自定义对象的适配器自定义按钮适配器:

    public class CustomButtonAdapter : BaseAdapter<UserButtonLabel>
{
Activity context;
ObservableCollection<UserButtonLabel> list;
public CustomButtonAdapter(Activity _context, ObservableCollection<UserButtonLabel> _list) : base()
{
this.context = _context;
this.list = _list;
}

public override UserButtonLabel this[int index]
{
get
{
return list[index];
}
}

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

public override long GetItemId(int position)
{
return position;
}
public override Android.Views.View GetView(int position, Android.Views.View convertView, ViewGroup parent)
{
Android.Views.View view = convertView;

if (view == null)
{
view = context.LayoutInflater.Inflate(Resource.Layout.CustomButton, null);
}

UserButtonLabel label = this[position];

Button button1 = view.FindViewById<Button>(Resource.Id.childButton);
button1.Tag = label.nStatus;
button1.Text = label.nStatus;
button1.SetOnClickListener(new ButtonClickListener(this.context));

return view;
}

private class ButtonClickListener : Java.Lang.Object, Android.Views.View.IOnClickListener
{
private Activity activity;

public ButtonClickListener(Activity activity)
{
this.activity = activity;
}

public async void OnClick(Android.Views.View v)
{
string name = (string)v.Tag;
string text = string.Format("{0} Button Click.", name);
Toast.MakeText(this.activity, text, ToastLength.Short).Show();
await Vm.ClockCommand();
}
}

private static UserViewModel Vm
{
get
{
return App.Locator.UserTimeTracker;
}
}
}

自定义按钮标签对象

    public class UserButtonLabel : INotifyPropertyChanged
{
private int _iAvailableTimeStatusID;
public int iAvailableTimeStatusID
{
get
{
return _iAvailableTimeStatusID;
}
set
{
_iAvailableTimeStatusID = value;
}
}

private string _nStatus;
public string nStatus
{
get
{
return _nStatus;
}

set
{
_nStatus = value;
}
}

}

调用实例化的Activity代码

    protected async override void OnResume()
{
base.OnResume();
buttonCollection = await Vm.ShowButtons();
if (buttonCollection.Count > 0)
{
listAdapter = new CustomButtonAdapter(this, buttonCollection);
ButtonListview.Adapter = listAdapter;
}

}

listview 上不需要 onitemclicklistener,因为每个按钮都有一个点击事件。

关于android - Xamarin Android 使用自定义皮肤和点击事件从数据库构建自定义动态按钮,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34753700/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com