স্ক্রোলভিউয়ের জন্য কোনও মাধ্যাকর্ষণ নেই। কেন্দ্র হিসাবে স্ক্রোলভিউয়ের ভিতরে কীভাবে সামগ্রী তৈরি করা যায়


104

আমি কেন্দ্র হিসাবে স্ক্রোলভিউয়ের সামগ্রী চাই want

<ScrollView
    android:id="@+id/scroller"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:paddingTop="12dp"
    android:paddingBottom="20dp"
    android:scrollbarStyle="outsideOverlay"
    android:layout_gravity="center" >

    <Button 
        android:layout_width="wrap_content" 
        android:layout_height="wrap_content" 
        android:text="check" 
        android:gravity="center_vertical|center_horizontal"/>

</ScrollView>

দ্রষ্টব্য:android:gravity স্ক্রোলউয়ের জন্য কোনও বৈশিষ্ট্য নেই ।

যে কোনও সল:

উত্তর:


175

আমার একই সমস্যা ছিল এবং অবশেষে এটি বের করে ফেললাম। এটি একটি উল্লম্ব জন্য ScrollView

আপনার ScrollViewভিতরে একটি রাখুন RelativeLayoutএবং এটিতে কেন্দ্র করুন RelativeLayout। এটি কাজ করার জন্য, আপনার ScrollViewথাকা উচিত

android:layout_height="wrap_content"

চূড়ান্ত কোডটি এমনভাবে দেখা উচিত:

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

    <ScrollView
        android:id="@+id/scrollView1"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content" 
        android:layout_centerVertical="true" >

        <LinearLayout
            android:id="@+id/linearLayout1"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:orientation="vertical">

            <Button
                android:id="@+id/button1"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="b1"/>
            <Button
                android:id="@+id/button2"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="b2"/>
            <Button
                android:id="@+id/button3"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="b3"/>
        </LinearLayout>

    </ScrollView>

</RelativeLayout>

29
এটি গ্রহণযোগ্য উত্তরের চেয়ে আমার পক্ষে আরও ভাল কাজ করছে বলে মনে হচ্ছে। ধন্যবাদ!
প্যাট্রিক বুস

যখন লেআউটটির শ্রেণিবিন্যাস থাকে তখন আদর্শভাবে অ্যান্ড্রয়েডের এই বিষয়গুলি সন্ধান করা উচিত। এছাড়াও উভয় স্ক্রলিং (অনুভূমিক / উল্লম্ব) অপশন প্রদান করা উচিত এক scrollview.BTW ধন্যবাদ @hadi
mayank_droid

2
এটি কিছুটা হ্যাক, তাই এটি কাজ করার সময় এটি ভুল অনুভব করে
দারিয়াসএল

3
আরে এটির কাজ, তবে কীবোর্ডটি দৃশ্যমান হওয়ার পরে স্ক্রোল করে না, আমি ম্যানিফেস্টে যুক্ত করার চেষ্টা করেছি android:windowSoftInputMode="stateHidden|adjustResize"তবে, স্ক্রোলটি করবেন না, দয়া করে আমাকে সহায়তা করুন
হেলিও সোয়ারস জুনিয়র

3
RelativeLayoutরুট ভিউ হিসাবে ভারী ব্যবহার করার দরকার নেই । এটি FrameLayoutএবং এর android:layout_gravity="center_vertical"জন্য হতে পারেScrollView
গ্রাফরোলোভ

148

এ কেমন?

<?xml version="1.0" encoding="utf-8"?>
<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/scrollView1"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:paddingTop="12dp"
    android:paddingBottom="20dp"
    android:scrollbarStyle="outsideOverlay" >


    <LinearLayout
        android:id="@+id/linearLayout1"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="vertical" 
        android:layout_gravity="center"
        android:gravity="center">

        <Button
            android:id="@+id/button1"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="check" 
            android:gravity="center_vertical|center_horizontal"/>
    </LinearLayout>

</ScrollView>

2
হ্যাঁ! কীভাবে! এটি আমার জন্য দুর্দান্তভাবে কাজ করেছে, তাই স্যার, আপনাকে অনেক ধন্যবাদ।
RileyE

অসাধারণ! এটি আমাকেও বাঁচায়! ধন্যবাদ :)
মেরিঙ্কে

101
এটির সাথে একটি সমস্যা আছে। যদি আপনি স্ক্রোলভিউতে সামগ্রীগুলি স্ক্রোলভিউয়ের চেয়ে বড় হয় তবে এটি এখনও এটি কেন্দ্র করে এবং শীর্ষে সামগ্রীটি কেটে দেবে (যদিও এখনও তা নিশ্চিত নয়)। মানে আপনি সেখানে স্ক্রোল করতে পারবেন না।
প্যাট্রিক বুস

