如何使整个webview像按钮一样可点击

问题描述 投票:0回答:1

我正在为数学公式制作测验应用程序。由于局限性,我使用的是“ mathview extended webview”,我想在测验选项中显示公式。为此,我对测验中的每个四个选项都使用webview,所以我想使整个webview像按钮一样可点击。我该怎么办?

下面是我的mathview代码,这是我的主要活动

public class MainActivity extends AppCompatActivity {

    @BindView(R.id.activity_main)
    LinearLayout linearLayout;

    @BindView(R.id.math_view)
    MathView mathView;

    @BindView(R.id.second_layout)
    FrameLayout secondLayout;

    @BindView(R.id.input_view)
    EditText inputView;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        ButterKnife.bind(this);
        secondLayout.addView(mathView);
        mathView.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                Toast.makeText(MainActivity.this, "Clicked", Toast.LENGTH_LONG).show();
            }
        });
        mathView.setText("Enter Formula");

        inputView.addTextChangedListener(new TextWatcher() {
            @Override
            public void beforeTextChanged(CharSequence s, int start, int count, int after) {

            }

            @Override
            public void onTextChanged(CharSequence s, int start, int before, int count) {

            }

            @Override
            public void afterTextChanged(Editable s) {
                mathView.setText(inputView.getText().toString());
            }
        });
    }


}
public final class MathView extends WebView {
  private String text;
  private static final String TAG = MathView.class.getSimpleName();
  private volatile boolean pageLoaded;

  public MathView(Context context) {
    super(context);
    init(context);
  }

  public MathView(Context context, AttributeSet attrs) {
    super(context, attrs);
    init(context);
  }

  @SuppressLint("SetJavaScriptEnabled")
  private void init(Context context) {
    setBackgroundColor(Color.TRANSPARENT);
    this.text = "";
    this.pageLoaded = false;

    // enable javascript
    getSettings().setLoadWithOverviewMode(true);
    getSettings().setJavaScriptEnabled(true);


    // caching
    File dir = context.getCacheDir();
    if (!dir.exists()) {
      Log.d(TAG, "directory does not exist");
      boolean mkdirsStatus = dir.mkdirs();
      if (!mkdirsStatus) {
        Log.e(TAG, "directory creation failed");
      }
    }
    getSettings().setAppCachePath(dir.getPath());
    getSettings().setAppCacheEnabled(true);
    getSettings().setCacheMode(WebSettings.LOAD_CACHE_ELSE_NETWORK);



    // disable click
    setClickable(true);
    setLongClickable(true);
    getSettings().setUseWideViewPort(true);
//    getSettings().setDefaultFontSize(200);
    loadUrl("file:///android_asset/www/MathTemplate.html");
    setWebViewClient(new WebViewClient() {
      @Override
      public void onPageFinished(WebView view, String url) {
        pageLoaded = true;
        loadUrl("javascript:showFormula('" + MathView.this.text  + "')");
        super.onPageFinished(view, url);
      }
    });
  }

  public void setText(String text) {
    this.text = text;
    if (pageLoaded) {
      loadUrl("javascript:showFormula('" + MathView.this.text  + "')");
    } else {
      Log.e(TAG, "Page is not loaded yet.");
    }
  }

  public String getText() {
    return text.substring(1, text.length() - 1);
  }
}

这是我的堆栈跟踪:

