डेटा लोड होने के बाद स्क्रॉल करने से लेकर वेबव्यू तक स्क्रॉल करने से कैसे रोकें?


107

इसलिए मुझे एक आकर्षक समस्या है। इस तथ्य के बावजूद कि मैं मैन्युअल रूप से या प्रोग्रामेटिक रूप से मेरे विचार को स्क्रॉल नहीं कर रहा हूं, मेरे वेबव्यू को अपने आप लोड होने के बाद डेटा के बाद स्क्रॉल किया जा रहा है।

मुझे एक दृश्यदर्शी में एक टुकड़ा मिला है। जब मैं पहली बार पेजर लोड करता हूं, तो यह अपेक्षित रूप से काम करता है और सब कुछ दिखाया जाता है। लेकिन एक बार जब मैं डेटा लोड करता हूं तो "पेज को फ्लिप करता हूं" और वेबव्यू पृष्ठ के शीर्ष पर पॉप अप करता है, इसके ऊपर के विचारों को छिपाता है, जो अवांछनीय है।

क्या कोई जानता है कि ऐसा होने से कैसे रोका जाए?

मेरा लेआउट इस तरह दिखता है:

<?xml version="1.0" encoding="utf-8"?>
<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:background="@color/background" >

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="vertical" >

        <TextView
            android:id="@+id/article_title"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:layout_marginRight="10dp"
            android:layout_marginLeft="10dp"
            android:layout_marginTop="10dp"
            android:layout_marginBottom="2dp"
            android:text="Some Title"
            android:textAppearance="?android:attr/textAppearanceLarge"
            android:textColor="@color/article_title"
            android:textStyle="bold" />

        <LinearLayout
            android:id="@+id/LL_Seperator"
            android:layout_width="fill_parent"
            android:layout_height="1dp"
            android:layout_marginLeft="10dp"
            android:layout_marginRight="10dp"
            android:layout_marginTop="5dp"
            android:layout_marginBottom="5dp"
            android:background="@color/text"
            android:orientation="horizontal" >
        </LinearLayout>

        <WebView
            android:id="@+id/article_content"
            android:layout_width="match_parent"
            android:layout_marginRight="10dp"
            android:layout_marginLeft="10dp"
            android:layout_height="wrap_content" />

        <TextView
            android:id="@+id/article_link"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:layout_marginBottom="5dp"
            android:layout_marginTop="5dp"
            android:layout_marginRight="10dp"
            android:layout_marginLeft="10dp"
            android:text="View Full Article"
            android:textColor="@color/article_title"
            android:textStyle="bold" />
    </LinearLayout>

</ScrollView>

मैं भी किसी चीज पर ध्यान नहीं दे रहा हूं। डिफ़ॉल्ट रूप से, यह लोड होने के बाद WebView को स्वचालित रूप से स्क्रॉल करता है। मैं इसे कैसे न होने दूँ?


वेबव्यू स्क्रॉल करने योग्य होने के नाते आपको स्क्रॉलबुक की वास्तव में आवश्यकता क्यों है?
ज़न्नत

HTML के रूप में रेंडर करने के बजाय वेब से कुछ पहलुओं को रखने के लिए। गति और गुणवत्ता के लिए।
नेवेर

1
mjp66 का सबसे अच्छा जवाब है - हो सकता है कि आप उसका जवाब स्वीकार करें
एंड्रयूज

जवाबों:


43

आप बस इसे अपने LinearLayout: android: focusableInTouchMode = "true" में जोड़ सकते हैं। इससे मेरा काम बनता है।

 <LinearLayout
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:focusableInTouchMode="true"
    android:orientation="vertical" >

4
दुष्प्रभावों के बिना काम करता है!
वैभव जानी

267

मेरे पास एक ही समस्या थी, कई विचारों की कोशिश करने के घंटों के बाद, आखिरकार मेरे लिए जो काम किया गया था वह केवल descendantFocusabilityस्क्रॉलव्यू के लिनेरेयेलआउट के मूल्य के साथ विशेषता को जोड़ रहा था blocksDescendants। आपके मामले में:

<LinearLayout
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:orientation="vertical"
    android:descendantFocusability="blocksDescendants" >

तब से समस्या का हल नहीं निकला था।


