Join FlipAndroid.COM Telegram Group: https://t.me/joinchat/F_aqThGkhwcLzmI49vKAiw


Atributos de vista personalizada de Android que no funcionan después de cambiar a gradle

Así que recientemente migré a gradle ahora mis atributos de vista personalizada devuelven null

Mi proyecto se ve así

  • Actualizaciones de Android en Play Store
  • La notificación deleteIntent no funciona
  • En el emulador de Android, al intentar cargar una vista web, obtengo net :: err_cache_miss
  • No hay sonido de notificación al enviar notificación de firebase en android
  • ¿Cuál es la mejor manera de comprobar si la vista es visible en la ventana?
  • No se puede deserializar instancia de objeto de START_ARRAY token en Spring 3 REST Webservice
  • –custom_icon_view // biblioteca que contiene la vista personalizada con atributos personalizados – mi aplicación // esta es la aplicación principal que realmente utiliza la vista personalizada

    En mi diseño tengo el espacio de nombres definido como este:

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

    Porque el uso de apk / res-auto retoma un error diciendo que attibutes no pudo ser identificado

    Esto es cómo trato de obtener el nombre del icono definido en xml, esto se utiliza para trabajar perfectlly pero ahora no. Y todo lo que cambié fue migrar a gradle.

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

    Así que estoy adivinando mis archivos gradle.build están causando un problema?

    Tengo la biblioteca configurada para

      apply plugin: 'android-library' 

    Finalizar la aplicación principal gradle.build as

      apply plugin: 'android' 

    Esto me ha estado dando dolor de cabeza por 2 días ahora 🙁 cualquier ayuda / sugerencias son muy apperciated.

    Aquí están mis archivos gradle

    Http://pastie.org/private/h57o8nanydosq0dtm6eiq

    Y aquí está la estructura de carpetas

    Http://pastie.org/private/nvbzomx2zeagdpzt8qqjsq

    Esto es cómo declaro mi opinión en el 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 en IconView> res> directorio de valores

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

  • Llamar al adaptador ListView personalizado de la clase de fragmento Actividad principal
  • Interceptar las solicitudes HTTP enviadas desde la aplicación de Android
  • Uso de XML simple y obtención de NoClassDefFoundError en Android
  • ¿Cuál es el uso del layoutinflator?
  • La tecla de retroceso para hacer estallar el fragmento muestra los fragmentos superpuestos
  • ¿Cómo transferir archivos entre aplicaciones de Android que se ejecutan en el mismo dispositivo?
  • 5 Solutions collect form web for “Atributos de vista personalizada de Android que no funcionan después de cambiar a gradle”

    Realmente no puedo ver lo que está mal en tu proyecto. Aquí es cómo uso vista personalizada & attrs en el mío:

    En mi proyecto de biblioteca:

    Attrs.xml:

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

    En mi clase personalizada:

      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 } 

    En mi proyecto principal aquí un ejemplo de uno de mi diseño:

     <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> 

    Espero que ayude …

    Editar:

    En mi build.gradle de mi "proyecto principal"

     dependencies { compile project(":MyLibraryProject") } 

    Y aquí el build.gradle de mi biblioteca:

     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:

    Trate de usar este espacio de nombres:

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

    Y reemplazar:

      iconview:icon_name="entypo_search" 

    Por:

      custom:name="entypo_search" 

    Si está capturando atributos en el método de init de su vista personalizada con referencias duras a ese espacio de nombres específico, entonces el cambio a res-auto romperá eso. En su lugar, tendrá que cambiar esas referencias también a res-auto. O el método preferido es simplemente agarrar la interfaz mecanografiada. Por ejemplo, en mi proyecto esto:

     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); 

    Se convirtió en esto:

     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); 

    Pero preferiblemente esto:

     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); 

    Para que funcione

    Creo que deberías usar

     iconview:name="entypo_search" 

    en lugar de

     iconview:icon_name="entypo_search" 

    Obtendrá este error cuando haya declarado estáticamente su nombre de paquete como un espacio de nombres (por ejemplo, xmlns: iconview = "http://schemas.android.com/apk/lib/be.webelite.iconview&quot; en su caso) en un diseño Archivo e intente construir el proyecto con Lint en. Compruebe las verificaciones de Gradint Lint de Android :

    En los proyectos de Gradle, el paquete real utilizado en el APK final puede variar; Por ejemplo, puede agregar un sufijo de paquete .debug en una versión y no en el otro. Por lo tanto, no debe codificar el paquete de aplicación en el recurso; En su lugar, utilice el espacio de nombres especial http://schemas.android.com/apk/res-auto que hará que las herramientas determinen el espacio de nombres correcto para el recurso independientemente del paquete real utilizado durante la compilación.

    Si alguien está aquí y nada parece estar funcionando. Por lo que puedo ver, tener un guión bajo en su espacio de nombres parece funcionar bien en el editor, pero se rompe inesperadamente a medida que construye la aplicación.

    FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.