2020-04-13 18:12:19.786 24367-24367/? I/hant.mathsampl: Not late-enabling -Xcheck:jni (already on)
2020-04-13 18:12:19.835 24367-24367/? W/hant.mathsampl: Unexpected CPU variant for X86 using defaults: x86
2020-04-13 18:12:20.083 24367-24367/com.nishant.mathsample I/hant.mathsampl: The ClassLoaderContext is a special shared library.
2020-04-13 18:12:20.874 24367-24367/com.nishant.mathsample W/hant.mathsampl: Accessing hidden method Landroid/view/View;->computeFitSystemWindows(Landroid/graphics/Rect;Landroid/graphics/Rect;)Z (light greylist, reflection)
2020-04-13 18:12:20.875 24367-24367/com.nishant.mathsample W/hant.mathsampl: Accessing hidden method Landroid/view/ViewGroup;->makeOptionalFitsSystemWindows()V (light greylist, reflection)
2020-04-13 18:12:20.924 24367-24367/com.nishant.mathsample I/WebViewFactory: Loading com.android.chrome version 69.0.3497.100 (code 349710017)
2020-04-13 18:12:20.934 24367-24367/com.nishant.mathsample I/hant.mathsampl: The ClassLoaderContext is a special shared library.
2020-04-13 18:12:21.047 24367-24367/com.nishant.mathsample I/cr_LibraryLoader: Time to load native libraries: 14 ms (timestamps 6511-6525)
2020-04-13 18:12:21.073 24367-24397/com.nishant.mathsample E/cr_VariationsUtils: Failed reading seed file "/data/user/0/com.nishant.mathsample/app_webview/variations_seed": /data/user/0/com.nishant.mathsample/app_webview/variations_seed (No such file or directory)
2020-04-13 18:12:21.090 24367-24367/com.nishant.mathsample I/chromium: [INFO:library_loader_hooks.cc(36)] Chromium logging enabled: level = 0, default verbosity = 0
2020-04-13 18:12:21.091 24367-24367/com.nishant.mathsample I/cr_LibraryLoader: Expected native library version number "69.0.3497.100", actual native library version number "69.0.3497.100"
2020-04-13 18:12:21.107 24367-24398/com.nishant.mathsample W/cr_ChildProcLH: Create a new ChildConnectionAllocator with package name = com.android.chrome, sandboxed = true
2020-04-13 18:12:21.149 24367-24367/com.nishant.mathsample I/cr_BrowserStartup: Initializing chromium process, singleProcess=false
2020-04-13 18:12:21.431 24367-24367/com.nishant.mathsample W/hant.mathsampl: Accessing hidden method Landroid/view/textclassifier/logging/SmartSelectionEventTracker;-><init>(Landroid/content/Context;I)V (light greylist, reflection)
2020-04-13 18:12:21.431 24367-24367/com.nishant.mathsample W/hant.mathsampl: Accessing hidden method Landroid/view/textclassifier/logging/SmartSelectionEventTracker;->logEvent(Landroid/view/textclassifier/logging/SmartSelectionEventTracker$SelectionEvent;)V (light greylist, reflection)
2020-04-13 18:12:21.431 24367-24367/com.nishant.mathsample W/hant.mathsampl: Accessing hidden method Landroid/view/textclassifier/logging/SmartSelectionEventTracker$SelectionEvent;->selectionStarted(I)Landroid/view/textclassifier/logging/SmartSelectionEventTracker$SelectionEvent; (light greylist, reflection)
2020-04-13 18:12:21.431 24367-24367/com.nishant.mathsample W/hant.mathsampl: Accessing hidden method Landroid/view/textclassifier/logging/SmartSelectionEventTracker$SelectionEvent;->selectionModified(II)Landroid/view/textclassifier/logging/SmartSelectionEventTracker$SelectionEvent; (light greylist, reflection)
2020-04-13 18:12:21.431 24367-24367/com.nishant.mathsample W/hant.mathsampl: Accessing hidden method Landroid/view/textclassifier/logging/SmartSelectionEventTracker$SelectionEvent;->selectionModified(IILandroid/view/textclassifier/TextClassification;)Landroid/view/textclassifier/logging/SmartSelectionEventTracker$SelectionEvent; (light greylist, reflection)
2020-04-13 18:12:21.431 24367-24367/com.nishant.mathsample W/hant.mathsampl: Accessing hidden method Landroid/view/textclassifier/logging/SmartSelectionEventTracker$SelectionEvent;->selectionModified(IILandroid/view/textclassifier/TextSelection;)Landroid/view/textclassifier/logging/SmartSelectionEventTracker$SelectionEvent; (light greylist, reflection)
2020-04-13 18:12:21.431 24367-24367/com.nishant.mathsample W/hant.mathsampl: Accessing hidden method Landroid/view/textclassifier/logging/SmartSelectionEventTracker$SelectionEvent;->selectionAction(III)Landroid/view/textclassifier/logging/SmartSelectionEventTracker$SelectionEvent; (light greylist, reflection)
2020-04-13 18:12:21.431 24367-24367/com.nishant.mathsample W/hant.mathsampl: Accessing hidden method Landroid/view/textclassifier/logging/SmartSelectionEventTracker$SelectionEvent;->selectionAction(IIILandroid/view/textclassifier/TextClassification;)Landroid/view/textclassifier/logging/SmartSelectionEventTracker$SelectionEvent; (light greylist, reflection)
2020-04-13 18:12:21.504 24367-24418/com.nishant.mathsample W/cr_media: Requires BLUETOOTH permission
2020-04-13 18:12:21.596 24367-24367/com.nishant.mathsample D/AndroidRuntime: Shutting down VM


    --------- beginning of crash
