Пользовательский конструктор представлений не вызывается в android 5.0.2

Я создал пользовательский вид:

public class SomeView extends View 

Пользовательские конструкторы представлений:

 public SomeView (Context context) { super(context); } // Called when view is inflated from xml public SomeView (Context context, AttributeSet attrs) { super(context, attrs); } // Perform inflation from XML and apply a class-specific base style from a theme attribute. public SomeView (Context context, AttributeSet attrs, int defStyle) { super(context, attrs, defStyle); } 

Я также попробовал 4-го конструктора из api 21 без везения:

 public VeediView(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) { super(context, attrs,defStyleAttr, defStyleRes); } 

В макете xml я определяю этот вид, и все работает нормально.

Тестирование на Galaxy S2 отлично работает и вызывается конструктор вида, но при запуске приложения на Nexus-7 android 5.0.2 конструкторы вообще не вызываются.

Любая идея почему?

Может ли это быть связано с корневыми устройствами?

Соответствующий вид xml:

 <com.package.name android:id="@+id/scene" android:onClick="startx" style="@style/txt_money_style" android:layout_width="72dp" android:layout_height="72dp" android:background="@drawable/wtbtn" android:layout_gravity="right" android:gravity="center_vertical|right" /> 

Solutions Collecting From Web of "Пользовательский конструктор представлений не вызывается в android 5.0.2"

В API 21 теперь существует 4-й конструктор, и это может означать, что ваш XML вызывает это.

Из документов:

Public View (контекст контекста, AttributeSet attrs, int defStyleAttr, int defStyleRes)

Добавлено в API уровня 21

Выполните инфляцию из XML и примените базовый стиль для класса из атрибута темы или ресурса стиля. Этот конструктор View позволяет подклассам использовать свой собственный базовый стиль, когда он раздувается.

При определении конечного значения конкретного атрибута вступают в игру четыре входа:

  1. Любые значения атрибутов в заданном наборе атрибутов.
  2. Ресурс стиля, указанный в AttributeSet (называемый «стиль»).
  3. Стиль по умолчанию, определяемый defStyleAttr.
  4. Стиль по умолчанию, определенный defStyleRes.
  5. Базовые значения в этой теме.

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

параметры

Context Контекст, в котором запущено представление, через которое он может получить доступ к текущей теме, ресурсам и т. Д. Attrs Атрибуты тега XML, которые раздувают представление. DefStyleAttr Атрибут в текущей теме, который содержит ссылку на ресурс стиля, который поставляет значения по умолчанию для представления. Может быть 0, чтобы не искать значения по умолчанию. DefStyleRes Идентификатор ресурса ресурса стиля, который поставляет значения по умолчанию для представления, используется только в том случае, если defStyleAttr равен 0 или не может быть найден в теме. Может быть 0, чтобы не искать значения по умолчанию.

Я думаю, вы должны использовать этот конструктор для наилучшего использования:

 public SomeView (Context context) { this(context , null); } // Called when view is inflated from xml public SomeView (Context context, AttributeSet attrs) { this(context, attrs , 0); } // Perform inflation from XML and apply a class-specific base style from a theme attribute. public SomeView (Context context, AttributeSet attrs, int defStyle) { super(context, attrs, defStyle); // Initialize customize constructor here } 

Вот исходный код упомянутого класса View.java . Если вы проверите это, вы увидите, что public View(Context context) всегда вызывается. Если вы считаете, что это не вызывается, но вы видите представление, то проблема скорее в части, определяющей, вызвана ли она , чем в коде Android. Вы должны посмотреть туда. Это может быть код регистрации или некоторые неправильные фильтры в AS или аналогичные.

Из исходного кода вы также можете видеть, что это новый конструктор, используемый в Android 5.0 выше, который имеет наибольшую реализацию.

 public View(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) 

Дело в том, что я получил этот код и не разработал его сам, и, попробовав все, оказалось, что приложение имеет несколько файлов макета:

Макет-большой, макет-малый и т. Д. …

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

Я думаю, что другие могут узнать из моей ошибки, я хочу, чтобы Android Studio или Eclipse могли поддерживать какой-то setContentView (R.layout.activity_scene) и соответствующий параметр отладки файла

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