MonoDroid, как использовать пользовательские атрибуты внутри файла макета Axml? - PullRequest
2 голосов
/ 21 января 2012

Я пытаюсь преобразовать список просмотра DragnDrop отсюда https://github.com/commonsguy/cwac-touchlist в C # с Mono для Android.

Часть этого настраиваемого представления требует использования некоторых настраиваемых атрибутов, которые объявлены в файле Resources / values ​​/ attrs.xml следующим образом:

<?xml version="1.0" encoding="utf-8"?>
<resources>
<declare-styleable name="TouchListView">
    <attr name="normal_height" format="dimension" />
    <attr name="expanded_height" format="dimension" />
    <attr name="grabber" format="reference" />
    <attr name="dragndrop_background" format="color" />
    <attr name="remove_mode">
        <enum name="none" value="-1" />
        <enum name="fling" value="0" />
        <enum name="slide" value="1" />
        <enum name="slideRight" value="1" />
        <enum name="slideLeft" value="2" />
    </attr>
</declare-styleable>
</resources>

Затем я пытаюсь использовать их внутри моего файла макета следующим образом:

<app.monodroid.TouchListView xmlns:tlv="http://schemas.android.com/apk/res/app.monodroid"       
    android:id="@+id/lstExercises"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:layout_below="@+id/lExerciseActions"
    android:drawSelectorOnTop="false"
    tlv:normal_height="64dip"
    tlv:grabber="@+id/icon"
    tlv:remove_mode="slideRight"
    />

Но когда я пытаюсь построить свой проект, я получаю следующее сообщение об ошибке:

/ Библиотека / Каркасы / Mono.framework / Внешние / xbuild / Novell / Novell.MonoDroid.Common.targets: Ошибка: инструмент завершен с кодом: 1. Вывод: /Users/path_to_project/App.MonoDroid/obj/Debug/ res / layout / add_session.axml: 1: ошибка: не найден идентификатор ресурса для атрибута 'normal_height' в пакете 'com.app.monodroid' /Users/path_to_project/App.MonoDroid/obj/Debug/res/layout/add_session.axml:1: ошибка: не найден идентификатор ресурса для атрибута 'grabber' в пакете 'com.app.monodroid' /Users/path_to_project/App.MonoDroid/obj/Debug/res/layout/add_session.axml:1: ошибка: не найден идентификатор ресурса для атрибута «remove_mode» в пакете «com.app.monodroid» (App.MonoDroid)

Название моего проекта - App.MonoDroid.

Как я могу использовать эти атрибуты внутри моего файла макета?

Ответы [ 2 ]

3 голосов
/ 21 января 2012

Эти ошибки должны исчезнуть, если вы объявите имя пакета для своего приложения. В свойствах проекта перейдите на вкладку Манифест Android, и вы увидите текстовое поле для имени пакета:

Setting the package name

0 голосов
/ 27 сентября 2012

... и затем убедитесь, что вы используете это имя пакета для вашей сборки и пространства имен:

monodroid config

и используйте его в своем XML-файле:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout 
  xmlns:android="http://schemas.android.com/apk/res/android"
  xmlns:custom="http://schemas.android.com/apk/res/**app.monodroid**"            
  android:orientation="vertical"
  android:layout_width="fill_parent"
  android:layout_height="fill_parent">
  <**app.monodroid**.FICalendarView
    android:id="@+id/FICalendar"
    android:layout_width="fill_parent"    
    android:layout_height="fill_parent"
    custom:dayStyle="1">
  </**app.monodroid**.FICalendarView>
  <Button  
    android:id="@+id/MyButton"
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    android:text="@string/Hello"/>
</LinearLayout>

где FICaldendarView - это пользовательское представление, определенное как:

namespace app.monodroid
{
    public class FICalendarView : View
    {
        //private FICalenderView() {}

        public FICalendarView(Context context) 
            : base(context)
        {

        }

        public FICalendarView(Context context, Android.Util.IAttributeSet attribute) 
            : base(context, attribute)
        {
            Android.Content.Res.TypedArray a = context.Theme.ObtainStyledAttributes(attribute, Resource.Styleable.FICalendarView, 0, 0);

            //Android.Util.TypedValue typedValue = null;

            int dayStyle = a.GetInteger(Resource.Styleable.FICalendarView_dayStyle,0);

        }

        public FICalendarView(Context context, Android.Util.IAttributeSet attribute, int x)
            : base(context, attribute,x)
        {

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