将原生页脚视图添加到webview

时间:2015-07-06 10:41:47

标签: android scroll webview footer measure

我有一个WebView和一个我希望在WebView下面添加的原生自定义视图。我已经尝试将WebView包裹在ScrollView内,虽然这正是我想要的,但滚动性能确实很滞后,如果用户甩动滚动点击屏幕并不会停止像它应该的那样投掷。

我想的另一种方法是将WebView充气到包装FrameLayout,我的页脚视图位于WebView之上,然后以某种方式延伸WebView高度为了适应页脚大小,将页脚视图推到WebView高度的末尾,然后监视WebView的滚动以移动页脚。

我已经设置了基类,我的问题是扩展WebView中的可滚动内容,然后将页脚推到WebView内容的底部;主要问题是WebView不是典型的android视图,页面内容是异步加载的(因此内容大小会发生变化)。

如何扩展WebView的可滚动内容?如何将原生页脚设置为WebView内容以下?

编辑:

我实际上并没有使用xml,视图是用这样的代码构建的:

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);
}
}

3 个答案:

答案 0 :(得分:5)

Webview内部使用页脚(LinearLayoutRelativeLayout等)包裹一个简单的ObservableScrollView,而不是ObservableWebView。我无法详细说明,因为您还没有添加任何布局文件。

修改

<强> 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);

答案 1 :(得分:3)

我使用布局xml代码实现了这一点,如下所示:     

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

在蓝色文本下方有一个可滚动的Webview和一个按钮页脚。这对你有效吗?

答案 2 :(得分:0)

如果我错了,请纠正我,但基本上你想在页面底部看到你的页脚视图,你的webview会占用剩下的所有空间吗?

为什么不将您的页脚视图放在RelativeLayout中并且alignParentBottom设置为true,然后让WebView位于自定义视图上方,并将高度设置为matchParent?