একটি স্ক্রোল ভিউয়ের মধ্যে অ্যান্ড্রয়েড তালিকার ভিউ


268

আমার একটি অ্যান্ড্রয়েড লেআউট রয়েছে যা এর scrollViewসাথে বেশ কয়েকটি উপাদান রয়েছে। scrollViewআমার নীচে একটি রয়েছে listViewযা তখন একটি অ্যাডাপ্টারের দ্বারা পপুলেশন হয়।

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

আমি কীভাবে এই আচরণটি অর্জন করতে পারি?

এখানে আমার মূল বিন্যাসটি রয়েছে:

<ScrollView
    android:id="@+id/scrollView1"
    android:layout_width="match_parent"
    android:layout_height="0dp"
    android:layout_weight="2"
    android:fillViewport="true"
    android:gravity="top" >

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

</ScrollView>

আমি তখন প্রোগ্রামেটিক্যালি আইডি সহ linearlayour আমার উপাদান যোগ করুন: foodItemActvity_linearLayout_fragments। নীচে এমন এক দর্শন রয়েছে যা সেই লিনিয়ারআলেটে লোড হয়েছে। এই তিনিই আমাকে স্ক্রোলগুলি দিয়ে ঝামেলা দিচ্ছেন।

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:orientation="vertical" >

    <TextView
       android:id="@+id/fragment_dds_review_textView_label"
       android:layout_width="wrap_content"
       android:layout_height="wrap_content"
       android:text="Reviews:"
       android:textAppearance="?android:attr/textAppearanceMedium" />

   <ListView
       android:id="@+id/fragment_dds_review_listView"
       android:layout_width="match_parent"
       android:layout_height="wrap_content">
   </ListView>
</LinearLayout>

আমার অ্যাডাপ্টার এরপরে এই তালিকার ভিউ পূরণ করে।

আমি যখন মাস্টার স্ক্রোলভিউতে ক্লিক করি তখন অ্যান্ড্রয়েড হায়ারার্কি ভিউয়ারের একটি চিত্র এখানে রয়েছে:

অ্যান্ড্রয়েড তালিকা ভিউ একটি স্ক্রোল ভিউ এর ভিতরে

আপনি দেখতে পাচ্ছেন, এটি পর্যালোচনা তালিকার ভিউ বাদ দিচ্ছে না।

আমার পৃষ্ঠাটি নীচে স্ক্রোল করতে এবং 8 টি পর্যালোচনা দেখতে সক্ষম হওয়া উচিত, তবে পরিবর্তে এটি আমাকে কেবল 3 টি দেখায় এবং আমি যেখানে পর্যালোচনাগুলি সেখানে ক্ষুদ্র অংশে স্ক্রোল করতে পারি। আমি একটি বিশ্বব্যাপী পৃষ্ঠার স্ক্রোল চাই




এটা এখানে. : আপনি পূর্ণ বর্ণনামূলক তথ্য পেতে পারেন stackoverflow.com/questions/20116381/...
Farruh Habibullaev

এটি খুব সহজ ব্যবহারের জন্য রিসাইক্ল ভিউর পক্ষে তালিকাটি দেখুন
আনন্দ রাজ মেহতা

আমি আশা করি এটি আপনার জন্য কাজ করবে stackoverflow.com/a/62011087/11554604
এস কুমার

উত্তর:


559

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

কেবলমাত্র আপনার বর্তমান এক্সএমএলে android.support.v4.widget.NestedScrolView দিয়ে স্ক্রোলভিউ প্রতিস্থাপন করুন এবং তারপরে যাদু ঘটবে।

নীচে একটি নমুনা এক্সএমএল কোড রয়েছে:

<?xml version="1.0" encoding="utf-8"?>
<android.support.v4.widget.NestedScrollView
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <android.support.v7.widget.LinearLayoutCompat
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="vertical"
        android:padding="16dp"
        android:paddingBottom="20dp">

        <TextView
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:text="Recycler View inside a Scroll View"
            android:textColor="@color/black"
            android:textSize="@dimen/_20sp"
            android:textStyle="bold" />

        <TextView
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_marginTop="8dp"
            android:text="Below is a Recycler View as an example."
            android:textSize="16sp" />

        <android.support.v7.widget.RecyclerView
            android:id="@+id/recycler_view"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_marginTop="8dp"
            app:layout_constraintTop_toBottomOf="@id/et_damaged_qty" />

        <TextView
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_marginTop="8dp"
            android:text="This text automatically goes below the Recycler View."
            android:textSize="16sp" />
    </android.support.v7.widget.LinearLayoutCompat>
</android.support.v4.widget.NestedScrollView>

এই নেস্টেড স্ক্রোলিংটি পেতে আমরা যে সমস্ত কুরুচিপূর্ণ হ্যাক করেছি তা থেকে এখন আপনি মুক্তি পেতে পারেন।

খেলার সময় এসেছে। হেইল ইয়েইইইইইইইইইইইইইইইইইইইইইইইইইইইইইইইইইইইইইইইইইইইইইইইইইইইইইইইইইইইইইইইইইইইইইইইইইইইইইইইইইইইইইইইইইইইইইইইইইইইইইইইইইইইইইইইইইইইইইইইইইইইইইইইইইইইইইইইইইইইইইইইইইইইইইইইইইইইইইইইইইইইইইইইইইইইইইইইইইইইইইইইইইইইইইইইইইইইইইইইইইইইইইইইইইইইইইইইইইইইইইইইইইইইইইইইইইইইইইইইইইইইইইইইইইইইইইইইইইইইইইইইইইইইইইইইইইইইইইইইউ '' হ্যাঁ!

এখানে চিত্র বর্ণনা লিখুন


1
@ জিৎটেন পারমার ইতিমধ্যে এই সমস্যাটি নির্দিষ্ট করেছেন, আবার আমার বলতে হবে - এটি একটি ভাল হ্যাক তবে যখন কোনও টেক্সটভিউতে একাধিক লাইন থাকবে তখন কাজ করছে না। আরশু - জিতে আপনার পরবর্তী সমাধানটিও কাজ করছে না (জিতে ইতিমধ্যে নির্দিষ্ট করা আছে)। আপনি যদি এর জন্য কোনও সমাধান খুঁজে পান তবে দয়া করে এখানে পোস্ট করুন। আমার খারাপভাবে সমাধান দরকার।
খোবাইব

4
- আমি এই সমাধান যা আমার ক্ষেত্রে পুরোপুরি কাজ করে, পরিবর্তনশীল উচ্চতা সঙ্গে অর্থাত সমর্থন তালিকা আইটেম পাওয়া stackoverflow.com/a/17503823/1433187
Khobaib

3
অনুগ্রহপূর্বক অপসারণ করুন requestLayout()- setLayoutParams পদ্ধতিটি ইতিমধ্যে এটি করেছে।
ওলেকসেই মালোভানই

2
ফিক্স পরিমাপview.measure(MeasureSpec.makeMeasureSpec(desiredWidth, MeasureSpec.AT_MOST),MeasureSpec.makeMeasureSpec(0, MeasureSpec.UNSPECIFIED));
ওলেকসেই মালোভানই

2
গ্রিডভিউ দিয়ে আমারও এটি করা দরকার .. কোনও পরামর্শ?
বনি

223

উত্তরটি সহজ এবং আমি এখানে অবাক হয়ে এখনও অবাক হয়েছি।

একটি Header Viewবা / এবং Footer Viewতালিকায় নিজেই ব্যবহার করুন। ScrollViewকোনও ListViewবা কোনও কিছু যাতে স্ক্রোল করতে পারে তার সাথে কোনও মিশ্রণ করবেন না । এটি শিরোনাম এবং পাদচরণ সঙ্গে ব্যবহার করা বোঝানো :)

মূলত, আপনার লিস্টভিউয়ের ওপরে সমস্ত সামগ্রী নিয়ে যান, অন্য একটি .xML ফাইলে একটি লেআউট হিসাবে এবং তারপরে কোডে এটি স্ফীত করে শিরোনামের ভিউ হিসাবে তালিকায় যুক্ত করুন।

অর্থাত