7
প্যাট্রিকবুস ঠিক আছে; এটি কাজ করে না বলে মনে হচ্ছে। নীচে হাদির উত্তরটি ব্যবহার করুন, উল্লম্বভাবে একটি আপেক্ষিক লেআউটে স্ক্রোলভিউকে কেন্দ্র করে।
ম্যাসন লি

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

98

আমি মনে করি ScrollViewএর android:fillViewportসম্পত্তি ব্যবহার করা আরও মার্জিত সমাধান হবে । একজন ScrollViewযে, তা কিভাবে এটি বিষয়বস্তু (শুধুমাত্র এক হতে পারে) দৃশ্য একইরূপে মধ্যে একটু ভিন্ন এমনকি যদি আপনি নির্ধারণ match_parent( fill_parentপর্যন্ত) ScrollViewএটা যে অনেক ব্যবধান এতে এমন সব সামগ্রী ভিউ এর দেবে না, পরিবর্তে ডিফল্ট আচরণ জন্য ScrollViewমোড়ানো আপনি যে দৃশ্যের জন্য নির্দিষ্ট করেছেন তা নির্বিশেষে সামগ্রী। ভিউপোর্টটি পূরণ করার জন্য এর বিষয়বস্তু প্রসারিত করতে কী android:fillViewportবলছে ScrollView( http://developer.android.com/references/android/widget/ScrolView.html#attr_android:fillViewport )। সুতরাং LinearLayoutএক্ষেত্রে আপনার ভিউপোর্টের সাথে ম্যাচ করার জন্য প্রসারিত করা হবে এবং যদি উচ্চতা ভিউপোর্টের পিছনে চলে যায় তবে এটি স্ক্রোলযোগ্য হবে যা আপনি চান ঠিক তাই!

গৃহীত উত্তর সঠিকভাবে কাজ করবে না যখন বিষয়বস্তুটি এর বাইরেও প্রসারিত ScrollViewহবে কারণ এটি এখনও সামগ্রীর দর্শনকে কেন্দ্রের করবে কারণ এটি দেখার একটি অংশ কেটে ফেলবে ScrollViewএবং অন্য বিন্যাসে কেন্দ্রিকভাবে কাজ করে তবে ঠিক সঠিক মনে হয় না, পাশাপাশি আমি মনে করি এটির ফলস্বরূপ ত্রুটিও ঘটবে (অকেজো পিতামাতারা বা সেই লাইনের পাশাপাশি কিছু)।

এরকম কিছু চেষ্টা করুন:

<ScrollView
    android:id="@+id/scroller"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:paddingTop="12dp"
    android:paddingBottom="20dp"
    android:scrollbarStyle="outsideOverlay"
    android:fillViewport="true">

    <LinearLayout
        android:id="@+id/content"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="vertical"
        android:gravity="center">

        <Button
            android:id="@+id/button"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="check" />

    </LinearLayout>

</ScrollView>

শুধু মনে রাখবেন যে কারণে তা এখানে এখন কেন্দ্রিক হচ্ছে কারণ হল android:gravityউপর LinearLayoutথেকে ScrollViewপ্রসারিত হবে LinearLayout, যাতে মনে কি লেআউটে যোগ উপর নির্ভর করে যে রাখা।

আরেকটি ভাল পড়তে ScrollViewযদিও কেঁদ্রীকরণ সম্পর্কে না কিন্তু সম্পর্কে fillViewportহয় http://www.curious-creature.org/2010/08/15/scrollviews-handy-trick/


11
এটি সর্বাধিক সঠিক বাস্তবায়নের মতো দেখায়, অতিরিক্ত ভিউ প্রয়োজন হয় না।
দারিয়াসএল

1
সুন্দর সমাধানটি আমার কাছে সবচেয়ে পরিষ্কার মনে হচ্ছে। এর জন্য ধন্যবাদ
বেনজমিন Scharbau

2
গৃহীত উত্তরের চেয়ে ভাল কাজ করে, আপনি আমাকে অনেক সময় বাঁচিয়েছেন! সত্যিই দুর্দান্ত ব্রায়ান ইথিয়র!
মাতটিয়া রুজিগারো

এটিতে বর্ণিত সমস্ত কারণে এটিই সঠিক সমাধান above এটি যথাযথ সমাধান হিসাবে গ্রহণ করা উচিত
স্পেকপ্প

1
সাধারণ স্ট্যাকওভারফ্লো .. সঠিক সমাধানটি প্রায়শই মাঝখানে কোথাও থাকে।
তেওলড

14

স্ক্রোলভিউতে এই বৈশিষ্ট্যটি ব্যবহার করুন

android:fillViewport="true"

উদাহরণ

 <?xml version="1.0" encoding="utf-8"?>
<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:scrollbarStyle="outsideOverlay"
android:fillViewport="true"
>
   <RelativeLayout
              android:layout_width="match_parent"
              android:layout_height="wrap_content">

         <!--Your Code goes here-->

   </RelativeLayout>

</ScrollView>

স্ক্রোলভিউতে সিঙ্গল চাইল্ড ব্যবহার করার বিষয়টি নিশ্চিত করুন উপরের উদাহরণের মতো যা সম্পর্কিত la


@ জোশুয়াকিং কারণ এটি 7 বছরের পুরানো প্রশ্ন এবং আমি এই উত্তরটি 9 মাস আগে পোস্ট করেছি।
অভিষেক গার্গ

হা! ওহ .. সত্য। - ওয়েল, এটি পুরোপুরি কাজ করেছে! সূতরাং ধন্যবাদ!
জোশুয়া কিং

1
এটি অবশ্যই গ্রহণযোগ্য উত্তর হওয়া উচিত! এটি নিখুঁতভাবে কাজ করে এবং যদি কন্টেন্টের আকারের চেয়ে কম হয় তবে একটি স্ক্রলভিউ কেন্দ্র করে। স্ক্রোলভিউ এবং হরাইজন্টস্ক্রোলভিউ উভয়ের পক্ষে কাজ করে। তোমাকে অনেক ধন্যবাদ! 💝💖
রায় লি

এতে স্ক্রোল ভিউয়ের মধ্যে আপনার সামগ্রীকে প্রসারিত করার অযৌক্তিক প্রভাব থাকতে পারে
মার্টিনসিয়াল 1987

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

9

@ পেট্রিক_বস - এর জন্য আমার অ্যাপ্লিকেশনটিতে যে বিষয়বস্তুটি কাটা থেকে বিরত ছিল তা হ'ল লিনিয়ারলাইউটের জন্য মাধ্যাকর্ষণ এবং লেআউট_গ্রাভিটিকে কেন্দ্র_হরিঞ্জটেলেটেড করা।

এটি আমার পক্ষে কাজ করেছিল ... তবে এটি আপনার পক্ষে কাজ করবে কিনা তা নিশ্চিত নয়।

@ ভুতের উত্তরটির পরিবর্তন -

<?xml version="1.0" encoding="utf-8"?>
<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/scrollView1"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:paddingTop="12dp"
    android:paddingBottom="20dp"
    android:scrollbarStyle="outsideOverlay" >


    <LinearLayout
        android:id="@+id/linearLayout1"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="vertical" 
        android:layout_gravity="center_horizontal"
        android:gravity="center_horizontal">

        <Button
            android:id="@+id/button1"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="check" 
            android:gravity="center_vertical|center_horizontal"/>
    </LinearLayout>

</ScrollView>

1
এটি শীর্ষস্থানীয় সমস্যাটি কাটা সমাধান করে। তবে এই সমাধানটিতে এখনও একটি সমস্যা রয়েছে। স্ক্রোলভিউ সামগ্রীটি উল্লম্বভাবে কেন্দ্রিক ছিল না। তবে এটিকে স্ক্রোলভিউয়ের নিম্নোক্ত মানগুলি সেট করে স্থির করা যেতে পারে: অ্যান্ড্রয়েড: লেআউট_হাইট = "র‌্যাপ_কন্টেন্ট" অ্যান্ড্রয়েড: লেআউট_গ্রাভিটি = "সেন্টার_ভার্টিকাল"
প্যাট্রিক বুস

আমি খুঁজে পেয়েছি যে এটি অন্যান্য লেআউটের মধ্যে কাজ করার জন্য শীর্ষস্থানীয় স্ক্রোলভিউ অবশ্যই ফ্রেমলাইউটে এম্বেড করা উচিত।
থিও

1

একটি বিষয় বিবেচনা করতে হবে তা সেট না করা । নির্দিষ্ট আপনার সন্তানের নিয়ন্ত্রণ, বিশেষত করুন EditTextনিয়ন্ত্রণ, না আছে RequestFocusসম্পত্তি সেট।

এটি লেআউটের সর্বশেষ ব্যাখ্যামূলক বৈশিষ্ট্যগুলির মধ্যে একটি হতে পারে এবং এটি তার পিতামাতার ( layoutবা ScrollView) উপর অভিকর্ষজ সেটিংসকে ওভাররাইড করবে ।


0

কনস্ট্রেন্টলয়েটের ভিতরে স্ক্রোল ভিউ ব্যবহার করে। এটা আমার জন্য কাজ করা হয়

<androidx.constraintlayout.widget.ConstraintLayout
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:background="@android:color/white">

            <ScrollView
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                app:layout_constraintBottom_toBottomOf="parent"
                app:layout_constraintEnd_toEndOf="parent"
                app:layout_constraintStart_toStartOf="parent"
                app:layout_constraintTop_toTopOf="parent">

                <LinearLayout
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content"
                    android:orientation="vertical" />
            </ScrollView>
        </androidx.constraintlayout.widget.ConstraintLayout>

স্ক্রোল দর্শন উচ্চতার মোড়ক_মুক্ত করা উচিত

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