2020-04-13 18:12:21.599 24367-24367/com.nishant.mathsample E/AndroidRuntime: FATAL EXCEPTION: main
    Process: com.nishant.mathsample, PID: 24367
    java.lang.RuntimeException: Unable to start activity ComponentInfo{com.nishant.mathsample/com.nishant.mathsample.MainActivity}: java.lang.IllegalStateException: The specified child already has a parent. You must call removeView() on the child's parent first.
        at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2913)
        at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3048)
        at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:78)
        at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:108)
        at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:68)
        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1808)
        at android.os.Handler.dispatchMessage(Handler.java:106)
        at android.os.Looper.loop(Looper.java:193)
        at android.app.ActivityThread.main(ActivityThread.java:6669)
        at java.lang.reflect.Method.invoke(Native Method)
        at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:493)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:858)
     Caused by: java.lang.IllegalStateException: The specified child already has a parent. You must call removeView() on the child's parent first.
        at android.view.ViewGroup.addViewInner(ViewGroup.java:5034)
        at android.view.ViewGroup.addView(ViewGroup.java:4865)
        at android.view.ViewGroup.addView(ViewGroup.java:4805)
        at android.view.ViewGroup.addView(ViewGroup.java:4778)
        at com.nishant.mathsample.MainActivity.onCreate(MainActivity.java:37)
        at android.app.Activity.performCreate(Activity.java:7136)
        at android.app.Activity.performCreate(Activity.java:7127)
        at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1271)
        at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2893)
        at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3048) 
        at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:78) 
        at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:108) 
        at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:68) 
        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1808) 
        at android.os.Handler.dispatchMessage(Handler.java:106) 
        at android.os.Looper.loop(Looper.java:193) 
        at android.app.ActivityThread.main(ActivityThread.java:6669) 
        at java.lang.reflect.Method.invoke(Native Method) 
        at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:493) 
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:858) 
2020-04-13 18:12:21.630 24367-24367/com.nishant.mathsample I/Process: Sending signal. PID: 24367 SIG: 9
javascript android webview click
1个回答
0
投票

您可以将MathView视为任何其他视图,并在其上设置setOnClickListener。

您的活动使用的onCreate()内:-

 MathView mathView=new MathView(this);
    FrameLayout rootLayout=findViewById(R.id.root_layout);
    rootLayout.addView(mathView);
    mathView.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            Toast.makeText(MainActivity.this,"Clicked",Toast.LENGTH_LONG).show();
        }
    });

这是您的示例activity_main.xml

<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent">

<FrameLayout
    android:id="@+id/root_layout"
    android:layout_width="match_parent"
    android:layout_height="match_parent" />
</FrameLayout>
© www.soinside.com 2019 - 2024. All rights reserved.