2015-07-06 21 views
9

Ho un WebView e una visualizzazione personalizzata nativa che voglio aggiungere sotto il WebView. Ho provato a racchiudere lo WebView all'interno di uno ScrollView, e mentre questo fa esattamente quello che voglio, le prestazioni di scorrimento sono veramente ridotte e se un utente lancia la scroll toccando lo schermo non ferma l'avventura come dovrebbe.Aggiungere la visualizzazione del piè di pagina nativa alla visualizzazione Web

L'altro approccio che stavo pensando era quello di gonfiare il WebView in un involucro FrameLayout con la mia vista piè di pagina in cima alla WebView, quindi in qualche modo estendere l'altezza WebView per accogliere la dimensione piè di pagina, spingere la vista piè di pagina alla fine del Altezza WebView s e quindi monitorare lo scorrimento di WebView per spostare il piè di pagina con esso.

Ho impostato la classe base, il mio problema è estendere il contenuto scorrevole in WebView e quindi spingere il piè di pagina nella parte inferiore del contenuto di WebView s; il problema principale è che WebView non è la tipica vista di Android e il contenuto della pagina viene caricato in modo asincrono (e quindi la dimensione del contenuto cambia).

Come è possibile estendere il contenuto scorrevole di WebView? E come posso impostare il piè di pagina nativo sotto il contenuto di WebView?

EDIT:

Io in realtà non utilizzare XML, la vista è costruito nel codice in questo modo:

public class WebViewWithFooter extends FrameLayout { 

private ObservableWebView mWebView;//webview with scroll methods overridden for access 
private FrameLayout mFooterContainer; 

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


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


public WebViewWithFooter(Context context, AttributeSet attrs, int defStyle) { 
    super(context, attrs, defStyle); 
    init(); 
} 

@TargetApi(Build.VERSION_CODES.LOLLIPOP) 
public WebViewWithFooter(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) { 
    super(context, attrs, defStyleAttr, defStyleRes); 
    init(); 
} 


private void init() { 

    FrameLayout.LayoutParams footerParams = new LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT, Gravity.BOTTOM); 
    FrameLayout.LayoutParams webviewParams = new LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT); 
    mWebView = new ObservableWebView(getContext()); 

    mFooterContainer = new FrameLayout(getContext()); 

    addView(mWebView, webviewParams); 
    addView(mFooterContainer, footerParams); 
} 
} 
+0

potresti mostrare il tuo layout xml? – eduyayo

+0

modificato il codice sopra con la mia classe (non c'è xml dato che è costruito nel codice) – AndroidNoob

+0

forse si può considerare di creare il proprio gruppo di viste personalizzato il cui compito è quello di impaginare la vista web e il piè di pagina. Mi sento come se volessi un controllo esatto del modo in cui hai descritto, la soluzione migliore è fare il layout da solo. –

risposta

5

Wrap un semplice Webview, con un piè di pagina (LinearLayout, RelativeLayout, ecc) all'interno un ObservableScrollView, anziché un ObservableWebView. Non posso entrare nei dettagli poiché non hai aggiunto alcun file di layout.

EDIT:

Activity.xml:

<LinearLayout 
    android:layout_width="match parent" 
    android:layout_height="match parent" 
    android:orientation="vertical"> 
    <com.github.ksoichiro.android.observablescrollview.ObservableScrollView 
      android:id="@+id/viewObj" 
      android:layout_width="match parent" 
      android:layout_height="wrap_content"> 
    <!-- Webview and footer programatically added here --> 
    </com.github.ksoichiro.android.observablescrollview.ObservableScrollView 
</LinearLayout> 

Activity.java:

FrameLayout.LayoutParams footerParams = new LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT, Gravity.BOTTOM); 
FrameLayout.LayoutParams webviewParams = new LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT); 

mWebView = new WebView(getContext()); 
mFooterContainer = new FrameLayout(getContext()); 

mObservableScrollView = (ObservableScrollView) findViewbyId(R.id.viewObj); 
mObservableScrollView.addView(mWebView, webviewParams); 
mObservableScrollView.addView(mFooterContainer, footerParams); 
+0

Se hai letto correttamente la domanda avresti visto che ho già provato e testato il wrapping della webview e del piè di pagina in una scrollview, e mentre funziona, le prestazioni di scorrimento sono molto basse, da qui la mia richiesta di un diverso approccio – AndroidNoob

+0

Sì, ho visto che . Dal codice parziale, ho capito che stai usando un ObservableWebView e allegando i callback. Invece, allega le tue callback a ObservableScrollView. – prakharsingh95

3

ho raggiunto questo codice XML layout utilizzando come segue:

<TextView 
     android:id="@+id/about_text" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:textAppearance="?android:textAppearanceMedium" 
     /> 

    <TextView 
     android:id="@+id/readme_header" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:text="@string/changelog_text" /> 
    <WebView 
     android:id="@+id/readme_content" 
     android:layout_width="match_parent" 
     android:layout_height="0dp" 
     android:layout_weight="2" 
     android:scrollbarAlwaysDrawVerticalTrack="true" 
     android:scrollbars="vertical" /> 

    <LinearLayout 
     android:layout_width="match_parent" 
     android:layout_height="0dp" 
     android:layout_weight="1" 
     android:layout_gravity="center_horizontal" 
     android:orientation="horizontal"> 

     <FrameLayout 
      android:layout_width="0dp" 
      android:layout_height="match_parent" 
      android:layout_gravity="center_vertical" 
      android:layout_weight="0.5" /> 

     <cu.tellistico.ImageButtonText 
      android:id="@+id/btn_gift" 
      android:layout_width="0dp" 
      android:layout_height="match_parent" 
      android:layout_weight="1" 

      android:contentDescription="@string/btn_donate_info" 
      custom:buttonBackground="@drawable/states_orange" 
      android:src="@drawable/ic_gift" 
      android:text="Donar" 
      android:textColor="@color/text_orange" /> 

     <FrameLayout 
      android:layout_width="0dp" 
      android:layout_height="match_parent" 
      android:layout_gravity="center_vertical" 
      android:layout_weight="0.5"/> 
    </LinearLayout> 

</LinearLayout> 

Di seguito il testo blu c'è un Webview scorrevole, e un piè di pagina pulsante. È valido per te?

0

Se ho capito bene, stai provando a mostrare/nascondere il piè di pagina quando lo WebView viene fatto scorrere, giusto? Se è così, non penso che tu abbia bisogno di una libreria di terze parti per raggiungere questo obiettivo. È possibile estendere lo WebView e sovrascrivere il metodo onScrollChanged(). Viene chiamato quando lo scroll orizzontale o verticale sta cambiando. Se lo scroll verticale è cambiato ed è positivo, mostra il footer, altrimenti - nascondi.

Un'altra idea: hai provato la nuova libreria di progettazione spedita da Google? Esiste un modo conveniente per ottenere questo comportamento per ListView o RecyclerView.

0

Correggetemi se ho torto, ma fondamentalmente volete avere la vostra vista a piè di pagina in fondo alla pagina e la vostra webview occupa tutto lo spazio che rimane?

Perché non basta mettere la visualizzazione del piè di pagina in un RelativeLayout con alignParentBottom impostato su true, quindi avere la tua WebView sopra la tua vista personalizzata, con l'altezza impostata su matchParent?