#android #webview #android-linearlayout
#Android #webview #android-linearlayout
Вопрос:
У меня есть LinearLayout с фоном shape и WebView внутри. Как обрезать WebView вдоль границы фигуры?
Я хочу, чтобы WebView соответствовал форме, и поэтому WebView не будет иметь острых углов.
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical"
android:padding="5dip" >
<LinearLayout
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:background="@drawable/bg_border"
android:orientation="vertical" >
<WebView android:id="@ id/webview"
android:layout_width="fill_parent"
android:layout_height="fill_parent" />
</LinearLayout>
</LinearLayout>
bg_border.xml
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle">
<stroke
android:width="1dp"
android:height="1dp"
android:color="@color/border" />
<corners
android:radius="5dp"
android:bottomRightRadius="5dp"
android:bottomLeftRadius="5dp"
android:topLeftRadius="5dp"
android:topRightRadius="5dp" />
Ответ №1:
Держу пари, вы можете только имитировать это. Создайте другую фигуру с (меньшим) радиусом и сделайте ее белой. Поместите это вокруг вашего веб-представления. Это, очевидно, не сработает, если страница, на которую вы смотрите, не белая.
Кроме того, вам не нужно определять TopLeft / bottomRight / etc, если вы уже определили «radius» и все значения одинаковы.
ОБНОВИТЕ идеи. Оба они включают исходное изображение, ПОДОБНОЕ этому: http://www.noiseindustries.com/downloads/misc/FxFactoryHelp/pluginguide/generators/roundedrectangle/files/ni-rounded-rectangle.jpg
Просто убедитесь, что граница НАМНОГО меньше. 3-5 пикселей. Белый центр должен быть прозрачным, а не белым.
1) Создайте RelativeLayout и создайте изображения для сторон и углов. С макетом и изображениями в основном раскладывайте изображения так, чтобы вы «рисовали» границу. Не помещайте ничего в центр. Создайте FrameLayout, поместите webview, затем поместите RelativeLayout сверху. Будем надеяться, что события касания в центре попадут в webview, но все равно дадут вам мягкую границу по краям.
2) Создайте изображение с 9 участками, которое в основном выглядит так же, как граница, описанная в 1. Сделайте то же самое FrameLayout, описанное в 1, и добавьте Webview. Кроме того, добавьте ПОЛЬЗОВАТЕЛЬСКИЙ вид. Установите фон на 9-патч и убедитесь, что пользовательский вид передает все свои события касания.
Я подозреваю, что # 1 было бы проще реализовать, но кто знает?
Комментарии:
1. Цвет страницы изменится, так что это не мой способ. Спасибо за комментарий о «радиусе».
2. Я выберу первое. Я думал, что есть более простой способ 🙂