Xamarin.Android раздувать пользовательский вид - PullRequest
0 голосов
/ 12 апреля 2019

Еще один день с Xamarin.

Что ж, позвольте мне разобраться в этом из первых рук: Я новичок в разработке для Android, а также в Xamarin

Итак,Я пытаюсь создать пользовательский View в своем проекте и пытаюсь установить (или inflate) его вид из макета.Я создал макет и пытаюсь надуть его из View.

CustomLayout.axml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="#fff">
   <EditText android:layout_height="120dp"
   android:layout_width="120dp"/>
</LinearLayout>

Customlayout.cs

public class Customlayout : LinearLayout
{
    public Customlayout(Context context) : base(context)
    {
        Inin();
    }
    public Customlayout(Context context, IAttributeSet attrs) : base(context, attrs)
    {
        Inin();
    }

    public Customlayout(Context context, IAttributeSet attrs, int defStyleAttr) : base(context, attrs, defStyleAttr)
    {
        Inin();
    }
    private void Inin()
    {
        LayoutInflater inflater = (LayoutInflater)Context.GetSystemService(Context.LayoutInflaterService);
        View view = inflater.Inflate(Resource.Layout.CustomLayout, this, true);
        this.AddView(view);
    }
}

Код не влияет на представление.Когда я ссылаюсь на него в любом другом макете, он остается пустым.Я знаю, что мой код неверен, я только что попробовал этот код после прохождения множества вопросов, связанных с Java и Android.Я даже не уверен, стоит ли идти этим путем.

Есть какие-нибудь идеи о том, как я могу раздуть представление?

Ответы [ 2 ]

2 голосов
/ 15 апреля 2019

у меня так работает:

в Customlayout.cs изменить Init() как это:

private void Init()
  {  
   LayoutInflater inflater = (LayoutInflater)Context.GetSystemService(Context.LayoutInflaterService);
   View view = inflater.Inflate(Resource.Layout.customlayout, null, true);
   this.AddView(view);
  }

тогда в вашей активности layout.axml :

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout 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"
   android:layout_width="match_parent"
   android:layout_height="match_parent">

   <namespace.CustomLayout
      android:layout_width="match_parent"
      android:layout_height="wrap_content"
   />
</LinearLayout>
0 голосов
/ 12 апреля 2019

Попробуйте это

<?xml version="1.0" encoding="utf-8"?>
    <Customlayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:background="#fff"
        android:orientation="vertical">

        <EditText
            android:layout_width="120dp"
            android:layout_height="120dp" />
    </Customlayout>

Вы должны дать правильное имя пакета. Это будет выглядеть примерно так your_packageName.Customlayout

public class Customlayout : LinearLayout
{
    public Customlayout(Context context) : base(context)
    {
        Inin();
    }
    public Customlayout(Context context, IAttributeSet attrs) : base(context, attrs)
    {
        Inin();
    }

    public Customlayout(Context context, IAttributeSet attrs, int defStyleAttr) : base(context, attrs, defStyleAttr)
    {
        Inin();
    }
    private void Inin()
    {

    }
}

Загрузка CustomLayout.axml в ваш Fragmentили Activity как обычно.

...