我正在尝试在 Android .NET 中使用 ExoPlayer 构造函数,它需要 IAttributeSet 来根据这个问题设置一些参数。
我正在尝试解决 IAttributeSet 的创建问题,但似乎无法成功。
在 Visual Studio 2022 中,如果出现:
Xam.Plugins.Android.ExoPlayer
protected override void OnCreate(Bundle? savedInstanceState) {
base.OnCreate(savedInstanceState);
string xmlString =
"<?xml version=\"1.0\" encoding=\"utf-8\"?>\n" +
"<Com.Google.Android.Exoplayer2.UI.PlayerView " +
"android:id=\"@+id/player_view\" " +
"app:surface_type=\"texture_view\" " + //KEY NEEDED LINE FOR GOAL
"android:layout_width=\"match_parent\" " +
"android:layout_height=\"match_parent\"/>";
XmlReader xmlReader = XmlReader.Create(new StringReader(xmlString));
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.AttributeCount
和 attributes.AttributeCount
都返回为 0
,我认为这意味着他们没有正确设置任何 XML。**Java.Lang.ClassCastException:** 'android.util.XmlPullAttributes cannot be cast to android.content.res.XmlBlock$Parser'
为什么这段代码在这两点上失败了?我看到 (2) 中的错误的唯一其他地方是here,我不确定这是如何工作的。
如何创建 ExoPlayer 构造函数所需的 IAttributeSet?
感谢您的帮助。
这是有效的 Kotlin 代码。我希望它能帮助你。 我看到的差异:
xmlns:app
XML:
<?xml version="1.0" encoding="utf-8"?>
<androidx.media3.ui.PlayerView xmlns:app="http://schemas.android.com/apk/res-auto"
app:surface_type="texture_view" />
解析:
fun getPlayerViewAttributes(context: Context): AttributeSet {
val parser = context.resources.getXml(R.xml.exoplayer)
var type = 0
while (type != XmlPullParser.END_DOCUMENT && type != XmlPullParser.START_TAG) {
type = parser.next()
}
return Xml.asAttributeSet(parser)
}