如何在 Android 中将 Button 放置在 WebView 的顶部
How to position a Button on top of a WebView in Android
我是 Android 开发的新手,我正在处理现有的代码库。
我有一个 android.webkit.WebView
实例,我需要在其右下角添加一个按钮。而且我还需要按钮保持固定。我不希望它随着 webview 的内容滚动。我希望按钮始终位于 webview 本身的右下角,而不是其内容。
为此,我扩展了 WebViewClient class 并覆盖了 onPageStarted
方法,这是我考虑添加代码以添加按钮的地方。
我的代码类似于:
public class MyWebViewClient extends WebViewClient {
@Override
public void onPageStarted(WebView view, String url, Bitmap favicon) {
super.onPageStarted(view, url, favicon);
//TODO: create a Button instance here and place it on top of the webview
}
}
为了创建和添加按钮,我尝试了以下不同的选项,但 none 中的选项效果如我所愿。它们都以 webview 最左上角的按钮(在 webview 坐标系中的坐标 (0,0) 处)结束,并且当 webview 滚动时,按钮随内容滚动。
@Override
public void onPageStarted(WebView webview, String url, Bitmap favicon) {
super.onPageStarted(webview, url, favicon);
//TODO: create a Button instance here and place it on top of the webview
Button button = new Button(webview.getContext());
button.setText("35");
RelativeLayout.LayoutParams layoutParams = new
RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.WRAP_CONTENT,
RelativeLayout.LayoutParams.WRAP_CONTENT);
layoutParams.width = 44;
layoutParams.height = 44;
layoutParams.rightMargin = 20;
layoutParams.bottomMargin = 20;
button.setLayoutParams(layoutParams);
webview.addView(button);
}
我也尝试过使用 LinearLayout 进行此操作,但这导致了类似的行为,即按钮位于网络视图的顶部并且按钮随网络视图的内容滚动。
我一直在努力寻找答案,似乎 FrameLayout 也可能是一种方法,但是,假设这是正确的,我不确定我是否需要这样做 webview.setLayoutParams(new FrameLayout(...))
或如果需要将其应用于按钮,还是需要在两者上都进行设置?
回顾一下,我正在尝试在 Web 视图顶部添加一个按钮,这样:
- 它位于网络视图的右下角。
- 它不会随着网页视图的内容滚动。无论网页视图是否滚动,它都应该固定在同一个右下角位置。
我的问题是:执行此操作的最佳方法是什么(如果可能,以编程方式,而不是使用 XML)。我应该使用 FrameLayout 还是其他东西?
我建议您改用 XML,这样您就可以更好地控制各个视图及其在布局中的位置。
编辑:
假设您使用 Activity
或 Fragment
作为这些视图的容器,只需将这些视图添加到您的 XML 即可开始使用它们。
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
xmlns:app="http://schemas.android.com/apk/res-auto">
<Button
android:id="@+id/button"
android:layout_width="0dp"
android:layout_height="wrap_content"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintEnd_toEndOf="parent"/>
<WebView
android:id="webView"
android:layout_width="0dp"
android:layout_height="0dp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/button" />
</androidx.constraintlayout.widget.ConstraintLayout>
一旦它们在适当的 XML 文件中,您就可以通过 Activity/Fragment.
直接访问它们
我是 Android 开发的新手,我正在处理现有的代码库。
我有一个 android.webkit.WebView
实例,我需要在其右下角添加一个按钮。而且我还需要按钮保持固定。我不希望它随着 webview 的内容滚动。我希望按钮始终位于 webview 本身的右下角,而不是其内容。
为此,我扩展了 WebViewClient class 并覆盖了 onPageStarted
方法,这是我考虑添加代码以添加按钮的地方。
我的代码类似于:
public class MyWebViewClient extends WebViewClient {
@Override
public void onPageStarted(WebView view, String url, Bitmap favicon) {
super.onPageStarted(view, url, favicon);
//TODO: create a Button instance here and place it on top of the webview
}
}
为了创建和添加按钮,我尝试了以下不同的选项,但 none 中的选项效果如我所愿。它们都以 webview 最左上角的按钮(在 webview 坐标系中的坐标 (0,0) 处)结束,并且当 webview 滚动时,按钮随内容滚动。
@Override
public void onPageStarted(WebView webview, String url, Bitmap favicon) {
super.onPageStarted(webview, url, favicon);
//TODO: create a Button instance here and place it on top of the webview
Button button = new Button(webview.getContext());
button.setText("35");
RelativeLayout.LayoutParams layoutParams = new
RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.WRAP_CONTENT,
RelativeLayout.LayoutParams.WRAP_CONTENT);
layoutParams.width = 44;
layoutParams.height = 44;
layoutParams.rightMargin = 20;
layoutParams.bottomMargin = 20;
button.setLayoutParams(layoutParams);
webview.addView(button);
}
我也尝试过使用 LinearLayout 进行此操作,但这导致了类似的行为,即按钮位于网络视图的顶部并且按钮随网络视图的内容滚动。
我一直在努力寻找答案,似乎 FrameLayout 也可能是一种方法,但是,假设这是正确的,我不确定我是否需要这样做 webview.setLayoutParams(new FrameLayout(...))
或如果需要将其应用于按钮,还是需要在两者上都进行设置?
回顾一下,我正在尝试在 Web 视图顶部添加一个按钮,这样:
- 它位于网络视图的右下角。
- 它不会随着网页视图的内容滚动。无论网页视图是否滚动,它都应该固定在同一个右下角位置。
我的问题是:执行此操作的最佳方法是什么(如果可能,以编程方式,而不是使用 XML)。我应该使用 FrameLayout 还是其他东西?
我建议您改用 XML,这样您就可以更好地控制各个视图及其在布局中的位置。
编辑:
假设您使用 Activity
或 Fragment
作为这些视图的容器,只需将这些视图添加到您的 XML 即可开始使用它们。
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
xmlns:app="http://schemas.android.com/apk/res-auto">
<Button
android:id="@+id/button"
android:layout_width="0dp"
android:layout_height="wrap_content"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintEnd_toEndOf="parent"/>
<WebView
android:id="webView"
android:layout_width="0dp"
android:layout_height="0dp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/button" />
</androidx.constraintlayout.widget.ConstraintLayout>
一旦它们在适当的 XML 文件中,您就可以通过 Activity/Fragment.
直接访问它们