Как да накарате бутоните да се показват над WebView

Наясно съм, че този въпрос е задаван и преди, но опитах всяко „решение“ на другите въпроси, но все още не успях да постигна това, което се опитвам да направя. Търсих и търсих, опитвах и опитвах. Моля те прости ми. Просто искам да покажа моя ред от бутони над моя WebView, така че да е съвместим с останалите дейности в моето приложение (всички те имат ред от бутони в горната част). Изглежда, че опитах всяка възможна комбинация от оформления, но без резултат. Показва се правилно в графичното оформление (Eclipse), но на телефона и емулатора показва само WebView, цял екран, без бутони... Всяка помощ ще бъде много оценена!

Ето моя xml:

    <?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" >

    <LinearLayout
        android:orientation="horizontal" 
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:id="@+id/menu_panel">


                    <ImageButton
                        android:id="@+id/bHomeMenu"
                        android:layout_margin="-8dip"
                        android:layout_width="65dp"
                        android:layout_height="90dp"
                        android:background="@drawable/menu_btn_hcu_light_blue"
                        android:src="@drawable/icon_menu_home"
                        android:adjustViewBounds="true"
                        android:scaleType="centerInside"
                        style="@style/ButtonText"
                        android:textSize="13sp"
                        android:text="Home" />

                    <ImageButton
                        android:id="@+id/bItsMe247Menu"
                        android:layout_toRightOf="@+id/bHomeMenu"
                        android:layout_margin="-8dip"
                        android:layout_width="65dp"
                        android:layout_height="90dp"
                        android:background="@drawable/menu_btn_selected_hcu_light_blue"
                        android:src="@drawable/icon_menu_login"
                        android:adjustViewBounds="true"
                        android:scaleType="centerInside"
                        style="@style/ButtonText"
                        android:textSize="13sp"
                        android:text="It'sMe" />

                    <ImageButton
                        android:id="@+id/bFindUsMenu"
                        android:layout_toRightOf="@+id/bItsMe247Menu"
                        android:layout_margin="-8dip"
                        android:layout_width="65dp"
                        android:layout_height="90dp"
                        android:background="@drawable/menu_btn_hcu_light_blue"
                        android:src="@drawable/icon_menu_find_us"
                        android:adjustViewBounds="true"
                        android:scaleType="centerInside"
                        style="@style/ButtonText"
                        android:textSize="13sp"
                        android:text="FindUs" />

                    <ImageButton
                        android:id="@+id/bEmailMenu"
                        android:layout_toRightOf="@+id/bFindUsMenu"
                        android:layout_margin="-8dip"
                        android:layout_width="65dp"
                        android:layout_height="90dp"
                        android:background="@drawable/menu_btn_hcu_light_blue"
                        android:src="@drawable/icon_menu_email"
                        android:adjustViewBounds="true"
                        android:scaleType="centerInside"
                        style="@style/ButtonText"
                        android:textSize="13sp"
                        android:text="Email" />

                    <ImageButton
                        android:id="@+id/bRatesMenu"
                        android:layout_toRightOf="@+id/bEmailMenu"
                        android:layout_margin="-8dip"
                        android:layout_width="65dp"
                        android:layout_height="90dp"
                        android:background="@drawable/menu_btn_hcu_light_blue"
                        android:src="@drawable/icon_menu_rates"
                        android:adjustViewBounds="true"
                        android:scaleType="centerInside"
                        style="@style/ButtonText"
                        android:textSize="13sp"
                        android:text="Rates" />




    </LinearLayout>


                        <WebView xmlns:android="http://schemas.android.com/apk/res/android"
                            android:id="@+id/wvItsMe"
                            android:layout_width="fill_parent"
                            android:layout_height="0dp"
                            android:layout_weight="1" />


</LinearLayout>

РЕДАКТИРАНЕ: Ето моя Java код и бележка под него:

    package com.dummyapp.app;

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.MotionEvent;
import android.view.Window;
import android.webkit.WebChromeClient;
import android.webkit.WebView;
import android.webkit.WebViewClient;
import android.widget.Toast;

import com.dummyapp.app.SimpleGestureFilter.SimpleGestureListener;

public class ItsMe247 extends Activity implements SimpleGestureListener{

