Нестандартные атрибуты пользовательского вида Android не работают после переключения на градус

Поэтому я недавно перешел на градир, теперь мои пользовательские атрибуты вида возвращают null

Мой проект выглядит так

–custom_icon_view // библиотека, в которой хранится пользовательское представление с настраиваемыми атрибутами –my application // это основное приложение, которое фактически использует пользовательский вид

В моем макете у меня есть пространство имен, определенное следующим образом:

xmlns:iconview="http://schemas.android.com/lib/be.webelite.iconview" 

Потому что использование apk / res-auto повторяет ошибку, говоря, что attibutes не может быть идентифицирован

Вот как я пытаюсь получить имя значка, определенное в xml, это использовалось для работы отлично, но теперь это не так. И все, что я изменил, переходило на град.

  final TypedArray a = context.obtainStyledAttributes(attrs,be.webelite.iconview.R.styleable.icon); icon_name = a.getString(be.webelite.iconview.R.styleable.icon_name); 

Поэтому я предполагаю, что мои файлы gradle.build вызывают проблему?

У меня установлена ​​библиотека

  apply plugin: 'android-library' 

Завершите основное приложение gradle.build as

  apply plugin: 'android' 

Это давало мне головную боль в течение 2 дней 🙁 любая помощь / подсказки очень apperciated.

Вот мои файлы градиента

http://pastie.org/private/h57o8nanydosq0dtm6eiq

И вот структура папок

http://pastie.org/private/nvbzomx2zeagdpzt8qqjsq

Так я объявляю свое мнение в xml

 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" <!-- tried res-auto didn't work --> xmlns:iconview="http://schemas.android.com/apk/lib/be.webelite.iconview" android:orientation="vertical" android:layout_width="match_parent" android:layout_height="match_parent" android:background="@color/background_gray"> <be.webelite.iconview.IconView android:layout_width="wrap_content" android:layout_height="wrap_content" iconview:icon_name="entypo_search" android:textSize="25dp"/> 

Attrs.xml в каталоге IconView> res> values

  <?xml version="1.0" encoding="utf-8"?> <resources> <declare-styleable name="icon"> <attr name="name" format="string" /> </declare-styleable> </resources> 

Solutions Collecting From Web of "Нестандартные атрибуты пользовательского вида Android не работают после переключения на градус"

Не могу понять, что не так в вашем проекте. Вот как я использую пользовательский вид & attrs в моем:

В моем проекте библиотеки:

Attrs.xml:

 <declare-styleable name="CustomFontSize"> <attr name="typeFace" format="string" /> </declare-styleable> 

