【问题标题】:How to set button on linearlayout or relativelayout with webview如何使用 webview 在线性布局或相对布局上设置按钮
【发布时间】:2019-05-02 09:22:00
【问题描述】:

我的应用程序的完整功能是我有一个 Detect 视图,其中包含一个 edittext 作为第一个视图。当 edittext 文本发生变化时,它将转到我的 activity_main 视图。如果activity_main 只包含webview,所有功能都可以。但我需要添加一些按钮。错误发生了。

我想用 webview 设置一些按钮 just like this

但是当我运行我的应用程序时,会出现错误

E/AndroidRuntime: 致命异常: main 进程:e.peter.laucher_compal,PID:10188 java.lang.RuntimeException:无法启动活动 ComponentInfo{e.peter.laucher_compal/e.peter.laucher_compal.MainActivity}:java.lang.IllegalStateException:指定的孩子已经有一个父母。您必须首先在孩子的父母上调用 removeView()。 在 android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2665) 在 android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2726) 在 android.app.ActivityThread.-wrap12(ActivityThread.java) 在 android.app.ActivityThread$H.handleMessage(ActivityThread.java:1477) 在 android.os.Handler.dispatchMessage(Handler.java:102) 在 android.os.Looper.loop(Looper.java:154) 在 android.app.ActivityThread.main(ActivityThread.java:6119) 在 java.lang.reflect.Method.invoke(本机方法) 在 com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:886) 在 com.android.internal.os.ZygoteInit.main(ZygoteInit.java:776)

我尝试使用 relativelayout,但仍然发生相同的错误。 这是我的 activity_main.xml 代码。

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_height="match_parent"
    android:layout_width="match_parent"
    android:orientation="vertical">
    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="horizontal">
    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:id="@+id/button_web"
        android:text="Web"/>

    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:id="@+id/button_setting"
        android:text="Setting"/>

        <Button
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:id="@+id/button_uninstall"
            android:text="Uninstall"/>
    </LinearLayout>
<WebView xmlns:android="http://schemas.android.com/apk/res/android"
        android:id="@+id/webview"
        android:layout_width="match_parent"
        android:layout_height="match_parent">
</WebView>
</LinearLayout>

这是我的java代码。(按钮功能部分已标记)

public class MainActivity extends AppCompatActivity {

    //Main code
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        //Perform web view
        WebView webview = (WebView) findViewById(R.id.webview);
        WebSettings webSettings = webview.getSettings();
        webSettings.setJavaScriptEnabled(true);
        setContentView(webview);
        webview.setWebViewClient(new WebViewClient());
        webview.loadUrl("http://www.youtube.com");
        setDesktopMode(webview, true);

        //Web button click event
        /*Button button_web = (Button)findViewById(R.id.button_web);
        button_web.setOnClickListener(new Button.OnClickListener(){
            @Override
            public void onClick(View v){
                Intent intent = new Intent();
                intent.setClass(MainActivity.this, MainActivity.class);
                startActivity(intent);
                MainActivity.this.finish();
            }
        });

        Button button_setting = (Button)findViewById(R.id.button_setting);

        //Uninstall button click event
        Button button_uninstall = (Button)findViewById(R.id.button_uninstall);
        button_uninstall.setOnClickListener(new Button.OnClickListener() {
            @Override
            public void onClick(View view) {
                Intent intent = new Intent(Intent.ACTION_DELETE);
                intent.setData(Uri.parse("package:e.peter.laucher_compal"));
                startActivity(intent);
            }
        });*/
    }

    public void setDesktopMode(WebView webView, boolean enabled){
        String newUserAgent = webView.getSettings().getUserAgentString();
        if(enabled){
            try{
                String ua = webView.getSettings().getUserAgentString();
                String androidOSString = webView.getSettings().getUserAgentString().substring(ua.indexOf("("), ua.indexOf(")") + 1);
                newUserAgent = webView.getSettings().getUserAgentString().replace(androidOSString, "(X11; Linux x86_64)");
            } catch (Exception e){
                e.printStackTrace();
            }
        } else {
            newUserAgent = null;
        }

        webView.getSettings().setUserAgentString(newUserAgent);
        webView.getSettings().setUseWideViewPort(enabled);
        webView.getSettings().setLoadWithOverviewMode(enabled);
        webView.reload();
    }

    public boolean onKeyDown(int keyCode, KeyEvent event){
        if(keyCode == KeyEvent.KEYCODE_BACK){
            Intent intent = new Intent();
            intent.setClass(MainActivity.this, Detect.class);
            startActivity(intent);
            MainActivity.this.finish();

            return true;
        }
        return super.onKeyDown(keyCode, event);
    }
}

【问题讨论】:

    标签: android android-webview android-linearlayout android-button android-relativelayout


    【解决方案1】:

    答案很简单,你实现了两个 setContentView

     //Perform web view
        WebView webview = (WebView) findViewById(R.id.webview);
        WebSettings webSettings = webview.getSettings();
        webSettings.setJavaScriptEnabled(true);
        setContentView(webview);//remove this one
        webview.setWebViewClient(new WebViewClient());
        webview.loadUrl("http://www.youtube.com");
        setDesktopMode(webview, true);
    

    setContentView(webview);删除这个

    【讨论】:

      猜你喜欢
      • 2011-01-31
      • 1970-01-01
      • 1970-01-01
      • 2012-12-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-07-06
      相关资源
      最近更新 更多