    private SimpleGestureFilter detector;

    private WebView itsMeLogin;

//  ImageButton menuHome, menuFindUs, menuEmail, menuRates;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        // TODO Auto-generated method stub
        super.onCreate(savedInstanceState);
        //setContentView(R.layout.itsme247);

//      menuHome = (ImageButton)findViewById(R.id.bHomeMenu);
//      menuFindUs = (ImageButton)findViewById(R.id.bFindUsMenu);
//      menuEmail = (ImageButton)findViewById(R.id.bEmailMenu);
//      menuRates = (ImageButton)findViewById(R.id.bRatesMenu);



        detector = new SimpleGestureFilter(this,this);

        itsMeLogin = new WebView(this);

        Toast.makeText(this, "Just Swipe To Exit", Toast.LENGTH_LONG).show();


        itsMeLogin.getSettings().setJavaScriptEnabled(true); // JavaScript enabled

        getWindow().requestFeature(Window.FEATURE_PROGRESS); // Show progress bar of page loading

        final Activity itsMeActivity = this;


        itsMeLogin.setWebChromeClient(new WebChromeClient() {

            public void onProgressChanged(WebView view, int progress){

                // Activities and WebViews measure progress with different scales.
                // The progress meter will automatically disappear when we reach 100%
                itsMeActivity.setProgress(progress * 100);

            }

        });

        itsMeLogin.setWebViewClient(new WebViewClient(){

            public void onReceivedError(WebView view, int errorCode, String description, String failingUrl){

                Toast.makeText(itsMeActivity, "Oh no! " + description, Toast.LENGTH_SHORT).show();

            }


        });

        itsMeLogin.loadUrl("http://www.google.com");
        setContentView(itsMeLogin);


//      itsMeLogin.setWebViewClient(new WebViewClient() {
//          @Override
//          public boolean shouldOverrideUrlLoading(final WebView view, final String url) {
//              return super.shouldOverrideUrlLoading(view, url);
//          }
//      });



//******************* MENU BUTTONS START HERE ********************************************************//        

//      menuRates.setOnClickListener(new View.OnClickListener() {
//          
//          public void onClick(View v) {
//              // TODO Auto-generated method stub
//              Intent ratesIntent = new Intent(ItsMe247.this, Rates.class);
//              ItsMe247.this.startActivity(ratesIntent);
//              
//          }
//          
//      });
//      
//      
//      menuFindUs.setOnClickListener(new View.OnClickListener() {
//          
//          public void onClick(View v) {
//              // TODO Auto-generated method stub
//              Intent contactIntent = new Intent(ItsMe247.this, Contact.class);
//              ItsMe247.this.startActivity(contactIntent);
//              
//          }
//      });
//      
//      menuEmail.setOnClickListener(new View.OnClickListener() {
//          
//          public void onClick(View v) {
//              // TODO Auto-generated method stub
//              Intent emailIntent = new Intent(ItsMe247.this, Email.class);
//              ItsMe247.this.startActivity(emailIntent);
//              
//
//          }
//      });
//      
//      menuHome.setOnClickListener(new View.OnClickListener() {
//          
//          public void onClick(View v) {
//              // TODO Auto-generated method stub
//              Intent itsMeIntent = new Intent(ItsMe247.this, MainActivity.class);
//              ItsMe247.this.startActivity(itsMeIntent);
//          }
//      });


//***************************** MENU BUTTONS END HERE ********************************************************//


    }//end onCreate method


    @Override 
      public boolean dispatchTouchEvent(MotionEvent me){ 
        this.detector.onTouchEvent(me);
       return super.dispatchTouchEvent(me); 
      }


        public void onSwipe(int direction) {

                   switch (direction) {

                   case SimpleGestureFilter.SWIPE_RIGHT: 

                       Intent funIntent = new Intent(ItsMe247.this, MainActivity.class);
                       ItsMe247.this.startActivity(funIntent);
                       //ItsMe247.this.finish();

                       break;

                   case SimpleGestureFilter.SWIPE_LEFT:  

                       Intent funIntent2 = new Intent(ItsMe247.this, Contact.class);
                       ItsMe247.this.startActivity(funIntent2);
                       //ItsMe247.this.finish();

                       break;

                   case SimpleGestureFilter.SWIPE_DOWN:  

                       break;

                   case SimpleGestureFilter.SWIPE_UP:   

                       break;                                               
                   } 

        }//end onSwipe method

      public void onDoubleTap() {

      }


}

