如何在Xamarin Android中为Checkbox添加自定义属性?

时间:2018-05-22 14:25:35

标签: xamarin xamarin.android

在我的Xamarin Android应用程序中,我需要为Checkbox控件提供一些自定义属性。我们有默认属性,如'Id','Text'等,

是否可以通过编程方式将自定义属性添加到复选框?

2 个答案:

答案 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,我为您提供了一个演示。