Я понял, как это сделать, если кому-то интересно. Я искал некоторое время и находил вещи, которые подошли близко, но так и не получили их полностью Этот ответ не такой, как для Java-Android. Имейте в виду, что это C # / Xamarin.Android , а не Xamarin.Forms. Если это считается дубликатом, я прошу прощения, и вы можете удалить тему.
Я создал файл .cs, а затем класс прямо в решении с именем ExtWebView.cs (возможно, вы можете переместить его в папку, но для простоты я поместил его непосредственно в решение рядом с MainActivity.cs):
using Android.Content;
using Android.Runtime;
using Android.Util;
using Android.Webkit;
using System;
namespace f00ProjectNamespace
{
public class ExtWebView : WebView
{
//from what I read you need all of the constructors..
//so type ExtWebView : WebView then right click on ExtWebView and hit
//"generate all" *after* adding "using Android.Webkit;"
public ExtWebView(Context context) : base(context)
{
}
public ExtWebView(Context context, IAttributeSet attrs) : base(context, attrs)
{
}
public ExtWebView(Context context, IAttributeSet attrs, int defStyleAttr) : base(context, attrs, defStyleAttr)
{
}
public ExtWebView(Context context, IAttributeSet attrs, int defStyleAttr, bool privateBrowsing) : base(context, attrs, defStyleAttr, privateBrowsing)
{
}
public ExtWebView(Context context, IAttributeSet attrs, int defStyleAttr, int defStyleRes) : base(context, attrs, defStyleAttr, defStyleRes)
{
}
protected ExtWebView(IntPtr javaReference, JniHandleOwnership transfer) : base(javaReference, transfer)
{
}
//now we can override methods inside the WebView like this: =]
public override void OnWindowFocusChanged(bool hasWindowFocus)
{
//this method is invoked when the app changes focus
base.OnWindowFocusChanged(hasWindowFocus);
}
}
}
очень важно, внутри вашего макета вам нужно пометить ExtWebView пространством имен следующим образом: f00ProjectNamespace.ExtWebView (где f00ProjectNamespace, очевидно, является вашим пространством имен); некоторые люди говорили, чтобы использовать имя пакета, и это не сработало для меня.
<f00ProjectNamespace.ExtWebView
android:id="@+id/webView1"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:layout_centerInParent="true"
android:textAlignment="center"
android:textSize="@dimen/abc_text_size_display_1_material"
android:layout_centerVertical="false"/>
и внутри моего фрагмента я получил WebView следующим образом:
public override View OnCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState)
{
var _view = inflater.Inflate(Resource.Layout.TheFragmentLayout1, container, false);
var _wv = (ExtWebView)_view.FindViewById<ExtWebView>(Resource.Id.webView1);
}
Отлично работает, ошибок нет, и у меня расширенный WebView. Надеюсь, это поможет, работает в текущей версии Xamarin. Android по состоянию на 06/29/19