在我的Xamarin Android应用程序中,我需要为Checkbox控件提供一些自定义属性。我们有默认属性,如'Id','Text'等,
是否可以通过编程方式将自定义属性添加到复选框?
答案 0 :(得分:0)
在Xamarin.Android做这件事是一块蛋糕:
首先通过从复选框控件继承您的类来创建自定义复选框:
public class CustomCheckBox: CheckBox
{
Context mContext;
public CustomCheckBox(Context context) : base(context)
{
Init(context, null);
}
public CustomCheckBox(Context context, Android.Util.IAttributeSet attrs) : base(context, attrs)
{
Init(context, attrs);
}
public CustomCheckBox(Context context, Android.Util.IAttributeSet attrs, int defStyleAttr) : base(context, attrs, defStyleAttr)
{
Init(context, attrs);
}
public CustomCheckBox(Context context, Android.Util.IAttributeSet attrs, int defStyleAttr, int defStyleRes) : base(context, attrs, defStyleAttr, defStyleRes)
{
Init(context, attrs);
}
private void Init(Context ctx, Android.Util.IAttributeSet attrs)
{
mContext = ctx;
}
}
然后,您可以通过两种不同的方式向其添加自定义属性
首先,您可以创建一个界面并继承该界面(如果您需要在其他自定义控件中使用相同的属性,建议的界面可以帮助您),例如:
public class CustomCheckBox : CheckBox , IPropertyCollection
{ ...... }
IPropertyCollection就是这样的:
public interface IPropertyCollection
{
long FieldId { get; set; }
string FieldName { get; set; }
long PrimaryId { get; set; }
}
其次,您可以直接将属性添加到控件类中,并且在其中可以使用相同的属性
public class CustomCheckBox : CheckBox
{ ......
public string FieldName {get; set;}
}
希望它有所帮助,
古德勒克!
如有任何疑问,请退回
答案 1 :(得分:0)
在Android上,您可以自定义属性并在.axml
文件中自定义它们。
1)在您的values文件夹中添加attrs.xml
文件。
<?xml version="1.0" encoding="utf-8" ?>
<resources>
<declare-styleable name="custom">
<attr name="test" format="string" />
<attr name="number" format="integer" />
</declare-styleable>
</resources>
2)这是你的MyCheckBox
课程:
using Android.Content;
using Android.Content.Res;
using Android.Util;
using Android.Widget;
namespace App39
{
public class MyCheckBox : CheckBox
{
public string mText { get; set; }
public int mNumber { get; set; }
public MyCheckBox(Context context, IAttributeSet attrs) : base(context, attrs)
{
TypedArray ta = context.ObtainStyledAttributes(attrs, Resource.Styleable.custom);
string text = ta.GetString(Resource.Styleable.custom_test);
int number = ta.GetInteger(Resource.Styleable.custom_number, -1);
this.mText = text;
this.mNumber = number;
Log.Error("IAttributeSet", "text = " + text + " , number = " + number);
ta.Recycle();
}
}
}
2)在.axml
文件中对其进行自定义:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
xmlns:custom="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="match_parent">
<App39.MyCheckBox
android:id="@+id/checkbox"
android:layout_width="match_parent"
android:layout_height="match_parent"
custom:test="111111111"
custom:number="200">
</App39.MyCheckBox>
</RelativeLayout>
4)在MainActivity
:
public class MainActivity : AppCompatActivity
{
MyCheckBox myCheckBox;
protected override void OnCreate(Bundle savedInstanceState)
{
base.OnCreate(savedInstanceState);
// Set our view from the "main" layout resource
SetContentView(Resource.Layout.activity_main);
myCheckBox = FindViewById<MyCheckBox>(Resource.Id.checkbox);
//myCheckBox.mNumber;
//myCheckBox.mText;
}
}
Here,我为您提供了一个演示。