View header = getLayoutInflater().inflate(R.layout.header, null);
View footer = getLayoutInflater().inflate(R.layout.footer, null);
listView.addHeaderView(header);
listView.addFooterView(footer);

2
@ এরিকোসগ, তবে আমি কেন সমাধানের সন্ধান করছি তা আমি চাই না।
জিতেন পারমার

13
যদি আপনি শিরোনাম দর্শন যোগ করেন তবে অনলিস্টিমেটিক্লিকের ইনট প্যারাম পজিশনটি +1 হবে। সুতরাং আপনি এটি পরিচালনা করতে হবে। (তালিকার প্রথম আইটেমটির অবস্থান 1 হবে, 0 নয়)
কোপিএলস

আমি চাই যে ভিউপ্যাজারের জন্য একটি শিরোনাম রয়েছে।
হাসান

2
আমি চাই গ্রিডভিউ
কোথাও কোথাও

1
যদি আপনার শিরোনামে edittext প্রয়োজন না হয় তবে এই পদ্ধতিরটি ভাল হয়। এডিটেক্সট তালিকায় উপস্থিত থাকাকালীন ফোকাস ধরে রাখে না
বলভিন্দর সিঙ্গহ

40

আমি জানি এটি এত দিন হয়েছে তবে আমি এই সমস্যাটিও পেয়েছি, এই সমাধানটি চেষ্টা করে দেখেছি এবং এটি কাজ করছে। সুতরাং আমি অনুমান করি এটি অন্যদেরকেও সহায়তা করতে পারে।

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

<ScrollView
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:id="@+id/scrollView6" 
    android:fillViewport="true">

এবং এটি আমার কাছে যাদুর মতো কাজ করে। আমার স্ক্রোলভিউয়ের ভিতরে থাকা তালিকাভিউটি আবার তার আকারে প্রসারিত হবে।

এখানে স্ক্রোলভিউ এবং তালিকাভিউয়ের পুরো উদাহরণ কোড।

<ScrollView
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:id="@+id/scrollView6" android:fillViewport="true">
    <LinearLayout
        android:orientation="vertical"
        android:layout_width="match_parent"
        android:layout_height="match_parent">
        ....
        <ListView
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:id="@+id/lv_transList" android:layout_gravity="top"
            android:layout_marginTop="5dp"/>
        ....
    </LinearLayout>
</ScrollView>

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

3
এটি স্ক্রোলভিউয়ের স্ক্রোল ক্ষমতাগুলি অক্ষম করে
প্রণব মহাজন

24

আপনি কাস্টম তালিকাভিউ তৈরি করুন যা স্ক্রোলযোগ্য নয় non

  public class NonScrollListView extends ListView {

            public NonScrollListView(Context context) {
                super(context);
            }
            public NonScrollListView(Context context, AttributeSet attrs) {
                super(context, attrs);
            }
            public NonScrollListView(Context context, AttributeSet attrs, int defStyle) {
                super(context, attrs, defStyle);
            }
            @Override
            public void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
                    int heightMeasureSpec_custom = MeasureSpec.makeMeasureSpec(
                            Integer.MAX_VALUE >> 2, MeasureSpec.AT_MOST);
                    super.onMeasure(widthMeasureSpec, heightMeasureSpec_custom);
                    ViewGroup.LayoutParams params = getLayoutParams();
                    params.height = getMeasuredHeight();    
            }
        }

আপনার লেআউট রিসোর্স ফাইলে

     <?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:fadingEdgeLength="0dp"
            android:fillViewport="true"
            android:overScrollMode="never"
            android:scrollbars="none" >

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

                <!-- com.Example Changed with your Package name -->

                <com.Example.NonScrollListView
                    android:id="@+id/lv_nonscroll_list"
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content" >
                </com.Example.NonScrollListView>

                <RelativeLayout
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content"
                    android:layout_below="@+id/lv_nonscroll_list" >

                    <!-- Your another layout in scroll view -->

                </RelativeLayout>
            </RelativeLayout>

        </ScrollView>

জাভা ফাইলে তালিকার মত পরিবর্তনের মতো আপনার কাস্টমলিস্টভিউয়ের একটি অবজেক্ট তৈরি করুন: ননস্ক্রোললিস্টভিউ নন_স্ক্রোল_লিস্ট = (ননস্ক্রোললিস্টভিউ) ফাইন্ড ভিউবিআইআইডি (আর.আইডি.এলভি_নোনস্ক্রোল_লিস্ট);


অথবা আপনি কেবল এই লিঙ্কটি ভাগ করতে পারেন
অলৌকিক দোহ

এটি তালিকার শীর্ষে স্ক্রোলভিউকে স্ক্রোল করতে বাধ্য করে। অপ্রত্যাশিত আচরণ
ভাভিক মেহতা

8
    public static void setListViewHeightBasedOnChildren(ListView listView) {
    // 获取ListView对应的Adapter
    ListAdapter listAdapter = listView.getAdapter();
    if (listAdapter == null) {
        return;
    }

    int totalHeight = 0;
    for (int i = 0, len = listAdapter.getCount(); i < len; i++) { // listAdapter.getCount()返回数据项的数目
        View listItem = listAdapter.getView(i, null, listView);
        listItem.measure(0, 0); // 计算子项View 的宽高
        totalHeight += listItem.getMeasuredHeight(); // 统计所有子项的总高度
    }

    ViewGroup.LayoutParams params = listView.getLayoutParams();
    params.height = totalHeight
            + (listView.getDividerHeight() * (listAdapter.getCount() - 1));
    // listView.getDividerHeight()获取子项间分隔符占用的高度
    // params.height最后得到整个ListView完整显示需要的高度
    listView.setLayoutParams(params);
}

আপনি এই কোডটি স্ক্রোলভিউতে তালিকার জন্য ব্যবহার করতে পারেন


এটি কি স্ক্রলে অন্তর্নির্মিত তালিকাগুলি অক্ষম করবে?
Zapnologica

এটি তৃতীয় মৌলের চেয়ে বেশি দেখানোর জন্য এটি ListViewঅভ্যন্তরের পক্ষেও কাজ করবে RecyclerView
স্যান্ডেলন

8

আপনি android:fillViewport="true"আপনার স্ক্রোলভিউতে যুক্ত করে এটি সমাধান করতে পারেন ।

<ScrollView
      android:layout_width="match_parent"
      android:layout_height="match_parent"
      android:background="@color/white"
      android:fillViewport="true"
      android:scrollbars="vertical">

<ListView
      android:id="@+id/statusList"
      android:layout_width="fill_parent"
      android:layout_height="wrap_content"
      android:animationCache="false"
      android:divider="@null"
      android:scrollingCache="false"
      android:smoothScrollbar="true" />

</ScrollView>


এই সম্পত্তিটি ব্যবহারের আগে, আমার তালিকার একমাত্র শিশু উপস্থিত ছিল। এটি ব্যবহারের পরে সমস্ত সারি বা তালিকার শিশু দৃশ্যমান।


অ্যান্ড্রয়েড: v8 এর উপরে নতুন অ্যান্ড্রয়েড সংস্করণগুলির জন্য স্ক্রলিংক্যাশ = "মিথ্যা" আর সমর্থিত নয়।
বে

7

প্যারেন্ট স্ক্রোলভিউতে কিছু করবেন না। কেবলমাত্র শিশু তালিকাভিউতে এটি করুন। সবকিছু নিখুঁতভাবে কাজ করবে।

mListView.setOnTouchListener(new View.OnTouchListener() {
            @Override
            public boolean onTouch(View v, MotionEvent event) {
                mScrollView.requestDisallowInterceptTouchEvent(true);
               int action = event.getActionMasked();
                switch (action) {
                    case MotionEvent.ACTION_UP:
                        mScrollView.requestDisallowInterceptTouchEvent(false);
                        break;
                }
                return false;
            }
        });

2
এটি একটি স্বীকৃত উত্তর হওয়া উচিত। এটি সহজ এবং স্মার্ট। আপনি যখন লিস্টিভিউয়ের স্পর্শ করছেন তখন কেবল স্ক্রোলভিউটি অক্ষম করুন এবং আপনার আঙুলটি
উঠানোর

নিখুঁতভাবে কাজ করেছেন। আশা করি অন্যরাও এই উত্তরে স্ক্রোল করুন!
কুঞ্জ মেহতা