В моем пользовательском классе:

  TypedArray a = context.obtainStyledAttributes(attrs, R.styleable.CustomFontSize); if (a == null) { return; } CharSequence s = a.getString(R.styleable.CustomFontSize_typeFace); if (s != null) { // do something } 

В моем основном проекте здесь приведен пример одного из моих макетов:

 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:custom="http://schemas.android.com/apk/res-auto" android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="vertical" android:paddingLeft="@dimen/border_margin_pulltorefresh" android:paddingRight="@dimen/border_margin_pulltorefresh" android:paddingBottom="@dimen/divider_height"> <com.custom.view.TextViewFont style="@style/DateStyle" android:id="@+id/news_date" android:shadowColor="@color/white" android:layout_gravity="center_vertical" android:gravity="center_vertical" custom:typeFace="@string/font_roboto_condensed_bold"/> </LinearLayout> 

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

Редактировать :

В моем build.gradle моего «основного проекта»,

 dependencies { compile project(":MyLibraryProject") } 

И вот build.gradle моей библиотеки:

 buildscript { repositories { mavenCentral() } dependencies { classpath 'com.android.tools.build:gradle:0.7.+' } } apply plugin: 'android-library' repositories { mavenCentral() } dependencies { compile fileTree(dir: 'libs', include: '*.jar') compile 'com.android.support:support-v4:19.0.0' compile 'com.actionbarsherlock:actionbarsherlock:4.4.0@aar' compile project(':WebediaCore:dependencies:DataDroid') compile project(':WebediaCore:dependencies:ViewPagerIndicator') compile project(':WebediaCore:dependencies:ActionBar-PullToRefresh') compile project(':WebediaCore:dependencies:Android-Universal-Image-Loader') } android { compileSdkVersion 19 buildToolsVersion '19' defaultConfig { minSdkVersion 8 targetSdkVersion 19 } } 

EDIT1:

Попробуйте использовать это пространство имен:

 xmlns:custom="http://schemas.android.com/apk/res-auto" 

И заменить:

  iconview:icon_name="entypo_search" 

от :

  custom:name="entypo_search" 

Если вы захватываете атрибуты в методе инициализации настраиваемого вида с жесткими ссылками на это конкретное пространство имен, то изменение на res-auto приведет к его повреждению. Вместо этого вам нужно будет изменить эти ссылки и на res-auto. Или предпочтительный метод – просто захватить типизированный интерфейс. Например, в моем проекте это:

 textStyle = attrs.getAttributeIntValue("http://schemas.android.com/apk/res/com.bodybuilding.mobile", "textStyle", 10); shadowInner = attrs.getAttributeBooleanValue("http://schemas.android.com/apk/res/com.bodybuilding.mobile", "shadowInner", true); shadowOuter = attrs.getAttributeBooleanValue("http://schemas.android.com/apk/res/com.bodybuilding.mobile", "shadowOuter", false); allowResize = attrs.getAttributeBooleanValue("http://schemas.android.com/apk/res/com.bodybuilding.mobile", "allowResize", true); 

Стало либо это:

 textStyle = attrs.getAttributeIntValue("http://schemas.android.com/apk/res-auto", "textStyle", 10); shadowInner = attrs.getAttributeBooleanValue("http://schemas.android.com/apk/res-auto", "shadowInner", true); shadowOuter = attrs.getAttributeBooleanValue("http://schemas.android.com/apk/res-auto", "shadowOuter", false); allowResize = attrs.getAttributeBooleanValue("http://schemas.android.com/apk/res-auto", "allowResize", true); 

Но предпочтительно это:

 TypedArray a = getContext().obtainStyledAttributes(attrs, R.styleable.BBcomButton); textStyle = a.getInt(R.styleable.BBcomButton_textStyle, 10); shadowInner = a.getBoolean(R.styleable.BBcomButton_shadowInner, true); shadowOuter = a.getBoolean(R.styleable.BBcomButton_shadowOuter, false); shadowInnerColor = a.getColor(R.styleable.BBcomButton_shadowInnerColor, 0xff000000); shadowOuterColor = a.getColor(R.styleable.BBcomButton_shadowOuterColor, 0xff000000); allowResize = a.getBoolean(R.styleable.BBcomButton_allowResize, true); 

Чтобы заставить его работать

Я думаю, вы должны использовать

 iconview:name="entypo_search" 

вместо

 iconview:icon_name="entypo_search" 

Вы получите эту ошибку, если статически объявили имя своего пакета как пространство имен (например, xmlns: iconview = "http://schemas.android.com/apk/lib/be.webelite.iconview&quot; в вашем случае) в макете Файл и попытайтесь создать проект с помощью Lint on. Проверьте проверки Android Gradle Lint :

В проектах Gradle фактический пакет, используемый в окончательном APK, может варьироваться; Например, вы можете добавить суффикс пакета .debug в одну версию, а не другую. Поэтому вы не должны жестко кодировать пакет приложения в ресурсе; Вместо этого используйте специальное пространство имен http://schemas.android.com/apk/res-auto, которое заставит инструменты определить правильное пространство имен для ресурса независимо от фактического пакета, используемого во время сборки.

Если кто-то здесь, и ничего не работает. Из того, что я вижу, наличие подчеркивания в вашем пространстве имен, похоже, отлично работает в редакторе, но неожиданно ломается при создании приложения.