Как добавить пользовательские свойства для Checkbox в Xamarin Android? - PullRequest
0 голосов
/ 22 мая 2018

В моем приложении Xamarin для Android мне нужны некоторые пользовательские свойства для элемента управления Checkbox.У нас есть свойства по умолчанию, такие как «Id», «Текст» и т. Д.,

Можно ли программно добавить пользовательские свойства в флажок?

Ответы [ 2 ]

0 голосов
/ 23 мая 2018

В Android вы можете настраивать свойства и настраивать их в файле .axml.

1) добавить файл 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;
    }
}

Здесь , я предоставлю вам демо.

0 голосов
/ 22 мая 2018

Хорошо делает это в 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;}
     }
    

Надеюсь, это поможет,

Goodluck!

Возврат в случае любых запросов

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...