6

আপনি যদি কোনও কোডে কেবল একটি তালিকাভিউ প্রয়োগ করেন তবে এই কোডটি আপনার সমস্যার সমাধান করবে।

যদি আপনি এই কোডের চেয়ে তালিকার ভিউ শিশু হিসাবে আপেক্ষিক লেআউটটি ব্যবহার করেন তবে এখানে তালিকা আইটেম.মিজার (0, 0) একটি নালপয়েন্টার এক্সসেপশন ফিরে আসে ; , RelativeLayout এর কারণে।আর সমাধানটি আপনার রিলেটিভলেআউটটিকে একটি লিনিয়ারলআউটের ভিতরে রাখে এবং এটি দুর্দান্ত কাজ করবে।

public static void setListViewHeightBasedOnChildren(ListView listView) {
    ListAdapter listAdapter = listView.getAdapter(); 
    if (listAdapter == null) {
        // pre-condition
        return;
    }

    int totalHeight = 0;
    for (int i = 0; i < listAdapter.getCount(); i++) {
        View listItem = listAdapter.getView(i, null, listView);
        listItem.measure(0, 0);
        totalHeight += listItem.getMeasuredHeight();
    }

    ViewGroup.LayoutParams params = listView.getLayoutParams();
    params.height = totalHeight + (listView.getDividerHeight() * (listAdapter.getCount() - 1));
    listView.setLayoutParams(params);
    listView.requestLayout();
}

আপনার তালিকায় যদি প্যাডিং থাকে তবে আপনার এটিও যুক্ত করা উচিত: - ইন প্যাডিং = listView.getPaddingTop () + listView.getPaddingBottom ();
ডেভিড

হ্যাঁ, উচ্চতা গণনা করার সময় আপেক্ষিক লেআউট সমস্যা তৈরি করছে। আপেক্ষিক লেআউট সমস্যাটি ব্যাখ্যা করার জন্য ধন্যবাদ
অনিল রাবসাহেব ঘোদকে

5

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

@Override
public View getView(int position, View view, ViewGroup parent) {
    ViewHolder holder;
    if (view == null) {
        . . .
        view.setTag(holder);
    } else holder = (ViewHolder)view.getTag();
    . . .

    // measure ListView item (to solve 'ListView inside ScrollView' problem)
    view.measure(View.MeasureSpec.makeMeasureSpec(
                    View.MeasureSpec.UNSPECIFIED, View.MeasureSpec.UNSPECIFIED),
            View.MeasureSpec.makeMeasureSpec(0, View.MeasureSpec.UNSPECIFIED));
    return view;
}

5

আপনি সহজেই তালিকাভলুকে স্ক্রোলভিউতে রাখতে পারেন! প্রোগ্রামিস্টিকভাবে তালিকাভুক্তির উচ্চতা পরিবর্তন করতে হবে, এটির মতো:

    ViewGroup.LayoutParams listViewParams = (ViewGroup.LayoutParams)listView.getLayoutParams();
    listViewParams.height = 400;
    listView.requestLayout();

এটি পুরোপুরি কাজ করে!


3
যে কি গৃহীত উত্তর কিন্তু এর পরিবর্তে জাদুর নির্ধারণের এটা 400 থাকা জিনিসের আছে, এটা সঠিক উচ্চতা হিসাব করে। এইভাবে আপনার অনুমান করার দরকার নেই।
জেরোইন ভেনেভিল

যাদু বলতে "হাইট হাইট" বলতে কী বোঝ? কোনটি উচ্চতা হওয়া উচিত, কেবলমাত্র বিকাশকারী চয়ন করবেন - 400px বা পর্দার অর্ধেক। যাইহোক, যদি আপনাকে পূর্ণ স্ক্রিনে তালিকাভিত্তিক প্রয়োজন হয় তবে উচ্চতা অর্জনের আরও অনেক সহজ উপায় আছে, কেবল प्रदर्शनমিট্রিক্সের মাধ্যমে পর্দার উচ্চতা গণনা করতে এবং এই নম্বরটি তালিকাভিউয়ের উচ্চতায় স্থাপন করুন। এক্সডি
তারাস ওকুনেভ

4

প্রচুর গবেষণা ও উন্নয়ন সম্পন্ন হওয়ার পরে:

ফ্রেগমেন্ট_অন.এমএমএল দেখতে হওয়া উচিত:

<?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:id="@+id/scrollViewParent"
    android:orientation="vertical" >

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

        <RelativeLayout
            android:layout_width="match_parent"
            android:layout_height="400dip" >

            <ListView
                android:id="@+id/listView"
                android:layout_width="match_parent"
                android:layout_height="match_parent" />

            <View
                android:id="@+id/customView"
                android:layout_width="fill_parent"
                android:layout_height="fill_parent"
                android:background="@android:color/transparent" />
        </RelativeLayout>

        <!-- Your other elements are here -->

    </LinearLayout>

</ScrollView>

আপনার ফ্রেগমেন্টঅন.জাভা জাভা ক্লাসটি দেখে মনে হচ্ছে:

private ListView listView;
private View customView

onCreateView

listView = (ListView) rootView.findViewById(R.id.listView);
scrollViewParent = (ScrollView)rootView.findViewById(R.id.scrollViewParent);
customView = (View)rootView.findViewById(R.id.customView);

customView.setOnTouchListener(new View.OnTouchListener() {

            @Override
            public boolean onTouch(View v, MotionEvent event) {
                int action = event.getAction();
                switch (action) {
                    case MotionEvent.ACTION_DOWN:
                        // Disallow ScrollView to intercept touch events.
                        scrollViewParent.requestDisallowInterceptTouchEvent(true);
                        // Disable touch on transparent view
                        return false;

                    case MotionEvent.ACTION_UP:
                        // Allow ScrollView to intercept touch events.
                        scrollViewParent.requestDisallowInterceptTouchEvent(false);
                        return true;

                    case MotionEvent.ACTION_MOVE:
                        scrollViewParent.requestDisallowInterceptTouchEvent(true);
                        return false;

                    default:
                        return true;
                }
            }
        });

4

অরিজিনাল পোস্টার দ্বারা উত্পন্ন ইস্যুতে আমার একই সমস্যা ছিল - তালিকাটি স্ক্রোলভিউয়ের ভিতরে কীভাবে স্ক্রোল করা যায় - এবং এই উত্তরটি আমার সমস্যার সমাধান করে। একটি স্ক্রোলভিউয়ের মধ্যে থাকা তালিকাভিউয়ের স্ক্রোলিং অক্ষম করুন

আমি বিদ্যমান লেআউটগুলিতে বা টুকরো টুকরো কল করিনি, যেমন ওপি করছে, তাই আমার কোডটি এরকম দেখতে হবে:

<ScrollView
    android:id="@+id/scrollView1"
    android:layout_width="match_parent"
    android:layout_height="0dp"
    android:layout_weight="2"
    android:fillViewport="true"
    android:gravity="top" >

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


    <TextView
       android:id="@+id/fragment_dds_review_textView_label"
       android:layout_width="wrap_content"
       android:layout_height="wrap_content"
       android:text="Reviews:"
       android:textAppearance="?android:attr/textAppearanceMedium" />

   <ListView
       android:id="@+id/my_listView"
       android:layout_width="match_parent"
       android:layout_height="wrap_content">
   </ListView>

</LinearLayout>

</ScrollView>

মূলত আমি যা করছি তা হল তালিকার কল করার আগে দৈর্ঘ্যের পরীক্ষা করা এবং যখন আমি এটি কল করি তখন আমি এটিকে দৈর্ঘ্যে পরিণত করি। আপনার জাভা শ্রেণিতে এই ফাংশনটি ব্যবহার করুন:

public static void justifyListViewHeightBasedOnChildren (ListView listView) {

    ListAdapter adapter = listView.getAdapter();

    if (adapter == null) {
        return;
    }
    ViewGroup vg = listView;
    int totalHeight = 0;
    for (int i = 0; i < adapter.getCount(); i++) {
        View listItem = adapter.getView(i, null, vg);
        listItem.measure(0, 0);
        totalHeight += listItem.getMeasuredHeight();
    }

    ViewGroup.LayoutParams par = listView.getLayoutParams();
    par.height = totalHeight + (listView.getDividerHeight() * (adapter.getCount() - 1));
    listView.setLayoutParams(par);
    listView.requestLayout();
}