Коментирах всички бутони на менюто (бутоните, които се опитвам да накарам да се показват над webview), докато най-накрая ги накарам да се показват чрез xml. Въпреки това, когато декоментирам бутоните и техните слушатели, приложението се срива, когато се опитвам да вляза в тази дейност.


person LargeGlasses    schedule 13.10.2012    source източник
comment
Опитайте да използвате RelativeLayout като родителско оформление вместо LinearLayout   -  person Zombie    schedule 13.10.2012
comment
@BobbeHoddi този подход всъщност не работи. Опитах много различни комбинации, използвайки RelativeLayout и с други оформления, но те също не работят. Благодаря все пак!   -  person LargeGlasses    schedule 15.10.2012


Отговори (1)


Вашият код не използва вашето XML оформление, вие създавате свой собствен WebView в код и го задавате като изглед, така че да заобикаля напълно вашия XML.

Предоставих няколко промени тук, които трябва да го накарат да работи. Обърнете специално внимание на реда setContentView и следващия ред, те използват XML оформлението. Може да се наложи да промените името на оформлението (R.layout.whatever) и идентификатора на уеб изгледа (R.id.webview). Възможно е да има няколко грешки при синтактичния анализ от моето поставяне тук, може да е пропусната затваряща скоба. Изтрих голяма част от вашия коментиран код, само за да го опростя.

@Override
protected void onCreate(Bundle savedInstanceState) {

    super.onCreate(savedInstanceState);

    setContentView( R.layout.xmlLayout );

    itsMeLogin = (WebView)findViewById( R.id.webview );

    detector = new SimpleGestureFilter(this,this);

    Toast.makeText(this, "Just Swipe To Exit", Toast.LENGTH_LONG).show();


    itsMeLogin.getSettings().setJavaScriptEnabled(true); // JavaScript enabled

    getWindow().requestFeature(Window.FEATURE_PROGRESS); // Show progress bar of page loading

    final Activity itsMeActivity = this;


    itsMeLogin.setWebChromeClient(new WebChromeClient() {

        public void onProgressChanged(WebView view, int progress){

            // Activities and WebViews measure progress with different scales.
            // The progress meter will automatically disappear when we reach 100%
            itsMeActivity.setProgress(progress * 100);

        }

    });

    itsMeLogin.setWebViewClient(new WebViewClient(){

        public void onReceivedError(WebView view, int errorCode, String description, String failingUrl){

            Toast.makeText(itsMeActivity, "Oh no! " + description, Toast.LENGTH_SHORT).show();

        }


    });

    itsMeLogin.loadUrl("http://www.google.com");
}

Ето и моя XML файл от подобно оформление, въпреки че вашият вероятно ще работи с редактирания код.

<?xml version="1.0" encoding="utf-8"?>
<GridLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:columnCount="3"
    android:layout_height="match_parent"
    android:layout_width="match_parent"
>
<EditText
    android:ems="4"
    android:imeOptions="actionNext"
    android:inputType="number"
    android:layout_gravity="center_horizontal"
    android:maxLength="4"
    android:selectAllOnFocus="true"
/>
<EditText
    android:ems="4"
    android:imeOptions="actionDone"
    android:inputType="textCapCharacters|textNoSuggestions"
    android:layout_gravity="center_horizontal"
    android:maxLength="3"
    android:selectAllOnFocus="true"
/>
<Button android:id="@+id/submit"
/>
<WebView android:id="@+id/webview"
    android:layout_columnSpan="3"
    android:layout_gravity="fill"
    android:layout_height="0dp"
    android:layout_width="0dp"
