Intereting Posts
Как проверить транзакции Android на основе приложения на MY-сервере? Как показать уведомление в строке состояния? Как обновить / понизить подписки в Android InAppBilling? RxJava: узнайте, было ли BehaviorSubject повторяющимся значением или нет Есть ли какая-то консоль Firebug или JavaScript для Android? Проблемы с представлением предварительного просмотра макета: цветные фильтры PorterDuff не поддерживаются Набор фонового цвета в framelayout в андроиде программно Просмотр пейджера + ImageView + Пинч-масштабирование + поворот Предупреждение о сбое данных для Android Предупреждение: ссылки на методы, использующие '.' не рекомендуется Не удалось выполнить выполнение Gradle (новый проект) – java home different Почему кнопка вверх присутствует без setDisplayHomeAsUpEnabled ()? RabbitMQ – Случайные очереди с именем «amq.gen- *», получающим автогенерирование Ящик навигации будет закрыт, даже если перезаписать onBackPressed () ProgressDialog: как предотвратить утечку окна Android Studio не может разрешить общий символ

Как использовать элементы управления Xamarin.Form и собственные элементы управления На той же странице

Я хочу использовать Xamarin.Form Control внутри своих собственных элементов управления Android. На моей основной странице Android есть способ загрузить страницу Xamarin.Form внутри моего собственного фрагмента Android или LinearLayout?

По словам Хамарина, это возможно. Но я не могу найти, как этого добиться.

http://xamarin.com/forms

Solutions Collecting From Web of "Как использовать элементы управления Xamarin.Form и собственные элементы управления На той же странице"

Есть несколько вещей, которые обсуждаются, так голые со мной: –

Фрагмент изображения, из того, что я понимаю: –

"Not only are Xamarin.Forms pages mixable with custom screens" ... 

Это похоже на то, что упоминает @Stephane, позволяющее приложению использовать собственные экраны, а также экраны Xamarin.Forms . Каждая платформа- заглушка может вводить общую страницу Xamarin.Forms в любой момент приложения. Вам не нужно использовать навигационный стек Xamarin.Forms .

  "but you can embed custom views built directly against Xamarin.IOS and Xamarin.Android into Xamarin.Forms pages." 

Это то, что упоминает @Sten, где, если вы создаете специфичные для платформы ContentRenderers, вы можете визуализировать любые собственные средства управления на существующей странице Xamarin.Forms , передавая этот общий вид каждому рендерингу платформы.

Так, например, если у вас был вид : –

  public class MyView : ContentView { // Create some bindable properties here that can be used in your platform specific renderer, // ie DisplayText etc. } 

Вы можете использовать приведенное выше в определении страницы Xamarin.Forms, а затем создавать средства рендеринга платформы , которые будут вызываться для рендеринга содержимого .

Именно из этих классов конкретных классов рендеринга платформы вы можете использовать собственные элементы управления на каждой платформе.

Например, в ContentRenderer для события OnElementChanged вы можете сделать что-то вроде следующего для WindowsPhone :

  protected override void OnElementChanged(Xamarin.Forms.Platform.WinPhone.ElementChangedEventArgs<MyView> e) { base.onElementChanged(e); ... System.Windows.Controls.TextBox objPlatformSpecificTextBox = new System.Windows.Controls.TextBox(); ... ... 

Тем не менее, то, что @Gulshan действительно хочет, я считаю, это иметь собственную страницу, которая находится в центре внимания, когда контент Xamarin.Forms отображается в определенную точку на уже существующей собственной странице .

Его любопытное обратное, в мышлении, однако это все еще возможно:

Для этого вам необходимо стимулировать создание страниц на временную новую страницу .

Например, в WindowsPhone вы сделаете это через: –

  PhoneApplicationPage objInnerPage_Temp = new PhoneApplicationPage(); UIElement objInnerContent = App.GetMainPage().ConvertPageToUIElement(objInnerPage_Temp); 

На конкретной конкретной странице платформы .

Затем вы можете вставить отображаемое содержимое в собственный контейнер, который подходит на платформе, то есть сетку .

Обновление 1: –

==========

Хотя его очень легко сделать на WindowsPhone , похоже, что это невозможно при попытке чего-то подобного в Android .

Создание страницы Android очень заблокировано, т. Е. Вы не можете получить доступ к закрытым полям для холста и / или макета, которые он использует внутри AndroidActivity .

Если это было возможно, вы могли бы повторно использовать это и отображать содержимое и вводить аналогично решению для платформы WindowsPhone .

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

Была надежда, на которую я думал, приближаясь к этому из реализации Fragment для создания Activity в ней, и это может хорошо работать. Однако проблема заключается в том, что реализация в Xamarin.Forms ожидает, что ActionBar будет доступен, Нет, и они не проверяют сценарий if, если это позволяет продолжить выполнение, если оно недоступно, поэтому оно генерирует исключение, предотвращающее создание содержимого страницы.

Это не кажется возможным ?, если они не открывают поля макета / холста в AndroidActivity или не задают проблему ожидания ActionBar .

Вероятно, вы ищете собственный рендерер.

  • В проекте Forms создайте класс MyView, который наследует View (или какой-либо другой подходящий класс, например ContentView, если у вас будут дочерние представления и т. Д.),
  • В проекте Android создайте класс рендеринга MyViewRenderer, который наследует ViewRenderer
  • Добавьте атрибут к этому классу, который указывает, что это средство визуализации перед объявлением пространства имен [assembly: ExportRenderer (typeof(MyView), typeof(MyViewRenderer))]
  • В MyViewRenderer переопределите OnElementChanged, вызовите base.SetNativeView(ctl) где ctl – это экземпляр вашего собственного элемента управления

Взгляните на руководство Xamarin

Еще один ресурс на форумах Xamarin .

VisualElementRenderer<TElement> мою собственную границу, я бы сказал, что VisualElementRenderer<TElement> – лучший рендерер для использования. Если вы используете это все, что вам нужно сделать, это переопределить OnElementChanged и сделать NativeView.Add(customUIView) и скопировать свойства из экземпляра MyView. Чтобы обрабатывать динамические изменения этих свойств, переопределите OnElementPropertyChanged и обновите экземпляр customUIView

Как уже обсуждалось, это довольно просто на iOS.CreateViewController () ) и WP ( .ConvertPageToUIElement () ).

Но на Android все тоже не потеряно: вы можете использовать метод расширения .GetView () с http://www.arturdr.ru/android/xamarin-forms-i-slozhnosti-integratsii-v-android-prilozheniya/

Ниже приведен пример того, как обернуть страницу Xamarin.Forms в Android AlertDialog, используя этот метод: https://github.com/OlexaLe/XFPageAsAndroidDialog

Xamarin пересмотрел свой веб-сайт, поэтому изображение выше устарело. По мере развития библиотеки Xamarin.Forms стало более сложно смешивать Xamarin.Forms и собственные виды платформы. Я бы не рекомендовал это делать.

Продвинутые пользователи могут это сделать, но мои разговоры с другими разработчиками говорят о том, что это создает много дополнительной работы и накладных расходов. Лучший путь вперед – либо использовать Xamarin.Forms исключительно для ваших просмотров, либо использовать собственные представления для платформы.

Вот скриншот страницы Xamarin.Forms Xamarin (снимок сделан 13 мая 2015 года):

Введите описание изображения здесь

Вы можете создать новое действие, которое поддерживается Xamarin.Forms , наследуя от Xamarin.Forms.Platform.Android.AndroidActivity и Xamarin.Forms.Platform.Android.AndroidActivity это новое действие из другого в вашем приложении Xamarin.Android.