এবং ফাংশনটিকে এভাবে কল করুন:

justifyListViewHeightBasedOnChildren(listView);

ফলাফলটি কোনও স্ক্রোলবারবিহীন একটি তালিকা দর্শন নয়, তালিকাভিউয়ের পুরো দৈর্ঘ্য প্রদর্শিত হচ্ছে যা স্ক্রোলভিউয়ের স্ক্রোল বারের সাথে স্ক্রোল করে।


3

অন্যরা যেমন ইতিমধ্যে উল্লেখ করেছে, কোনও স্ক্রোলভিউয়ের মধ্যে তালিকাভিউ ব্যবহার করবেন না।

একযোগে কাজ করার জন্য, আপনি লিনিয়ারলআউট ব্যবহার করতে পারেন, তবে জিনিসগুলি পরিষ্কার রাখার জন্য - আপনার লিনিয়ারলআউটটিকে একটি অ্যাডাপ্টারের সাহায্যে পপুলেশন করুন, যেমন আপনি একটি তালিকাভিউ দিয়ে করেন

আপনি এই শ্রেণিকে লিনিয়ারলআউট প্রতিস্থাপন হিসাবে ব্যবহার করতে পারেন যা অ্যাডাপ্টারগুলিকে সমর্থন করে

import android.content.Context;
import android.database.DataSetObserver;
import android.util.AttributeSet;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.LinearLayout;

public class AdaptableLinearLayout extends LinearLayout {

private BaseAdapter mAdapter;

private int mItemCount = 0;

private boolean mDisableChildrenWhenDisabled = false;

private int mWidthMeasureSpec;
private int mHeightMeasureSpec;


public AdaptableLinearLayout(Context context, AttributeSet attrs) {
    super(context, attrs);
    // TODO Auto-generated constructor stub
}

public BaseAdapter getAdapter() {
    return mAdapter;
}

public void setAdapter(BaseAdapter adapter) {
    mAdapter = adapter;
    adapter.registerDataSetObserver(new DataSetObserver() {
        @Override
        public void onChanged() {
            updateLayout();
            super.onChanged();
        }

        @Override
        public void onInvalidated() {
            updateLayout();
            super.onInvalidated();
        }
    });
    updateLayout();
}

private void updateLayout() {
    mItemCount = mAdapter.getCount();
    requestLayout();
    invalidate();
}

/**
 * set size for the current View
 */
@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
    super.onMeasure(widthMeasureSpec, heightMeasureSpec);
    mWidthMeasureSpec = widthMeasureSpec;
    mHeightMeasureSpec = heightMeasureSpec;

    removeAllViewsInLayout();
    for (int i = 0; i < mItemCount; i++) {
        makeAndAddView(i);
    }
}

private View makeAndAddView(int position) {
    View child;

    // Nothing found in the recycler -- ask the adapter for a view
    child = mAdapter.getView(position, null, this);

    // Position the view
    setUpChild(child, position);

    return child;

}

private void setUpChild(View child, int position) {

    ViewGroup.LayoutParams lp = child.getLayoutParams();
    if (lp == null) {
        lp = generateDefaultLayoutParams();
    }
    addViewInLayout(child, position, lp);

    // Get measure specs
    int childHeightSpec = ViewGroup.getChildMeasureSpec(mHeightMeasureSpec, getPaddingTop() + getPaddingBottom(), lp.height);
    int childWidthSpec = ViewGroup.getChildMeasureSpec(mWidthMeasureSpec, getPaddingLeft() + getPaddingRight(), lp.width);

    // Measure child
    child.measure(childWidthSpec, childHeightSpec);

    int childLeft;
    int childRight;

    // Position vertically based on gravity setting
    int childTop = getPaddingTop() + ((getMeasuredHeight() - getPaddingBottom() - getPaddingTop() - child.getMeasuredHeight()) / 2);
    int childBottom = childTop + child.getMeasuredHeight();

    int width = child.getMeasuredWidth();
    childLeft = 0;
    childRight = childLeft + width;

    child.layout(childLeft, childTop, childRight, childBottom);

    if (mDisableChildrenWhenDisabled) {
        child.setEnabled(isEnabled());
    }
}
}

এটি কি পুনর্ব্যবহার পরিচালনা করে? বা অ্যাডাপ্টারটি পুনর্ব্যবহারের দর্শনগুলির জন্য দায়ী?
রেন এম এম

আমি এই ক্লাসটি বেশ কিছু সময় আগে বাস্তবায়ন করেছি, তাই আমি মনে করি ডিভ স্পিডের উদ্দেশ্যে আমি পুনর্ব্যবহারযোগ্য সমর্থন যোগ করিনি। আমি এখনই
কোডটিতে দেখছি

3

আপনি সব লিনিয়ার বিন্যাসে রাখতে পারেন। এটি, লিনিয়ার লেআউট তৈরি করুন এবং এটিতে 2 টি শিশু, স্ক্রোলভিউ এবং অন্য লিনিয়ার বিন্যাস থাকবে। তাদের বিন্যাসের ওজন দিন এবং আপনি এখানে যান:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="fill_parent"
android:orientation="vertical" >

<ScrollView
    android:layout_width="fill_parent"
    android:layout_height="0dip" android:layout_weight="0.8">

    <LinearLayout
        android:id="@+id/seTaskActivityRoot"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:background="@color/white"
        android:orientation="vertical" >

        <TextView
            android:id="@+id/textView1"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:text="@string/taskName" />


        <Spinner
            android:id="@+id/seTaskPrioritiesSP"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:layout_weight="1" />

        <TextView
            android:id="@+id/textView4"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:text="@string/taskTargetInNumeric" />

        <Spinner
            android:id="@+id/seTaskUnitsSP"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_weight="1" />

        <TextView
            android:id="@+id/textView6"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:text="@string/newTaskCurrentStatus" />

        <EditText
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:ems="10"
            android:hint="@string/addTaskCurrentStatus"
            android:inputType="numberDecimal" />


    </LinearLayout>
</ScrollView>

<LinearLayout
    android:layout_width="match_parent"
    android:layout_height="0dip"
    android:orientation="vertical" android:layout_weight="0.2">

    <TextView
        android:id="@+id/textView8"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="TextView" />

    <ListView
        android:id="@+id/logList"
        android:layout_width="match_parent"
        android:layout_height="wrap_content" >
    </ListView>

</LinearLayout>


3

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

http://developer.android.com/reference/android/widget/ScrollView.html


3

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

    public static void expandListViewHeight(ListView listView) {
    ListAdapter listAdapter = listView.getAdapter();
    if (listAdapter == null)
        return;

    ViewGroup.LayoutParams params = listView.getLayoutParams();
    listView.measure(0, 0);
    params.height = listView.getMeasuredHeight() * listAdapter.getCount() + (listView.getDividerHeight() * (listAdapter.getCount() - 1));
    listView.setLayoutParams(params);
}

আশা করি এটি কাউকে সাহায্য করবে।


2

একটি ListViewভিতরে কখনও লাগবেন না ScrollView! গুগলে আপনি এই বিষয় সম্পর্কে আরও তথ্য পেতে পারেন । আপনার ক্ষেত্রে, এর LinearLayoutপরিবর্তে একটি ব্যবহার ListViewকরুন এবং উপাদানগুলিকে প্রোগ্রামগতভাবে যুক্ত করুন।


3
ওহ ওকে আমি দেখতে পাচ্ছি, লিনিয়ারলআউটটি পূরণ করতে আমি কি এখনও অ্যাডাপ্টারের অনুরূপ ধারণাটি ব্যবহার করতে পারি?
Zapnologica

2

হালনাগাদ

<ScrollView
android:id="@+id/scrollView1"
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="2"
android:fillViewport="true"
android:gravity="top" >

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

প্রতি

<ScrollView
android:id="@+id/scrollView1"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_weight="2"
android:fillViewport="true"
android:gravity="top" >

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

