#xamarin #webview
#xamarin #webview
Вопрос:
У меня есть эта страница Xamarin Forms:
<?xml version="1.0" encoding="utf-8" ?>
<ContentPage xmlns="http://xamarin.com/schemas/2014/forms"
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
xmlns:local="clr-namespace:TestApp1"
x:Class="TestApp1.MainPage">
<ContentPage.Content>
<StackLayout Orientation="Vertical">
<WebView Source="http://www.google.de" HeightRequest="3000" WidthRequest="100"/>
</StackLayout>
</ContentPage.Content>
</ContentPage>
Когда я открываю свое приложение, ввожу что-либо в подсказке Google, я не могу прокручивать страницу результатов. Как мне это включить?
Когда я гуглю «xamarin webview включить прокрутку», я нахожу только информацию о его отключении…
Комментарии:
1. Считается, что запрос высоты выполняется таким образом, что WebView настолько высок, что ему не нужно прокручивать?
2. на какой платформе вы тестируете?
3. Выяснилось, что это связано со stacklayout. Если у меня нет webview в stacklayout, он прокручивается просто отлично. Но затем я спрашиваю себя, как мне выровнять любые другие элементы управления в форме, чтобы пользователь мог получить доступ к параметрам или чему-то подобному, и при этом webview по-прежнему занимал остальное пространство.
4. Я тестирую на Windows Phone 10
5. На Android это хорошо работает с макетом стека. Я могу попробовать протестировать на Windows Phone 8. У вас это работает на phone 8? Можете ли вы предоставить изображение того, чего вы пытаетесь достичь на этой странице? Кстати. настройка запросов ширины и высоты на Android, похоже, не оказывает никакого эффекта. Я думаю, вам следует использовать HorizontalOptions и VerticalOptions
Ответ №1:
Создайте свой собственный рендерер и переопределите этот метод следующим образом:
public override bool DispatchTouchEvent(MotionEvent e)
{
Parent.RequestDisallowInterceptTouchEvent(true);
return base.DispatchTouchEvent(e);
}
Комментарии:
1. После обновления до Android SDK 28 и обновления Xamarin. Вместе с формами мои WebViews больше не прокручивались, но это исправлено.
Ответ №2:
<?xml version="1.0" encoding="utf-8" ?>
<ContentPage xmlns="http://xamarin.com/schemas/2014/forms"
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
x:Class="ButtonRendererDemo.WebViewPage">
<ContentPage.Content>
<StackLayout Orientation="Vertical" Padding="10" Spacing="10">
<Button Text="Press me" HorizontalOptions="CenterAndExpand" VerticalOptions="Center" BackgroundColor="Green"/>
<WebView Source="http://www.google.de" HorizontalOptions="FillAndExpand" VerticalOptions="FillAndExpand" />
</StackLayout>
</ContentPage.Content>
</ContentPage>
Ответ №3:
Для меня проблема была внутри <WebView/>
, я установил статические запросы HeightRequest и WidthRequest — потому что в документации говорилось, что они необходимы, если вы используете <StackLayout>
— но это было неправдой
Удалив их и добавив VerticalOptions =»FillAndExpand» и HorizontalOptions =»FillAndExpand», я решил проблему для меня и позволил мне прокручивать, как ожидалось.
<WebView VerticalOptions="FillAndExpand" HorizontalOptions="FillAndExpand" Source="https://google.com/"/>
Комментарии:
1. Блестяще. Это сработало для меня при настройке Android 33.
Ответ №4:
Это работает для меня в Android очень хорошо
[assembly: ExportRenderer(typeof(MyWebView),typeof(MyWebViewRenderer))]
namespace App.Droid.Renderers
{
class MyWebViewRenderer : WebViewRenderer
{
public MyWebViewRenderer(Context context) : base(context)
{
}
protected override void OnElementChanged(ElementChangedEventArgs<WebView> e)
{
base.OnElementChanged(e);
}
public override bool DispatchTouchEvent(MotionEvent e)
{
Parent.RequestDisallowInterceptTouchEvent(true);
return base.DispatchTouchEvent(e);
}
}
}