আমার অ্যান্ড্রয়েড ক্রিয়াকলাপটি কেন সর্বদা নীচে স্ক্রোল করা শুরু করে?


91

আমি যখনই এই ক্রিয়াকলাপটি শুরু করি তখনই এটি সর্বদা বোতলযুক্ত শুরু হয় - সমস্ত দিকে নীচে স্ক্রল করে। আমি ক্রিয়াকলাপের অবস্থানটি পরিবর্তনের প্রত্যাশা করব এমন ক্রিয়াকলাপ অনক্রিয়েট (বা যে কোনও জায়গাতেই কোথাও) তে কিছু অদ্ভুত কিছু করছি না। আমি শীর্ষস্থানীয় ফোকাসযোগ্য নিয়ন্ত্রণ এবং স্ক্রোল্টো পদ্ধতিতে ফোকাস সেট করার চেষ্টা করেছি, তবে তাদের দু'টিতেই কাজ হচ্ছে না। তা ছাড়া, আমার অন্য কোনও কাজের ক্ষেত্রেই এই সমস্যা নেই। এখানে লেআউটটি রয়েছে:

<ScrollView
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/scroll"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content">
    <LinearLayout
        android:orientation="vertical"
        android:layout_width="match_parent"
        android:layout_height="match_parent">

        <TextView
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:id="@+id/edit_refresh_update_header"
            android:textSize="18sp"/>

        <TextView
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:text="\n"
            android:textSize="4sp"/>

        <TextView
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:text="Variable:"
            android:textSize="18sp"/>

        <Spinner
            android:id="@+id/edit_refresh_variables_spinner"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"/>

        <TextView
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:text="\n"
            android:textSize="4sp"/>

        <TextView
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:text="Network:"
            android:textSize="18sp"/>

        <RadioGroup
            android:id="@+id/widget1"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            xmlns:android="http://schemas.android.com/apk/res/android"
            android:orientation="vertical">

            <RadioButton
                android:text="Web"
                android:id="@+id/edit_refresh_update_rb_web"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:onClick="NetRadioButtonSelected"
                android:checked="true"/>

            <RadioButton
                android:text="Socket Server"
                android:id="@+id/edit_refresh_update_rb_socket_server"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:onClick="NetRadioButtonSelected"/>
        </RadioGroup>

        <TextView
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:text="\n"
            android:textSize="4sp"/>

        <TextView
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:text="Socket server request type:"
            android:textSize="18sp"/>

        <Spinner
            android:id="@+id/edit_refresh_socket_server_req_types_spinner"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"/>

        <TextView
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:text="\n"
            android:textSize="4sp"/>

        <TextView
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:text="Socket server body:"
            android:textSize="18sp"/>

        <EditText
            android:layout_width="match_parent"
            android:id="@+id/edit_refresh_update_ss_body"
            android:layout_height="wrap_content"
            android:enabled="false"/>

        <TextView
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:text="\n"
            android:textSize="4sp"/>

        <TextView
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:text="Url:"
            android:textSize="18sp"/>

        <EditText
            android:layout_width="match_parent"
            android:id="@+id/edit_refresh_update_url"
            android:layout_height="wrap_content"/>

        <TextView
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:text="\n"
            android:textSize="4sp"/>

        <Button
            android:text="Save refresh update"
            android:id="@+id/edit_refresh_save_btn"
            android:layout_height="wrap_content"
            android:layout_width="match_parent"
            android:layout_marginLeft="20dip"
            android:layout_marginRight="20dip"
            android:layout_marginBottom="20dp"
            android:layout_alignParentBottom="true"
            android:onClick="SaveRefreshUpdate">
        </Button>

        <TextView
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:text="\n"
            android:textSize="4sp"/>
    </LinearLayout>
</ScrollView>

আপনি কীভাবে ফোকাস পরিবর্তন করার চেষ্টা করেছেন?
devmiles.com

4
নীচে বর্ণিত হিসাবে ফুলস্ক্রোল পদ্ধতি এবং নীচে বর্ণিত স্ক্রোলটো পদ্ধতি ব্যবহার করে। অগত্যা এইভাবে এটি ঠিক করার বিষয়ে আমার আপত্তি নেই, তবে এটির কেন এমন শুরু হচ্ছে তার একটি কারণ অবশ্যই থাকতে হবে এবং আমি এটি সংশোধন করে বরং এটি সংশোধন করব।
মিঃজিবাজে