এখানে মূল কথাটি হ'ল আপনি 0 ডিপি (স্থির) উচ্চতা নির্ধারণ করার চেষ্টা করছেন


এটি এটি যাতে ওজন এটি প্রভাবিত করে।
Zapnologica

আপনি কি চাইছেন উপরের দিকে পণ্য চিত্র এবং বামপাঠের দৃশ্যটি স্ক্রোলযোগ্য হোক? যদি তাই হয় তবে আপনার স্ক্রোল ভিউয়ের মধ্যে এই দুটি আইটেমটি বাইরে বের করা উচিত কারণ আমি দেখতে পাচ্ছি যে তারা বর্তমানে নেই
রজনীশ মিশ্র

আমি বর্তমানে প্রোগ্রামক্রমে স্ক্রোলভিউয়ের অভ্যন্তরে রৈখিক বিন্যাসে তাদের যুক্ত করার সাথে সাথে তারা বর্তমানে স্ক্রোলভিউয়ের অভ্যন্তরে রয়েছে। যদি আমার যুক্তি সঠিক হয় তবে শিশুরাও স্ক্রোলভিউয়ের সাথে থাকা উচিত।
Zapnologica

2

স্ক্রোলভিউ -> ভিউপ্যাজার -> ফ্রেগমেন্টপেজারএডাপ্টার -> খণ্ড -> গতিশীল তালিকাভিউয়ের জন্য একটি সমাধান খুঁজে পেয়েছি তবে লেখক নন। কিছু বাগ রয়েছে তবে কমপক্ষে এটি কাজ করে

public class CustomPager extends ViewPager {

    private View mCurrentView;

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

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

    @Override
    public void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
        if (mCurrentView == null) {
            super.onMeasure(widthMeasureSpec, heightMeasureSpec);
            return;
        }
        int height = 0;
        mCurrentView.measure(widthMeasureSpec, MeasureSpec.makeMeasureSpec(0, MeasureSpec.UNSPECIFIED));
        int h = mCurrentView.getMeasuredHeight();
        if (h > height) height = h;
        heightMeasureSpec = MeasureSpec.makeMeasureSpec(height, MeasureSpec.EXACTLY);

        super.onMeasure(widthMeasureSpec, heightMeasureSpec);
    }

    public void measureCurrentView(View currentView) {
        mCurrentView = currentView;
        this.post(new Runnable() {
            @Override
            public void run() {
                requestLayout();
            }
        });
    }

    public int measureFragment(View view) {
        if (view == null)
            return 0;

        view.measure(0, 0);
        return view.getMeasuredHeight();
    }
}


public class MyPagerAdapter extends FragmentPagerAdapter {

    private List<Fragment> fragments;
    private int mCurrentPosition = -1;


    public MyPagerAdapter(FragmentManager fm) {
        super(fm);//or u can set them separately, but dont forget to call notifyDataSetChanged()
        this.fragments = new ArrayList<Fragment>();
        fragments.add(new FirstFragment());
        fragments.add(new SecondFragment());
        fragments.add(new ThirdFragment());
        fragments.add(new FourthFragment());
    }

    @Override
    public void setPrimaryItem(ViewGroup container, int position, Object object) {
        super.setPrimaryItem(container, position, object);
        if (position != mCurrentPosition) {
            Fragment fragment = (Fragment) object;
            CustomPager pager = (CustomPager) container;
            if (fragment != null && fragment.getView() != null) {
                mCurrentPosition = position;
                pager.measureCurrentView(fragment.getView());
            }
        }
    }

    @Override
    public Fragment getItem(int position) {
        return fragments.get(position);
    }

    @Override
    public int getCount() {
        return fragments.size();
    }
}

টুকরা বিন্যাস কিছু হতে পারে

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent"
android:orientation="vertical"
    android:layout_height="match_parent" tools:context="nevet.me.wcviewpagersample.FirstFragment">


    <ListView
        android:id="@+id/lv1"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:background="#991199"/>
</LinearLayout>

তারপর কোথাও ঠিক

lv = (ListView) view.findViewById(R.id.lv1);
        lv.setAdapter(arrayAdapter);
        setListViewHeightBasedOnChildren(lv);
    }

    public static void setListViewHeightBasedOnChildren(ListView listView) {
        ListAdapter listAdapter = listView.getAdapter();
        if (listAdapter == null)
            return;

        int desiredWidth = View.MeasureSpec.makeMeasureSpec(listView.getWidth(),
                View.MeasureSpec.UNSPECIFIED);
        int totalHeight = 0;
        View view = null;
        for (int i = 0; i < listAdapter.getCount(); i++) {
            view = listAdapter.getView(i, view, listView);
            if (i == 0)
                view.setLayoutParams(new ViewGroup.LayoutParams(desiredWidth,
                        LinearLayout.LayoutParams.WRAP_CONTENT));

            view.measure(desiredWidth, View.MeasureSpec.UNSPECIFIED);
            totalHeight += view.getMeasuredHeight();
        }
        ViewGroup.LayoutParams params = listView.getLayoutParams();
        params.height = totalHeight
                + (listView.getDividerHeight() * (listAdapter.getCount() - 1));
        listView.setLayoutParams(params);
        listView.requestLayout();
    }

