Как программно создать TextViewView с помощью ExoPlayer в .NET/MAUI?C#

Место общения программистов C#
Ответить
Anonymous
 Как программно создать TextViewView с помощью ExoPlayer в .NET/MAUI?

Сообщение Anonymous »

Цель
Я пытаюсь создать ExoPlayer, используя код Android в .NET (MAUI), который визуализируется в TextView (а не в SurfaceView по умолчанию).
Справочная информация
В этой теме это обсуждается с точки зрения Android.
В .NET/MAUI у нас есть следующий конструктор, который подойдет для ExoPlayer:

Код: Выделить всё

public unsafe StyledPlayerView (global::Android.Content.Context? context, global::Android.Util.IAttributeSet? attrs)
Значит, вы можете запустить это как:

Код: Выделить всё

var PlayerView = new StyledPlayerView(androidContext, attributes);
//presuming you have a working 'attributes' file...
Второй аргумент атрибутов global::Android.Util.IAttributeSet? attrs — это место, где мы должны указать, что нам нужен TextView.
По ссылке выше мы должны передать XML-файл, который сначала преобразуется в IAttributeSet объект, чтобы указать TextView в качестве целевой поверхности.
Приведен пример XML: XML-файл такого типа должен быть преобразован в атрибут, необходимый для конструктора, следующим образом:

Код: Выделить всё

val xmlAttributes = context.resources.getXml(R.xml.player_view).let {
try {
it.next()
it.nextTag()
} catch (e: Exception) {
// do something, log, whatever
}
Xml.asAttributeSet(it)
}
Вопрос
Если я хочу полностью работать со сценарием C# и не хочу, чтобы XML-файлы загружались откуда угодно, а хочу просто объявить этот минимальный короткий фрагмент XML как строку или записать непосредственно в моем коде C#, могу ли я это сделать?
Могу ли я затем передать это в код для создания атрибута? Или, альтернативно, можем ли мы создать IAttributeSet для конструктора непосредственно на C#, даже не утруждаясь сначала созданием XML?
Моя лучшая попытка
Моя лучшая показанная попытка приводит к ошибке, которую я не понимаю.
В Visual Studio 2022, если таковая имеется:
  • Файл > Создать > Приложение Android
  • Добавьте ExoPlayer NuGet Xam.Plugins.Android.ExoPlayer
  • Затем в MainActivity .cs, можно попробовать следующий код:

Код: Выделить всё

protected override void OnCreate(Bundle? savedInstanceState) {
base.OnCreate(savedInstanceState);

string xmlString =
"\n" +
"";

XmlReader xmlReader = XmlReader.Create(new StringReader(xmlString));
xmlReader.Read();
System.Diagnostics.Debug.WriteLine("XML READER " + xmlReader.AttributeCount);

Android.Util.IAttributeSet attributes = Android.Util.Xml.AsAttributeSet(xmlReader);
System.Diagnostics.Debug.WriteLine("ATTRIBUTES " + attributes.AttributeCount);

Com.Google.Android.Exoplayer2.UI.StyledPlayerView styledPlayerView = new(this, attributes);
Проблемы
В Visual Studio при кодировании ошибок не выдается. Однако при его запуске очевидны две проблемы:
  • Если вы попытаетесь отладить xmlReader с помощью следующего кода, появится сообщение **System. Xml.XmlException:** «android» — необъявленный префикс. Строка 2, позиция 52.':

Код: Выделить всё

while (xmlReader.Read()) {
switch (xmlReader.NodeType) {
case XmlNodeType.Element:
System.Diagnostics.Debug.WriteLine("", xmlReader.Name);
break;
case XmlNodeType.Text:
System.Diagnostics.Debug.WriteLine(xmlReader.Value);
break;
case XmlNodeType.CDATA:
System.Diagnostics.Debug.WriteLine("", xmlReader.Value);
break;
case XmlNodeType.ProcessingInstruction:
System.Diagnostics.Debug.WriteLine("", xmlReader.Name, xmlReader.Value);
break;
case XmlNodeType.Comment:
System.Diagnostics.Debug.WriteLine("", xmlReader.Value);
break;
case XmlNodeType.XmlDeclaration:
System.Diagnostics.Debug.WriteLine("");
break;
case XmlNodeType.Document:
break;
case XmlNodeType.DocumentType:
System.Diagnostics.Debug.WriteLine("

Подробнее здесь: [url]https://stackoverflow.com/questions/78446498/how-to-create-textureview-programmatically-with-exoplayer-in-net-maui[/url]
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»