2015-07-06 20 views
9

Tôi có một số WebView và chế độ xem tùy chỉnh gốc mà tôi muốn thêm bên dưới WebView. Tôi đã cố gắng gói WebView bên trong một ScrollView, và trong khi đó không chính xác những gì tôi muốn, hiệu suất di chuyển thực sự là laggy và nếu một người dùng flings di chuyển khai thác màn hình không dừng fling như nó nên.Thêm chế độ xem chân trang gốc vào chế độ xem web

Cách tiếp cận khác mà tôi đã suy nghĩ là để thổi phồng các WebView thành một wrapper FrameLayout với quan điểm chân của tôi trên đầu trang của WebView, sau đó bằng cách nào đó kéo dài chiều cao WebView để chứa kích thước chân, đẩy cái nhìn chân để kết thúc Chiều cao WebView s và sau đó theo dõi cuộn của WebView để di chuyển chân trang theo nó.

Tôi đã thiết lập lớp cơ sở, sự cố của tôi đang mở rộng nội dung có thể cuộn trong WebView và sau đó đẩy chân trang vào cuối nội dung của WebView; vấn đề chính là WebView không phải là chế độ xem Android thông thường của bạn và tải nội dung trang không đồng bộ (và do đó kích thước nội dung thay đổi).

Làm cách nào để mở rộng nội dung có thể cuộn của WebView? Và làm cách nào tôi có thể đặt chân trang gốc bên dưới nội dung WebView?

EDIT:

Tôi không thực sự sử dụng xml, quan điểm được xây dựng trong mã như vậy:

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

bạn có thể hiển thị bố cục xml của mình không? – eduyayo

+0

đã chỉnh sửa mã ở trên với lớp của tôi (không có xml khi được xây dựng trong mã) – AndroidNoob

+0

có thể bạn có thể xem xét tạo nhóm chế độ xem tùy chỉnh của bạn có bố cục chế độ xem và chân trang web. Tôi cảm thấy như nếu bạn muốn kiểm soát chính xác cách bạn mô tả, đặt cược tốt nhất là tự mình làm bố cục. –

Trả lời

5

Quấn một đơn giản Webview, cùng với một chân (LinearLayout, RelativeLayout, vv) bên trong an ObservableScrollView, thay vì một số ObservableWebView. Tôi không thể đi vào chi tiết vì bạn chưa thêm bất kỳ tệp bố cục nào.

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

Nếu bạn đọc câu hỏi đúng cách, bạn sẽ thấy tôi đã thử và kiểm tra gói webview và footer trong một scrollview, và trong khi nó hoạt động, hiệu suất cuộn rất laggy, do đó yêu cầu của tôi cho một cách tiếp cận khác nhau – AndroidNoob

+0

Có tôi thấy rằng . Từ mã một phần, tôi đã thu thập rằng bạn đang sử dụng ObservableWebView và đính kèm các cuộc gọi lại. Thay vào đó, hãy gắn callbacks của bạn vào ObservableScrollView. – prakharsingh95

3

tôi đạt được sử dụng mã xml bố trí này như sau:

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

Dưới dòng chữ màu xanh có một webview cuộn, và một nút chân. Điều này có hợp lệ với bạn không?

0

Nếu tôi đã hiểu bạn đúng, bạn đang cố gắng hiển thị/ẩn chân trang khi di chuyển WebView, phải không? Nếu vậy, tôi không nghĩ bạn cần thư viện của bên thứ ba để đạt được điều này. Bạn có thể mở rộng WebView và ghi đè phương thức onScrollChanged(). Nó được gọi khi cuộn ngang hoặc dọc đang thay đổi. Nếu cuộn dọc đã thay đổi và nó là tích cực, hãy hiển thị chân trang, nếu không - hãy ẩn nó.

Một ý tưởng khác: bạn đã thử thư viện thiết kế mới do Google cung cấp chưa? Có một cách thuận tiện để đạt được hành vi như vậy cho ListView hoặc RecyclerView.

0

Sửa lỗi nếu tôi sai, nhưng về cơ bản bạn muốn có chế độ xem chân trang ở cuối trang và chế độ xem web của bạn chiếm hết không gian còn lại?

Tại sao bạn không đặt chế độ xem chân trang của mình bên trong RelativeLayout với alignParentBottom được đặt thành true, sau đó có WebView của bạn ở trên chế độ xem tùy chỉnh, với chiều cao được đặt thành matchParent?

Các vấn đề liên quan