2
  • তালিকা-ভিউয়ের ভিতরে স্ক্রোল-ভিউ ব্যবহার করা সম্ভব নয় কারণ তালিকা-দর্শনটিতে ইতিমধ্যে স্ক্রল করার সম্পত্তি রয়েছে।
  • স্ক্রোল-ভিউয়ের মধ্যে তালিকা-দর্শনটি ব্যবহার করতে আপনি এই পদক্ষেপগুলি অনুসরণ করতে পারেন যা আমার পক্ষে কাজ করেছে:

    1) ননস্ক্রোললিস্টভিউ জাভা ফাইল তৈরি করুন যা তালিকার ভিউয়ের ডিফল্ট স্ক্রোলিং সম্পত্তি অক্ষম করে। এবং কোডটি নীচে রয়েছে

    package your-package-structure;
    
    import android.content.Context;
    import android.util.AttributeSet;
    import android.view.ViewGroup;
    import android.widget.ListView;
    
    public class NonScrollListView extends ListView {
    
      public NonScrollListView(Context context) {
          super(context);
      }
      public NonScrollListView(Context context, AttributeSet attrs) {
          super(context, attrs);
      }
      public NonScrollListView(Context context, AttributeSet attrs, int defStyle) {
          super(context, attrs, defStyle);
      }
      @Override
      public void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
        int heightMeasureSpec_custom = MeasureSpec.makeMeasureSpec(
                Integer.MAX_VALUE >> 2, MeasureSpec.AT_MOST);
        super.onMeasure(widthMeasureSpec, heightMeasureSpec_custom);
        ViewGroup.LayoutParams params = getLayoutParams();
        params.height = getMeasuredHeight();
      }
    }

    2) এখন এক্সএমএল ফাইল তৈরি করুন যা আপনার আইটেমগুলির তালিকা তৈরির জন্য NestedScrollViewএই ব্যবহারটি রয়েছে inside NonScrollListViewএটি আপনার সম্পূর্ণ স্ক্রিনটি সমস্ত দর্শন দিয়ে স্ক্রোল করে তুলবে।

            <LinearLayout
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:layout_weight="1"
                android:orientation="vertical">
                <ViewFlipper
    
                    android:id="@+id/v_flipper"
                    android:layout_width="match_parent"
                    android:layout_height="130dp">
                </ViewFlipper>
                <TextView
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content"
    
                    android:text="SHOP"
                    android:textSize="15dp"
                    android:textStyle="bold"
                    android:gravity="center"
                    android:padding="5dp"
                    android:layout_marginTop="15dp"
                    android:layout_marginBottom="5dp"
                    android:layout_marginLeft="8dp"
                    android:layout_marginRight="8dp"/>
                <View
                    android:layout_width="match_parent"
                    android:layout_height="1dp"
    
                    android:layout_marginBottom="8dp"
                    android:layout_marginLeft="8dp"
                    android:layout_marginRight="8dp"
                    android:background="#ddd"/>
            </LinearLayout>
            <LinearLayout
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:orientation="vertical"
                android:layout_weight="1"
                >
                <com.abc.xyz.NonScrollListView
                    android:id="@+id/listview"
    
                    android:divider="@null"
                    android:layout_width="match_parent"
                    android:layout_marginBottom="10dp"
                    android:layout_height="match_parent"
                    android:padding="8dp">
                </com.abc.xyz.NonScrollListView>
            </LinearLayout>
    
           <LinearLayout
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
    
                android:gravity="bottom">
                <include layout="@layout/footer" />
            </LinearLayout>
    
        </LinearLayout>

    3) এখন জাভা ক্লাসে অর্থাৎ home.java এর NonScrollListViewপরিবর্তে সংজ্ঞায়িত করুন Listview

    package comabc.xyz.landscapeapp;
    import android.content.Intent;
    import android.support.annotation.NonNull;
    import android.support.annotation.Nullable;
    import android.support.v4.app.Fragment;
    import android.os.Bundle;
    import android.support.v4.app.FragmentTransaction;
    import android.util.Log;
    import android.view.LayoutInflater;
    import android.view.View;
    import android.view.ViewGroup;
    import android.widget.AdapterView;
    import android.widget.Button;
    import android.widget.ImageView;
    
    import android.widget.ListView;
    import android.widget.Toast;
    import android.widget.Toolbar;
    import android.widget.ViewFlipper;

    পাবলিক ক্লাস হোম টুকরো টুকরো টুকরো টুকরো টুকরো টুকরো টুকরো টুকরো; ভিউফ্লিপার v_flipper;

    @Nullable
    @Override
    public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
        View view = inflater.inflate(R.layout.activity_home, container, false);
        return view;
    }
    
    @Override
    public void onViewCreated(@NonNull final View view, @Nullable Bundle savedInstanceState) {
        NonScrollListView listView = (NonScrollListView) view.findViewById(R.id.listview);
        customAdapter customAdapter = new customAdapter(getActivity());
        listView.setAdapter(customAdapter);
        listView.setFocusable(false);
    
        customAdapter.notifyDataSetChanged();
        listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
                Log.d("listview click", "onItemClick: ");
               /* FragmentTransaction fr = getFragmentManager().beginTransaction().replace(R.id.fragment_container, new productdisplay());
    
                fr.putExtra("Position", position);
                fr.addToBackStack("tag");
                fr.commit();*/
                Intent intent = new Intent(getActivity(), productdisplay.class);
                intent.putExtra("Position", position);
                startActivity(intent);
            }
        });
    
    
        //image slider
        int images[] = {R.drawable.slide1, R.drawable.slide2, R.drawable.slide3};
        v_flipper = view.findViewById(R.id.v_flipper);
        for (int image : images) {
            flipperImages(image);
    
        }
    }
    
    private void flipperImages(int image) {
        ImageView imageView = new ImageView(getActivity());
        imageView.setBackgroundResource(image);
    
        v_flipper.addView(imageView);
        v_flipper.setFlipInterval(4000);
        v_flipper.setAutoStart(true);
    
        v_flipper.setInAnimation(getActivity(), android.R.anim.slide_in_left);
        v_flipper.setOutAnimation(getActivity(), android.R.anim.slide_out_right);
    }
    }

    দ্রষ্টব্য: আমি Fragmentsএখানে ব্যবহার করেছি ।


1

ঠিক আছে, আমার উত্তর এখানে। তালিকাগুলির উচ্চতা স্থির করে দেওয়ার পদ্ধতিটি যথেষ্ট পরিমাণে বন্ধ থাকলেও নিখুঁত নয়। যদি বেশিরভাগ আইটেমগুলির উচ্চতা একই হয় তবে এটি ভালভাবে কাজ করে। তবে যদি তা না হয় তবে একটি বড় সমস্যা আছে। আমি অনেকবার চেষ্টা করেছি এবং যখন আমি লগটিতে তালিকাভুক্ত আইটেম.টেটমিজার হাইট এবং listItem.getMeasuerWidth এর মানটি রেখেছি তখন আমি প্রস্থের মানগুলি অনেক বেশি পরিবর্তিত দেখতে পেয়েছি, যা এখানে প্রত্যাশিত নয়, যেহেতু একই তালিকাভিউয়ের সমস্ত আইটেমটি হওয়া উচিত একই প্রস্থ আছে। এবং সেখানে বাগ যান:

কিছু ব্যবহৃত পরিমাপ (0, 0), যা উভয় দিক এবং প্রস্থের চালকে বন্যাকে বাস্তবে সীমাহীন করে তোলে। কিছু তালিকাভিউয়ের প্রশস্ততা পাওয়ার চেষ্টা করেছিল, কিন্তু তারপরে এটি 0 ফেরত দেয়, অর্থহীন।

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

এবার আমি লাইটভিউতে getViewTreeObserver ব্যবহার করি যা আমি উচ্চতা ঠিক করতে চাই, তারপরে যোগব্লোবাললয়আউটলিস্টনার যুক্ত করুন। এই পদ্ধতির অভ্যন্তরে, আমি একটি নতুন অনGlobalLayoutListener ঘোষণা, যা এই সময়, getWidth তালিকার ভিউ এর প্রকৃত প্রস্থ ফিরে।

private void getLayoutWidth(final ListView lv, final int pad){
        //final ArrayList<Integer> width = new ArrayList<Integer>();

        ViewTreeObserver vto = lv.getViewTreeObserver();
        vto.addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {
            @Override
            public void onGlobalLayout() {
                lv.getViewTreeObserver().removeOnGlobalLayoutListener(this);
                //width.add(layout.getMeasuredWidth());
                int width = lv.getMeasuredWidth();
                ListUtils.setDynamicHeight(lv, width, pad);
            }
        });
    }

public static class ListUtils {
        //private static final int UNBOUNDED = View.MeasureSpec.makeMeasureSpec(0, View.MeasureSpec.UNSPECIFIED);
        public static void setDynamicHeight(ListView mListView, int width, int pad) {
            ListAdapter mListAdapter = mListView.getAdapter();
            mListView.getParent();
            if (mListAdapter == null) {
                // when adapter is null
                return;
            }
            int height = 0;


            int desiredWidth = View.MeasureSpec.makeMeasureSpec(width - 2*pad, View.MeasureSpec.EXACTLY);
            for (int i = 0; i < mListAdapter.getCount(); i++) {
                View listItem = mListAdapter.getView(i, null, mListView);

                listItem.measure(desiredWidth, View.MeasureSpec.UNSPECIFIED);
                //listItem.measure(UNBOUNDED, UNBOUNDED);
                height += listItem.getMeasuredHeight() + 2*pad;
                Log.v("ViewHeight :", mListAdapter.getClass().toString() + " " + listItem.getMeasuredHeight() + "--" + listItem.getMeasuredWidth());
            }
            ViewGroup.LayoutParams params = mListView.getLayoutParams();
            params.height = height + (mListView.getDividerHeight() * (mListAdapter.getCount() - 1));
            mListView.setLayoutParams(params);
            mListView.requestLayout();
        }
    }

মান প্যাড, তালিকাগুলি বিন্যাসে সেট করা প্যাডিং।


1

যদি কোনও কারণে আপনি ব্যবহার করতে চান না addHeaderViewএবং addFooterViewযেমন, যখন আপনার বেশ কয়েকটি তালিকা রয়েছে, তখন একটি ভাল ধারণা ListAdapterহ'ল কোনও সরল লোককে পুনরায় ব্যবহার করতে হবে LinearLayoutযাতে কোনও স্ক্রোলিং কার্যকারিতা নেই।

আপনার যদি ইতিমধ্যে একটি সম্পূর্ণ টুকরোটি উদ্ভূত হয়েছে ListFragmentএবং LinearLayoutপরিবর্তে স্ক্রোল না করে এটিকে সরল একটি অনুরূপ খণ্ডে রূপান্তর করতে চান (যেমন এটি স্ক্রোলভিউতে রাখার জন্য), আপনি এই জাতীয় অ্যাডাপ্টারের টুকরোটি প্রয়োগ করতে পারেন:

// converts listFragment to linearLayout (no scrolling)
// please call init() after fragment is inflated to set listFragment to convert
public class ListAsArrayFragment extends Fragment {
    public ListAsArrayFragment() {}

