2013-05-08 1 views
2

스크롤 : 웹보기는 방지 모두 내가 원하는

  1. 에 포함 된 화면에 조각을 넣어 :
  2. 이 ... 그것의 전체 높이로 확장 웹뷰는
  3. 에 포함
    1. 위와 아래 고정 된 크기의 레이아웃
    2. 레이아웃을 스크롤하십시오 (예 : 전체 높이 webview를 포함한 전체)

이것은 불가능한 것처럼 보입니다. 지금은 Android WebView에서 다른 중요한 버그를 다루는 10 가지 이상의 다른 질문/답변을 읽었으나이 상황을 다루지는 않습니다. 예를 들어, 높이 결코 : - :

그것은 그 (다른 질문에 읽기, 안드로이드 사이트에 현재 고정되지 않은 버그에 대한 링크를 다음에서) 보인다 4

  1. 웹보기의 높이가 항상 잘못 (고정되지 않은 안드로이드이있다 감소)
  2. 순차적 인 안드로이드 릴리스에서 WebView의 스크롤이 끊어 지거나 끊어지지 않고 재분할됩니다 (예 : ScrollView가 제어하는 ​​일부 릴리스, WebView가 제어하는 ​​다른 릴리스, "싸우거나"끊어지는 등)
  3. ScrollView에서 기묘한 조작을 사용하여 out-of-t로 수행해야하는 작업을 수행해야합니다. he-box. 예 : "안드로이드는 : fillViewport는 ="사실은 "(layout_height = fill_parent가"어떻게해야합니까? 응이 정확히 무엇을하지? ")

사람이 비교적 간단하고 일반적인 설정을 달성하기 위해 노력하고 코드가 있습니까 나 '? (물론 "안드로이드 애플 리케이션을 버리고 웹 애플리케이션을 작성하는 것"을 제외하고는 효과가 있을지 모르지만 슬프게도 비현실적입니다.)

참고로 (그리고 비슷한 것을 시도하는 다른 누군가를 위해) 여기 내 레이아웃이 화면을 채 웁니다. 그러나 스크롤 할 수없는 이유는 다음과 같습니다.

<ScrollView xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    android:fillViewport="true" 
> 

    <RelativeLayout 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content"> 

     <!-- page header --> 

     <RelativeLayout 
      android:id="@+id/fragment_detailspage_titletext_layout" 
      android:layout_width="fill_parent" 
      android:layout_height="wrap_content" 
      android:clickable="true" 
      android:visibility="visible" > 

      <include 
       android:id="@+id/fragment_detailspage_titletext_include" 
       layout="@layout/include_textheader" 
       android:visibility="visible" /> 
     </RelativeLayout> 

     <RelativeLayout 
      android:id="@+id/fragment_detailspage_header_layout" 
      android:layout_width="fill_parent" 
      android:layout_height="wrap_content" 
      android:layout_below="@id/fragment_detailspage_titletext_layout" 
      android:clickable="true" 
      android:visibility="visible" > 

      <!-- logo image --> 

      <include 
       android:id="@+id/fragment_detailspage_logoimageheader_include" 
       layout="@layout/include_logoimageheader" /> 
     </RelativeLayout> 

     <!-- page footer --> 

     <RelativeLayout 
      android:id="@+id/fragment_detailspage_footer_layout" 
      android:layout_width="fill_parent" 
      android:layout_height="64dp" 
      android:layout_alignParentBottom="true" 
      android:background="@drawable/generic_button_not_pressed" 
      android:clickable="true" 
      android:visibility="visible" > 

      <!-- 1 buttons --> 

      <include 
       android:id="@+id/fragment_detailspage_bottombuttonstrip1_include" 
       android:layout_width="wrap_content" 
       android:layout_height="64dp" 
       android:layout_centerHorizontal="true" 
       layout="@layout/include_bottombuttonstrip1" /> 
     </RelativeLayout> 

     <!-- page content --> 

     <WebView 
      android:id="@+id/fragment_detailspage_content_web" 
      android:layout_width="fill_parent" 
      android:layout_height="wrap_content" 
      android:layout_above="@id/fragment_detailspage_footer_layout" 
      android:layout_below="@id/fragment_detailspage_header_layout" 
      android:visibility="visible" /> 

    </RelativeLayout> 

</ScrollView> 
+1

이 게시물을 보셨나요? http://stackoverflow.com/a/13353874/801437 –

+0

"이제는 Android WebView의 다양한 치명적인 버그를 다루는 10 가지 이상의 다른 질문/답변을 읽었으나이 상황을 다루지는 않습니다."- 나는 많은 안드로이드 관련 질문에 대답했다. 스크롤 가능한 내용을'ScrollView '에 두는 일은 거의 잘되지 않는다. – CommonsWare

+1

CommonsWare의 관점에서 볼 때, 스크롤 가능한 뷰를 ScrollView에 두지 마십시오. 귀하의 레이아웃은 다소 지나치게 설계된 것처럼 보입니다. 레이아웃에 원하는 레이아웃을 Q에 첨부하면 xml을 단순화하고 ScrollView에서 WebView가 필요하지 않은 이유를 설명 할 수 있습니다. – Blundell

답변

5

아래 이미지에 미안하지만, 매번 스크롤 가능한보기에 스크롤 가능한보기를 넣을 때가 상상됩니다.

enter image description here

onInterceptTouchEventCustomScrollView를 사용하려고하고 무시하십시오

public class CustomScrollView extends ScrollView { 

    public CustomScrollView(Context context) { 
     super(context); 
    } 

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

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

    @Override 
    public boolean onInterceptTouchEvent(MotionEvent e) { 
     super.onInterceptTouchEvent(e); 
     return false; 
    } 


} 
+0

+1 재미있는 이미지로 stackoverflow에서 본 적이있다. – ademar111190

1

거의 이제까지 내가 사용하는 웹/스크롤/사용자 정의 머리글/바닥 글 콤보

의 형태를하고있다되는 앱

WebView 대신 "Web"가 TextView 일 수 있다는 것을 명심하십시오. ScrollView 대신 "Scroll"이 ListView 일 수 있으며 WebView 안에 HTML로 "사용자 정의 머리말/꼬리말 콤보"를 구현할 수 있습니다. 그 중 누구라도 WebView -in-a-ScrollView 시나리오를 벗어날 수 있습니다.일부 응용 프로그램에서는 ScrollView을 사용하며 ScrollView에서는 여전히 더 적은 수의 WebView을 시도합니다.

확실히 더 복잡한 가능성이 있습니다. 예를 들어 Gmail의 대화보기는 WebView이며 다른 항목은 FrameLayout을 사용하여 Z 축에서 계층화되며 여기에서 WebView의 스크롤 이벤트를 추적하여 그 위에 레이어 된 다른 항목의 위치를 ​​변경합니다 (예 : 고정 상단으로 이동하려면 스크롤하면 보낸 사람 및 답장 단추 머리글).

Android 4.1 이상 기기를 사용하는 경우 uiautomatorviewer을 사용하면 이러한 종류의 콘텐츠가 어떻게 구현되는지 알 수 있습니다. 그것이 Gmail이 어떻게 꺼내 가고 있는지를 보여줍니다. 모든 세부 사항을 얻을 수는 없지만 단서를 제공합니다.