3
क्या इससे इन नियंत्रणों की पहुंच पर कोई नकारात्मक प्रभाव पड़ता है?
कोरी ट्रेस

34
ध्यान दें कि अगर EditText जैसे किसी भी बच्चे के विचार हैं, तो यह विधि उन्हें अप्राप्य हो जाएगी।
djhworld

2
यह सवाल / जवाब तब सामने नहीं आता जब आप स्क्रॉलव्यू वेबव्यू ऑटोस्कोल शब्द की खोज करते हैं, और इसे करना चाहिए। शायद यह टिप्पणी मदद करेगी! एक WebViewFragment का उपयोग करने के साथ एक ही मुद्दा था और बहुत सारे खोज के बाद भी मुझे यह सवाल नहीं मिला, जब तक कि मैंने अपना प्रश्न (अब हटा दिया गया) पोस्ट नहीं किया।
कॉलिन एम।

1
Xamarin.Android प्रोजेक्ट पर काम करते हुए, कई ग्रिड साक्षात्कारों के साथ एक स्क्रॉलव्यू में ऑटो स्क्रॉल परेशानी थी, डाउनलोड किए गए चित्रों के साथ अतुल्यकालिक रूप से आबादी। इस समाधान ने पूरी तरह से काम किया मुझे पहली नजर में इस पर विश्वास करने में परेशानी हुई और इसे फिर से परीक्षण करना पड़ा।
YumeYume

1
बहुत ही समस्या विज्ञापन के RecyclerViewरूप में अच्छी तरह से होता है। आपका समाधान उस मामले में भी काम करता है :)
मिनस मीना

26

आपको स्क्रॉलव्यू का नया वर्ग विस्तार करना चाहिए, फिर ओवरहाइड रिक्वेस्ट कोल्डफोकस:

public class MyScrollView extends ScrollView {

    @Override 
    public void requestChildFocus(View child, View focused) { 
        if (focused instanceof WebView ) 
           return;
        super.requestChildFocus(child, focused);
    }
}

फिर अपने xml लेआउट में, का उपयोग कर:

<MyScrollView 
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:background="@color/background" >

ये मेरे लिए सही है। पुस्तक दृश्य अब वेब दृश्य पर ऑटो स्क्रॉल नहीं करेगा।


5
इसके अलावा निर्माणकर्ताओं की जरूरत: public ExtendedScrollView(Context context) { super(context); } public ExtendedScrollView( Context context, AttributeSet attributeSet) { super(context, attributeSet); } public ExtendedScrollView( Context context, AttributeSet attributeSet, int defStyle) { super(context, attributeSet, defStyle); }
एरिक बी

5

मुख्य लेआउट में इन लाइन को जोड़ने से समस्या हल हो जाती है

android:descendantFocusability="blocksDescendants"

4

ऐशे ही:

<com.ya.test.view.MyScrollView
    android:layout_width="match_parent"
    android:layout_height="match_parent" >

    <FrameLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:descendantFocusability="beforeDescendants"
        android:focusable="true"
        android:focusableInTouchMode="true" >

4

संभवत: ऐसे लोग हैं, जिनकी वही समस्या है जो मुझे हो रही थी, इसलिए मैं मदद करूंगा।

मैं android डालने की कोशिश कर रहा था : descendantFocusability = "beforeDescendants" मेरे मुख्य स्क्रॉल दृश्य में निम्नानुसार है:

<ScrollView
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:descendantFocusability="beforeDescendants">
    /*my linearlayout or whatever to hold the views */

और यह काम नहीं कर रहा था, इसलिए मुझे स्क्रॉलव्यू के माता-पिता के लिए एक RelativeLayout बनाना था, और एंड्रॉइड को प्लेस करना था : descendantFocusability = "इससे पहले कि वेस्केंडेंट्स" को जगह ।

इसलिए मैंने इसे निम्न करते हुए हल किया:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:descendantFocusability="blocksDescendants">

<ScrollView
    android:layout_width="match_parent"
    android:layout_height="match_parent">
/*my linearlayout or whatever to hold the views */

-2

मुझे MyScrollView के लिए पूरी तरह से योग्य नाम का उपयोग करना पड़ा, अन्यथा मुझे एक अपवाद मिला।

<com.mypackagename.MyScrollView 
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:background="@color/background" >
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.