    private ListFragment mListFragment;
    private LinearLayout mRootView;


    // please call me!
    public void init(Activity activity, ListFragment listFragment){
        mListFragment = listFragment;
        mListFragment.onAttach(activity);
        mListFragment.getListAdapter().registerDataSetObserver(new DataSetObserver() {
            @Override
            public void onChanged() {
                super.onChanged();
                refreshView();
            }
        });
    }


    @Nullable
    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        // create an empty vertical LinearLayout as the root view of this fragment
        mRootView = new LinearLayout(getActivity());
        mRootView.setLayoutParams(new ViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT));
        mRootView.setOrientation(LinearLayout.VERTICAL);
        return mRootView;
    }

    // reusing views for performance
    // todo: support for more than one view type
    ArrayList<View> mViewsToReuse = new ArrayList<>();
    ArrayList<View> mCurrentViews = new ArrayList<>();

    // re-add views to linearLayout
    void refreshView(){

        // remove old views from linearLayout and move them to mViewsToReuse
        mRootView.removeAllViews();
        mViewsToReuse.addAll(mCurrentViews);
        mCurrentViews.clear();

        // create new views
        for(int i=0; i<mListFragment.getListAdapter().getCount(); ++i){
            View viewToReuse = null;
            if(!mViewsToReuse.isEmpty()){
                viewToReuse = mViewsToReuse.get(mViewsToReuse.size()-1);
                mViewsToReuse.remove(mViewsToReuse.size()-1);
            }
            final View view = mListFragment.getListAdapter().getView(i, viewToReuse, mRootView);
            ViewGroup.LayoutParams oldParams = view.getLayoutParams();
            view.setLayoutParams(new LinearLayout.LayoutParams(oldParams.width, oldParams.height));
            final int finalI = i;

            // pass click events to listFragment
            view.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    mListFragment.onListItemClick(null, view, finalI, finalI);
                }
            });
            mRootView.addView(view);
            mCurrentViews.add(view);
        }
    }

এছাড়াও আপনি ফরোয়ার্ড করতে পারেন onCreate, onPause, onResume, ইত্যাদি মূল টুকরা আপনার চাহিদার উপর নির্ভর বা রচনা পরিবর্তে উত্তরাধিকার চেষ্টা (কিন্তু নির্দিষ্ট পদ্ধতি ওভাররাইড তাই মূল টুকরা আসলে বিন্যাস অনুক্রমের সংযুক্ত করা হয় না); তবে আমি মূল খণ্ডটিকে যথাসম্ভব আলাদা করতে চেয়েছিলাম, কারণ আমাদের কেবল এটির এক্সট্র্যাক্ট করতে হবে ListAdapter। আপনি আসল টুকরা এর কল তাহলে setListAdapterমধ্যে onAttach, যে সম্ভবত যথেষ্ট।

স্ক্রোলিং ছাড়া কীভাবে ListAsArrayFragmentঅন্তর্ভুক্ত করতে ব্যবহার করবেন তা এখানে OriginalListFragment। পিতামাতার ক্রিয়াকলাপে onCreate:

ListAsArrayFragment fragment = (ListAsArrayFragment) getFragmentManager().findFragmentById(R.id.someFragmentId);
OriginalListFragment originalFragment = new OriginalListFragment();
fragment.init(this, originalFragment);

// now access originalFragment.getListAdapter() to modify list entries
// and remember to call notifyDatasetChanged()

1

স্ক্রোলভিউ -> ভিউপ্যাজার -> ফ্রেগমেন্টপেজারএডাপ্টার -> খণ্ড -> গতিশীল তালিকাভিউয়ের জন্য একটি সমাধান খুঁজে পেয়েছি তবে লেখক নন।

public class CustomPager extends ViewPager {

    private View mCurrentView;

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

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

    @Override
    public void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
        if (mCurrentView == null) {
            super.onMeasure(widthMeasureSpec, heightMeasureSpec);
            return;
        }
        int height = 0;
        mCurrentView.measure(widthMeasureSpec, MeasureSpec.makeMeasureSpec(0, MeasureSpec.UNSPECIFIED));
        int h = mCurrentView.getMeasuredHeight();
        if (h > height) height = h;
        heightMeasureSpec = MeasureSpec.makeMeasureSpec(height, MeasureSpec.EXACTLY);

        super.onMeasure(widthMeasureSpec, heightMeasureSpec);
    }

    public void measureCurrentView(View currentView) {
        mCurrentView = currentView;
        this.post(new Runnable() {
            @Override
            public void run() {
                requestLayout();
            }
        });
    }

    public int measureFragment(View view) {
        if (view == null)
            return 0;

        view.measure(0, 0);
        return view.getMeasuredHeight();
    }
}


public class MyPagerAdapter extends FragmentPagerAdapter {

    private List<Fragment> fragments;
    private int mCurrentPosition = -1;


    public MyPagerAdapter(FragmentManager fm) {
        super(fm);//or u can set them separately, but dont forget to call notifyDataSetChanged()
        this.fragments = new ArrayList<Fragment>();
        fragments.add(new FirstFragment());
        fragments.add(new SecondFragment());
        fragments.add(new ThirdFragment());
        fragments.add(new FourthFragment());
    }

    @Override
    public void setPrimaryItem(ViewGroup container, int position, Object object) {
        super.setPrimaryItem(container, position, object);
        if (position != mCurrentPosition) {
            Fragment fragment = (Fragment) object;
            CustomPager pager = (CustomPager) container;
            if (fragment != null && fragment.getView() != null) {
                mCurrentPosition = position;
                pager.measureCurrentView(fragment.getView());
            }
        }
    }

    @Override
    public Fragment getItem(int position) {
        return fragments.get(position);
    }

    @Override
    public int getCount() {
        return fragments.size();
    }
}

টুকরা বিন্যাস কিছু হতে পারে

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent"
android:orientation="vertical"
    android:layout_height="match_parent" tools:context="nevet.me.wcviewpagersample.FirstFragment">


    <ListView
        android:id="@+id/lv1"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:background="#991199"/>
</LinearLayout>

তারপর কোথাও ঠিক

 lv = (ListView) view.findViewById(R.id.lv1);
        lv.setAdapter(arrayAdapter);
        setListViewHeightBasedOnChildren(lv);
    }

    public static void setListViewHeightBasedOnChildren(ListView listView) {
        ListAdapter listAdapter = listView.getAdapter();
        if (listAdapter == null)
            return;

        int desiredWidth = View.MeasureSpec.makeMeasureSpec(listView.getWidth(),
                View.MeasureSpec.UNSPECIFIED);
        int totalHeight = 0;
        View view = null;
        for (int i = 0; i < listAdapter.getCount(); i++) {
            view = listAdapter.getView(i, view, listView);
            if (i == 0)
                view.setLayoutParams(new ViewGroup.LayoutParams(desiredWidth,
                        LinearLayout.LayoutParams.WRAP_CONTENT));

            view.measure(desiredWidth, View.MeasureSpec.UNSPECIFIED);
            totalHeight += view.getMeasuredHeight();
        }
        ViewGroup.LayoutParams params = listView.getLayoutParams();
        params.height = totalHeight
                + (listView.getDividerHeight() * (listAdapter.getCount() - 1));
        listView.setLayoutParams(params);
        listView.requestLayout();
    }

1

আমার জন্য কাজ করা এই তালিকাভিউটি ব্যবহার করে

   package net.londatiga.android.widget;

      import android.util.AttributeSet;
      import android.view.ViewGroup;
      import android.widget.ListView;
      import android.content.Context;

   public class ExpandableHeightListView extends ListView
      {

    boolean expanded = false;

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

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

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

public boolean isExpanded()
{
    return expanded;
}

@Override
public void onMeasure(int widthMeasureSpec, int heightMeasureSpec)
{
    // HACK! TAKE THAT ANDROID!
    if (isExpanded())
    {
        // Calculate entire height by providing a very large height hint.
        // But do not use the highest 2 bits of this integer; those are
        // reserved for the MeasureSpec mode.
        int expandSpec = MeasureSpec.makeMeasureSpec(
                Integer.MAX_VALUE >> 2, MeasureSpec.AT_MOST);
        super.onMeasure(widthMeasureSpec, expandSpec);

        ViewGroup.LayoutParams params = getLayoutParams();
        params.height = getMeasuredHeight();
    }
    else
    {
        super.onMeasure(widthMeasureSpec, heightMeasureSpec);
    }
}

public void setExpanded(boolean expanded)
{
    this.expanded = expanded;
}
}