উত্তর:


307

অ্যান্ড্রয়েড যখন কোনও ক্রিয়াকলাপ শুরু করে, তখন কিছু নিয়ন্ত্রণকে মনোযোগ দেওয়া দরকার। ফোকাস নেওয়ার জন্য যখন কোনও মনোনীত নিয়ন্ত্রণ নেই তখন সিস্টেমটি প্রথম যোগ্য নিয়ন্ত্রণ বেছে নেয় যা ফোকাস চায়। যদি আপনি নীচের সম্পত্তিটি আপনার লিনিয়ারলআউটে সেট করেন - android:focusableInTouchMode="true"আপনার LinearLayoutশুরুতে মনোনিবেশ করা হবে এবং আপনার ক্রিয়াকলাপটি EditTextনীচে স্ক্রোল করবে না ।


আমার গ্রিডলাউটে কাজ করছেন না। লেআউটটির মাঝখানে আমার একটি গ্রিডভিউ রয়েছে এবং প্রতিবার এটি ফোকাস পায়।
ইকবাল

4
পুরো দিন ধরে আমার মাথা আঁচড়ে গেছে এবং কেন এটি কেবল একটি নির্দিষ্ট ক্রিয়াকলাপে ঘটছে তা সন্ধান করতে পারিনি এবং আমি এখনও বুঝতে পারি না যেহেতু আমি কোনও দৃশ্যে ফোকাস সক্ষম করে নি। তবে আপনাকে ধন্যবাদ, আমি এই সমস্যাটি সমাধান করতে পেরেছি। এটি নতুন হতে পারে যদি কেউ নতুন কার্যক্রমে নতুন কিছু করছি না বলে সম্ভাব্য কারণ কী হতে পারে সে সম্পর্কে কিছুটা আলোকপাত করতে পারে।
শুভ্রাল

4
একটি গুরুত্বপূর্ণ নোট: এটিকে LinearLayoutঅভ্যন্তরের অভ্যন্তরে সম্পত্তি হিসাবে যুক্ত করতে হবে ScrollView, নিজেই স্ক্রোল ভিউতে নয়।
বরিস স্ট্রান্ডজেভ

@ বোরিসস্ট্রান্ডজেভ খুব গুরুত্বপূর্ণ নোট। উত্তরে যুক্ত করা উচিত। যাইহোক, এর জন্য ধন্যবাদ: পি
কোরেগগন

আক্ষরিক উত্তরে এটি উল্লেখ করা হয়েছে।
devmiles.com

35

আপনার বিন্যাসে আইটেমগুলিকে দূষিত করার পরিবর্তে আপনি এটিকে আপনার ক্রিয়াকলাপ / শ্রেণিতে যোগ করতে পারেন:

    ScrollView scrollView = (ScrollView) findViewById(R.id.scrollView);
    scrollView.setFocusableInTouchMode(true); 
    scrollView.setDescendantFocusability(ViewGroup.FOCUS_BEFORE_DESCENDANTS);

এইভাবে এটি আপনার স্ক্রোলভিউয়ের দিকে মনোনিবেশ করার কোনও উপাদান নয়, এটি আপনার পাতাগুলি হিসাবে একটি স্ক্রোলভিউ যা প্রথমে ফোকাস হ'ল এটি পরে সন্তানের দৃশ্যের দিকে চলে।


আমি যখন স্ক্রোলভিউয়ের ভিতরে বাচ্চাদের উপর ভিত্তি করে তালিকাটি দেখার উচ্চতা নির্ধারণ করার চেষ্টা করছিলাম তখন আংশিকভাবে আমার জন্য কাজ করে
কনস্ট্যান্টিন কনপোপো

এই সাহায্য! (যদিও এক্সএমএলে একই বৈশিষ্ট্যগুলি কার্যকর হয়নি ..)
মাতান দহন

একটি যাদুমন্ত্র মত কাজ করে! থেক্স
বগি

এটি আমার পক্ষে কাজ করেছিল, তবে আমি এই লাইনটি যুক্ত করেছি: স্ক্রোলভিউ.ফুলসক্রল (স্ক্রোলভিউ।ফোকাস_আপ) উভয়ই আলাদাভাবে কাজ করেনি।
হুয়ান জিওরেলো

