ডেটা লোড হওয়ার পরে কোনও স্ক্রোলভিউকে কোনও ওয়েব ভিউতে স্ক্রোল করা থেকে রোধ করবেন কীভাবে?


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>

আমিও কিছুতেই মনোযোগ দিচ্ছি না। ডিফল্টরূপে, এটি লোড হওয়ার পরে স্বয়ংক্রিয়ভাবে ওয়েবউভিতে স্ক্রোল করে। আমি কীভাবে এটি প্রতিরোধ করব?


ওয়েবভিউ স্ক্রোলযোগ্য হিসাবে ঠিক আপনার কেন স্ক্রোলভিউ দরকার?
znat

এইচটিএমএল হিসাবে রেন্ডার করার পরিবর্তে কিছু দিক ওয়েবভিউ থেকে দূরে রাখতে। গতি এবং মানের জন্য।
নাব্যার

1
mjp66 এর সর্বোত্তম উত্তর রয়েছে - হতে পারে আপনি তার উত্তরটি গ্রহণ করুন
অ্যান্ড্রুএস

উত্তর:


43

আপনি এটিকে কেবল আপনার লিনিয়ারলআউট: এন্ড্রয়েড: ফোকাসেবল ইন্টিচমোড = "সত্য" এ যুক্ত করতে পারেন। এটা আমার জন্য কাজ করে.

 <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
এই নিয়ন্ত্রণগুলির অ্যাক্সেসযোগ্যতার উপর এটির কোনও নেতিবাচক প্রভাব আছে?
Cory Trese

34
নোট করুন যে যদি এডিট টেক্সটের মতো কোনও শিশু দৃষ্টিভঙ্গি থাকে তবে এই পদ্ধতিটি তাদের অযোগ্য করার কারণ ঘটায়।
djhworld

2
আপনি যখন স্ক্রোলভিউ ওয়েবভিউ অটস্ক্রোল শব্দটি অনুসন্ধান করেন তখন এই প্রশ্ন / উত্তরটি আসে না এবং এটি হওয়া উচিত। এই মন্তব্য সাহায্য করবে! ওয়েবভিউফ্রেগমেন্ট ব্যবহার করার ক্ষেত্রেও একই সমস্যা ছিল এবং আমি নিজের প্রশ্ন পোস্ট না করা (এখন মুছে ফেলা) অবধি প্রচুর অনুসন্ধানের পরেও এই প্রশ্নটি খুঁজে পাইনি।
কলিন এম।

1
একটি জ্যামারিন.এন্ড্রয়েড প্রকল্পে কাজ করা, একাধিক গ্রিডভিউ সহ একটি স্ক্রোলভিউতে অটো স্ক্রোলের সমস্যা ছিল, ডাউনলোডকৃত চিত্র সহ অবিচ্ছিন্নভাবে জনবহুল। এই সমাধানটি এত নিখুঁতভাবে কাজ করেছিল আমার প্রথম দর্শনে এটি বিশ্বাস করতে সমস্যা হয়েছিল এবং এটি আবার পরীক্ষা করতে হয়েছিল।
YumeYume

1
বিজ্ঞাপনগুলির ক্ষেত্রেও একই সমস্যাটি ঘটে RecyclerView। আপনার সমাধান :) যে ক্ষেত্রে ভাল কাজ করে
ব্যক্তিগতকৃত Minas মীনা

26

আপনার নতুন শ্রেণি প্রসারিত স্ক্রোলভিউ তৈরি করা উচিত, তারপরে অনুরোধ ওভাররাইড চিল্ডফোকাস:

public class MyScrollView extends ScrollView {

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

তারপরে আপনার এক্সএমএল লেআউটে:

<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

সম্ভবত এমন লোক আছে যাদের আমার একই সমস্যা ছিল, তাই আমি সাহায্য করব।

আমি নিম্নলিখিত হিসাবে আমার মূল স্ক্রোলভিউতে অ্যান্ড্রয়েড: বংশগতি ফোকাসেবিলিটি = "ডিজাইনসেন্টস" রাখার চেষ্টা করছিলাম:

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

এবং এটি কাজ করে না, সুতরাং আমাকে স্ক্রোলভিউর পিতামাতাকে একটি রিলেটিভলআউট তৈরি করতে হয়েছিল এবং অ্যান্ড্রয়েডটি রাখতে হয়েছিল: বংশোদ্ভূত ফোকাসেবলি = "পূর্ববর্তী" পিতামাতার পাশাপাশি।

সুতরাং আমি নিম্নলিখিতটি সমাধান করে এটি সমাধান করেছি:

<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

আমাকে মাইস্ক্রোলভিউয়ের জন্য পুরোপুরি যোগ্যতাসম্পন্ন নামটি ব্যবহার করতে হয়েছিল, অন্যথায় আমি একটি স্ফীত ব্যতিক্রম পেয়েছি।

<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" >
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.