এবং এক্সএমএলে

            <com.pakagename.ExpandableHeightListView
                android:id="@+id/expandableHeightListView"
                android:layout_width="match_parent"
                android:layout_height="wrap_content" >
            </com.Example.ExpandableHeightListView>

এবং মেইনএকটিভিটিতে

  ExpandableHeightListView listView = new ExpandableHeightListView(this);
    listview=(ExpandableHeightListView)findViewById(R.id.expandableHeightListView);
   listView.setAdapter(adapter); //set your adaper
   listView.setExpanded(true);

আরও তথ্যের জন্য এবং কিভাবে স্ক্রোল ভিউয়ের মধ্যে গ্রিডভিউ রাখা যায় তা জানতে এই নিবন্ধটি দেখুন


1

এক্সএমএলে:

<com.example.util.NestedListView
                    android:layout_marginTop="10dp"
                    android:id="@+id/listview"
                    android:layout_width="fill_parent"
                    android:layout_height="fill_parent"
                    android:divider="@null"

                    android:layout_below="@+id/rl_delivery_type" >
                </com.example.util.NestedListView>

জাভাতে:

public class NestedListView extends ListView implements View.OnTouchListener, AbsListView.OnScrollListener {

    private int listViewTouchAction;
    private static final int MAXIMUM_LIST_ITEMS_VIEWABLE = 99;

    public NestedListView(Context context, AttributeSet attrs) {
        super(context, attrs);
        listViewTouchAction = -1;
        setOnScrollListener(this);
        setOnTouchListener(this);
    }

    @Override
    public void onScroll(AbsListView view, int firstVisibleItem,
                         int visibleItemCount, int totalItemCount) {
        if (getAdapter() != null && getAdapter().getCount() > MAXIMUM_LIST_ITEMS_VIEWABLE) {
            if (listViewTouchAction == MotionEvent.ACTION_MOVE) {
                scrollBy(0, -1);
            }
        }
    }

    @Override
    public void onScrollStateChanged(AbsListView view, int scrollState) {
    }

    @Override
    protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
        super.onMeasure(widthMeasureSpec, heightMeasureSpec);

        int newHeight = 0;
        final int heightMode = MeasureSpec.getMode(heightMeasureSpec);
        int heightSize = MeasureSpec.getSize(heightMeasureSpec);
        if (heightMode != MeasureSpec.EXACTLY) {
            ListAdapter listAdapter = getAdapter();
            if (listAdapter != null && !listAdapter.isEmpty()) {
                int listPosition = 0;
                for (listPosition = 0; listPosition < listAdapter.getCount()
                        && listPosition < MAXIMUM_LIST_ITEMS_VIEWABLE; listPosition++) {
                    View listItem = listAdapter.getView(listPosition, null, this);
                    //now it will not throw a NPE if listItem is a ViewGroup instance
                    if (listItem instanceof ViewGroup) {
                        listItem.setLayoutParams(new LayoutParams(
                                LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT));
                    }
                    listItem.measure(widthMeasureSpec, heightMeasureSpec);
                    newHeight += listItem.getMeasuredHeight();
                }
                newHeight += getDividerHeight() * listPosition;
            }
            if ((heightMode == MeasureSpec.AT_MOST) && (newHeight > heightSize)) {
                if (newHeight > heightSize) {
                    newHeight = heightSize;
                }
            }
        } else {
            newHeight = getMeasuredHeight();
        }
        setMeasuredDimension(getMeasuredWidth(), newHeight);
    }

    @Override
    public boolean onTouch(View v, MotionEvent event) {
        if (getAdapter() != null && getAdapter().getCount() > MAXIMUM_LIST_ITEMS_VIEWABLE) {
            if (listViewTouchAction == MotionEvent.ACTION_MOVE) {
                scrollBy(0, 1);
            }
        }
        return false;
    }
}

0

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


0

এটি আমার জন্য কাজ করেছে ( লিঙ্ক 1 , লিঙ্ক 2 ):

  • আপনি কাস্টম তালিকাভিউ তৈরি করুন যা স্ক্রোলযোগ্য নয় non

    public class NonScrollListView extends ListView {
    
            public NonScrollListView(Context context) {
                super(context);
            }
            public NonScrollListView(Context context, AttributeSet attrs) {
                super(context, attrs);
            }
            public NonScrollListView(Context context, AttributeSet attrs, int defStyle) {
                super(context, attrs, defStyle);
            }
            @Override
            public void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
                int heightMeasureSpec_custom = View.MeasureSpec.makeMeasureSpec(
                        Integer.MAX_VALUE >> 2, View.MeasureSpec.AT_MOST);
                super.onMeasure(widthMeasureSpec, heightMeasureSpec_custom);
                ViewGroup.LayoutParams params = getLayoutParams();
                params.height = getMeasuredHeight();
            }
        }
  • আপনার লেআউট ফাইলে

    <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="match_parent"
            android:layout_height="wrap_content" >
    
            <!-- com.Example Changed with your Package name -->
    
            <com.thedeveloperworldisyours.view.NonScrollListView
                android:id="@+id/lv_nonscroll_list"
                android:layout_width="match_parent"
                android:layout_height="wrap_content" >
            </com.thedeveloperworldisyours.view.NonScrollListView>
    
            <RelativeLayout
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:layout_below="@+id/lv_nonscroll_list" >
    
                <!-- Your another layout in scroll view -->
    
            </RelativeLayout>
        </RelativeLayout>
    
    </ScrollView>
  • তালিকাগুলির পরিবর্তে আপনার কাস্টমলিস্টভিউয়ের কোনও অবজেক্ট তৈরি করুন:

     NonScrollListView non_scroll_list = (NonScrollListView) findViewById(R.id.lv_nonscroll_list);

0

তালিকাভিউতে অ্যাডাপ্টার বরাদ্দের পরে এই ফাংশনটি কল করুন

public static void setListViewHeightBasedOnChildren
            (ListView listView) {
        ListAdapter listAdapter = listView.getAdapter();
        if (listAdapter == null) return;

        int desiredWidth = View.MeasureSpec.makeMeasureSpec(listView.getWidth(),
                View.MeasureSpec.UNSPECIFIED);
        int totalHeight = 0;
        View view = null;
        for (int i = 0; i < listAdapter.getCount(); i++) {
            view = listAdapter.getView(i, view, listView);
            if (i == 0) view.setLayoutParams(new
                    ViewGroup.LayoutParams(desiredWidth,
                    ViewGroup.LayoutParams.WRAP_CONTENT));

            view.measure(desiredWidth, View.MeasureSpec.UNSPECIFIED);
            totalHeight += view.getMeasuredHeight();
        }

        ViewGroup.LayoutParams params = listView.getLayoutParams();

        params.height = totalHeight + (listView.getDividerHeight() *
                (listAdapter.getCount() - 1));

        listView.setLayoutParams(params);
        listView.requestLayout();
    } 

-1
listView.setOnTouchListener(new View.OnTouchListener() {

@Override
public boolean onTouch(View v, MotionEvent event) {
    scrollView.requestDisallowInterceptTouchEvent(true);

    int action = event.getActionMasked();

    switch (action) {
        case MotionEvent.ACTION_UP:
            scrollView.requestDisallowInterceptTouchEvent(false);
            break;
    }

    return false;
}
});

-1

সেরা কোড

 <android.support.v4.widget.NestedScrollView
    android:id="@+id/scrollView1"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:layout_above="@+id/btmlyt"
    android:layout_below="@+id/deshead_tv">

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

    <TextView
        android:id="@+id/des_tv"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_above="@+id/btmlyt"
        android:background="@android:color/white"
        android:paddingLeft="3dp"
        android:paddingRight="3dp"
        android:scrollbars="vertical"
        android:paddingTop="3dp"
        android:text="description"
        android:textColor="@android:color/black"
        android:textSize="18sp" />
    </LinearLayout>

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