Как установить кнопку на линейное или относительное расположение с веб-просмотром - PullRequest
0 голосов
/ 30 ноября 2018

Полное назначение моего приложения заключается в том, что у меня в представлении «Обнаружение» в качестве первого представления содержится текст редактирования.Когда текст редактирования текста изменится, он перейдет к моему представлению activity_main.Если action_main содержит только webview, все функции в порядке.Но мне нужно добавить кнопку.Произошла ошибка.

Я хочу установить какую-то кнопку с веб-просмотром , например,

Но когда я запускаю свое приложение, появляется ошибка

E / AndroidRuntime: ФАКТИЧЕСКОЕ ИСКЛЮЧЕНИЕ: основной Процесс: 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)

Я попытался использовать относительное расположение, но ошибка все равно произошла.Вот мой код 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);
    }
}

1 Ответ

0 голосов
/ 30 ноября 2018

Ответ прост: вы реализовали два 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);Удалить это

...