/>
</GridLayout>
person Ralgha    schedule 13.10.2012
comment
Все още опитвам вашето предложение, но засега не работи. Въпреки това трябваше да добавя tools:ignore=NewApi, за да изчезне грешка при опит за използване на GridLayout. Може би това има нещо общо... - person LargeGlasses; 15.10.2012
comment
Ако разработвате за версия преди API ниво 14, ще трябва да използвате библиотеката за съвместимост. Вижте този въпрос за това как да направите това. - person Ralgha; 15.10.2012
comment
Благодаря. Някаква представа как да изпълните стъпки 2 и 3 в приетия отговор във вашата връзка? Добавих проекта GridLayout към eclipse, но как да направите проекта като библиотека и да добавите този проект на библиотека към вашия работен проект?? - person LargeGlasses; 16.10.2012
comment
Този въпрос трябва да помогне с това. Предпоследният отговор е най-лаконичен. - person Ralgha; 16.10.2012
comment
Добре, приближавам се. Конзолата ми дава тази грешка: [2012-10-15 14:37:20 - android-support-v7-gridlayout] Не мога да разреша целта "android-7" и имам голям червен удивителен знак до библиотечен проект, който импортирах, както и до основния ми проект. - person LargeGlasses; 16.10.2012
comment
Мисля, че трябва да изтеглите Android 2.1 SDK платформата във вашия SDK мениджър, за да поправите това. - person Ralgha; 16.10.2012
comment
Това отне удивителните знаци! Благодаря! Сега ще видя дали мога да накарам GridLayout да прави това, което трябва. Ще те уведомя. О, и трябва ли да добавя нещо към моя манифест, за да използвам GridLayout? - person LargeGlasses; 16.10.2012
comment
Все още не работи. Дори копирах и поставих вашия код, за да видя дали ще се покаже правилно, когато се стартира в емулатора, но не го направи. За други неща в приложението ми трябваше да поставя ‹uses-sdk android:minSdkVersion=7 И android:targetSdkVersion=15 /› в моя манифест и поради това трябва да поставя tools:ignore=NewApi в дефиницията на моя GridLayout в xml. Възможно ли е това да е проблемът?? - person LargeGlasses; 16.10.2012
comment
Ако копирате/поставите моя код, ще трябва да промените match_parent на fill_parent за по-ниските нива на API и да добавите пространството на имената на библиотеката към GridLayout, въпреки че не мисля, че дори ще работи, без да правите това, така че може би вече сте го направили. Можете ли да поставите кода, който показва оформлението във въпроса? - person Ralgha; 16.10.2012
comment
Чакай, така че трябва ли също да направя нещо в кода на Java, за да работи GridLayout? - person LargeGlasses; 16.10.2012
comment
Не, просто искам да видя дали има нещо, което се случва в кода ви, защото ако просто сте копирали моя XML, трябваше да работи. - person Ralgha; 16.10.2012
comment
Добре, уверих се, че всичко е същото като вашите редакции. Приложението работи, но все още се срива при опит за влизане в дейността.... Наистина мислех, че това щеше да реши проблема... :/ - person LargeGlasses; 16.10.2012
comment
Коментирайте всичко между itsMeLogin = (WebView)findViewById(R.id.webview); и itsMeLogin.loadUrl(google.com); Това трябва да работи и да ви каже дали оформлението работи. - person Ralgha; 16.10.2012
comment
Добре, това ме отведе до дейността, С бутони в горната част, но веднага се изключи от тази дейност и зареди уеб изглед от само себе си. Изглежда почти стигнахме! - person LargeGlasses; 16.10.2012
comment
Това е нещо във вашия код, което прави това. Коментирайте всичко освен super.onCreate(savedInstanceState); setContentView( R.layout.xmlLayout ); и ще видите оформлението. Другият проблем не е свързан с вашето оформление. - person Ralgha; 16.10.2012
comment
getWindow().requestFeature(Window.FEATURE_PROGRESS) беше причината да се срива. Достигнах го до момента, в който показва моето оформление, но след около 8 секунди пише, че уеб страницата не е налична. Накарах го да остане в моето оформление, като разкоментирах setWebViewclient, който съдържа метода shouldOverrideUrlLoading. Не съм сигурен защо не зарежда URL адреса ми. - person LargeGlasses; 16.10.2012
comment
Хей, всъщност само моят емулатор трябваше да бъде изключен и рестартиран отново! Сега работи!! Търсих това решение от месеци!! Благодаря ви много за помощта/решението!!! - person LargeGlasses; 16.10.2012