3

আপনি এই কোড চেষ্টা করতে পারেন:

scroller.post(new Runnable() { 
    public void run() { 
        scroller.fullScroll(ScrollView.FOCUS_DOWN); 
    } 
}); 

[এন: বি] [রেফারেন্স লিঙ্ক]


4
এটি একটি ভাল বিকল্প তবে এটি খোলার পরে একটি ঝাঁকুনি অনুকরণ করে তাই আমি মনে করি না এমন ভাল ব্যবহারকারীর অভিজ্ঞতা
iBabur

2

সেই সাথে দেবমাইলস ডটকম কী বলেছে।

যদি আপনি নীচের সম্পত্তিটি আপনার লিনিয়ারলআউট - অ্যান্ড্রয়েডে সেট করে থাকেন: ফোকাসযোগ্যআইনটচমোড = "সত্য" আপনার লিনিয়ারলআউট শুরুতে ফোকাস হবে এবং আপনার ক্রিয়াকলাপটি নীচে সম্পাদনা পাঠ্যে স্ক্রোল করবে না।

আপনি যদি আপনার লিনিয়ার বিন্যাসের নীচে একটি দৃশ্যে অনুরোধ লেআউট () কল করেন তবে এটি আপনার শীর্ষ সর্বাধিক দর্শন থেকে ফোকাসটি চুরি করতে পারে। তাই কেবলমাত্র নিম্ন ভিউতে রিকোয়েস্ট লেআউট () কল করার পরে রৈখিক বিন্যাসের শীর্ষ সর্বাধিক দর্শনে কেবল অনুরোধফোকাস () কে কল করুন।


1

আপনি কি পুরো স্ক্রোল পদ্ধতিটি ব্যবহার করার চেষ্টা করেছেন?

yourScrollView.fullScroll(ScrollView.FOCUS_UP);

1

জামারিন অ্যান্ড্রয়েড বিকাশের জন্য, আপনি যদি @ গ্র্যাম সমাধানটি করতে চান তবে:

// Set Focus to ScrollView
ScrollView scrollView = (ScrollView)FindViewById(Resource.Id.scrollView);
scrollView.FocusableInTouchMode = true;
scrollView.DescendantFocusability = Android.Views.DescendantFocusability.BeforeDescendants;

1

এটি অনক্রিট () এ ফোকাসযোগ্য না করে তোলে

editText.setFocusable(false);

আর ব্যবহার করুন

editText.setOnClickListener(new ....){
 ......
  editText.setFocusable(true);
  editText.setFocusableInTouchMode(true);
  editText.requestFocus();

  showSoftKeyboard(); //Use InputMethodManager to open soft Keyboard

 ......
 };

এবং এটি পরের বার এডিটেক্সট এ স্ক্রোল করবে না, একটি খণ্ড বা কার্যকলাপ তৈরি করা হবে is



0

কেন জানি না তবে আপনি পরীক্ষা করতে পারলেন

ScrollView sv = (ScrollView) findViewById(R.id.scroll);
sv.scrollTo(0,0);

আপনার onCreateনিজে যেখানে এটি পছন্দ করতে সেখানে ম্যানুয়ালি স্ক্রোল করুন।


0

scrollView.requestFocus(View.FOCUS_UP)আমার সমস্যাটি সমাধান করুন যখন আমি চেয়েছিলাম শীর্ষ দৃশ্যটি দৃশ্যমান হোক। পদ্ধতিতে দিকনির্দেশ পরামিতি নির্দিষ্ট করা অবস্থানকে requestFocus(int direction)নিয়ন্ত্রণ করার একটি ভাল উপায় ScrollView। আরও বিশদ এখানে


0

আমার ক্ষেত্রে আমি একটি ছিল VideoViewএকটি ভিতরে ConstraintLayoutভিতরে ScrollViewVideoViewসবসময় ফোকাস চুরি হয়েছিল, এবং সেখানে এটি সঙ্গে বিষয় আছে । সমাধানটি ব্যবহার করা হয় TextureView। আশা করি এটি কাউকে সহায়তা করে, কমপক্ষে আমার এক ঘন্টা ব্যয় হয়েছে :)

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