Computer >> कंप्यूटर ट्यूटोरियल >  >> प्रोग्रामिंग >> Android

Android में GridView स्क्रॉलिंग अक्षम करना

Android GridView में टच/स्क्रॉल इवेंट ब्लॉक करना

यह उदाहरण दर्शाता है कि GridView पर OnTouchListener का उपयोग करके स्क्रॉलिंग कैसे अक्षम की जाती है, जबकि आइटम क्लिक अभी भी काम करते हैं।

चरण 1: नया प्रोजेक्ट बनाएं

Android Studio में File → New Project चुनें और प्रोजेक्ट बनाएं।

चरण 2: लेआउट - GridView

res/layout/activity_main.xml:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="https://schemas.android.com/apk/res/android"
    xmlns:tools="https://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:padding="8dp"
    tools:context=".MainActivity">

    <GridView
        android:id="@+id/gridLayout"
        android:layout_width="match_parent"
        android:layout_height="match_parent" />

</RelativeLayout>

चरण 3: MainActivity.java - स्क्रॉलिंग अक्षम करना

import androidx.appcompat.app.AppCompatActivity;
import android.annotation.SuppressLint;
import android.content.Context;
import android.os.Bundle;
import android.view.MotionEvent;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.GridView;
import android.widget.ImageView;
import android.widget.Toast;

public class MainActivity extends AppCompatActivity {
    GridView gridView;
    Integer[] imageIDs = {
        R.drawable.one, R.drawable.two, R.drawable.three, R.drawable.four,
        R.drawable.five, R.drawable.six, R.drawable.seven, R.drawable.eight,
        R.drawable.nine, R.drawable.ten
    };

    @SuppressLint("ClickableViewAccessibility")
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        
        gridView = findViewById(R.id.gridLayout);
        gridView.setAdapter(new ImageAdapterGridView(this));
        
        // स्क्रॉलिंग अक्षम करें - ACTION_MOVE को कंज्यूम करें
        gridView.setOnTouchListener(new View.OnTouchListener() {
            @Override
            public boolean onTouch(View v, MotionEvent event) {
                if (event.getAction() == MotionEvent.ACTION_MOVE) {
                    Toast.makeText(MainActivity.this, "स्क्रॉलिंग अक्षम है", Toast.LENGTH_SHORT).show();
                    return true; // इवेंट कंज्यूम करें - स्क्रॉल नहीं होगा
                }
                return false; // अन्य इवेंट (क्लिक, आदि) पास होने दें
            }
        });
    }

    public class ImageAdapterGridView extends BaseAdapter {
        private Context context;
        
        ImageAdapterGridView(Context c) { context = c; }
        
        public int getCount() { return imageIDs.length; }
        public Object getItem(int position) { return null; }
        public long getItemId(int position) { return 0; }
        
        public View getView(int position, View convertView, ViewGroup parent) {
            ImageView imageView;
            if (convertView == null) {
                imageView = new ImageView(context);
                imageView.setLayoutParams(new GridView.LayoutParams(
                    ViewGroup.LayoutParams.WRAP_CONTENT,
                    ViewGroup.LayoutParams.MATCH_PARENT));
                imageView.setScaleType(ImageView.ScaleType.CENTER_CROP);
                imageView.setPadding(20, 20, 20, 20);
            } else {
                imageView = (ImageView) convertView;
            }
            imageView.setImageResource(imageIDs[position]);
            return imageView;
        }
    }
}

चरण 4: AndroidManifest.xml

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="https://schemas.android.com/apk/res/android"
    package="app.com.sample">
    
    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:roundIcon="@mipmap/ic_launcher_round"
        android:supportsRtl="true"
        android:theme="@style/AppTheme">
        
        <activity android:name=".MainActivity">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
        
    </application>
</manifest>

कैसे काम करता है

  • OnTouchListener सभी टच इवेंट्स इंटरसेप्ट करता है
  • ACTION_MOVE (स्क्रॉल जेस्चर) पर true रिटर्न करके इवेंट कंज्यूम होता है
  • ACTION_DOWN, ACTION_UP (क्लिक) पर false रिटर्न करके पास होने देता है
  • इससे आइटम क्लिक अभी भी काम करते हैं

वैकल्पिक तरीके

1. एडाप्टर में क्लिक लिस्टनर (सिफारिश)

gridView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
    @Override
    public void onItemClick(AdapterView parent, View view, int position, long id) {
        Toast.makeText(MainActivity.this, "आइटम " + position + " क्लिक किया", Toast.LENGTH_SHORT).show();
    }
});

2. GridView को नॉन-स्क्रॉलेबल बनाना (XML)

<GridView
    android:id="@+id/gridLayout"
    android:layout_width="match_parent"
    android:layout_height="wrap_content" 
    android:scrollbars="none" />

फिर इसे ScrollView के अंदर रखें (नेस्टेड स्क्रॉलिंग समस्याएं हो सकती हैं)।

3. कस्टम GridView क्लास

public class NonScrollableGridView extends GridView {
    public NonScrollableGridView(Context context, AttributeSet attrs) {
        super(context, attrs);
    }
    @Override
    public boolean onTouchEvent(MotionEvent ev) {
        if (ev.getAction() == MotionEvent.ACTION_MOVE) return true;
        return super.onTouchEvent(ev);
    }
}

RecyclerView विकल्प (आधुनिक)

GridView के बजाय RecyclerView + GridLayoutManager उपयोग करें:

RecyclerView recyclerView = findViewById(R.id.recyclerView);
recyclerView.setLayoutManager(new GridLayoutManager(this, 3));
recyclerView.setAdapter(adapter);
recyclerView.setNestedScrollingEnabled(false); // स्क्रॉलिंग अक्षम

ऐप चलाएं

डिवाइस कनेक्ट करें, res/drawable/ में one.png से ten.png इमेज जोड़ें, Run पर क्लिक करें। ग्रिड दिखेगा लेकिन स्वाइप करने पर स्क्रॉल नहीं होगा, टोस्ट दिखेगा। आइटम टैप करने पर काम करेंगे।

  1. Android पर Chrome म्यूट करने की चरण-दर-चरण गाइड Android पर Chrome म्यूट करने की चरण-दर-चरण गाइड

    इंटरनेट पर होने वाली सबसे अच्छी चीजों में से एक है Google Chrome। विभिन्न सुविधाओं से लैस यह Android फ़ोन पर प्री-इंस्टॉल आता है। Google Play Store पर एक बिलियन से अधिक डाउनलोड के साथ, इस प्लेटफॉर्म का उपयोग करने के संबंध में लोगों के मन में आमतौर पर कई सवाल आते हैं। लोग डार्क मोड सक्षम करने से लेकर

  1. त्वरित गाइड: बेहतर बैटरी प्रदर्शन के लिए Android पर Gear VR Service अक्षम करें त्वरित गाइड: बेहतर बैटरी प्रदर्शन के लिए Android पर Gear VR Service अक्षम करें

    यदि आप पुराने मॉडल का Samsung फोन उपयोग कर रहे हैं, तो आपने Samsung Gear VR Service पर ध्यान दिया होगा। Android पर Gear VR Service क्या है, इसका सरल उत्तर यह है कि यह एक ऐसी सेवा है जो आपको VR हेडसेट का उपयोग करने देती है। इस सेवा का उपयोग करने में जो समस्या होती है वह यह है कि यह भारी बैटरी पावर की

  1. एंड्रॉइड पर ऑटोकरेक्ट कैसे बंद करें: स्टेप-बाय-स्टेप गाइड एंड्रॉइड पर ऑटोकरेक्ट कैसे बंद करें: स्टेप-बाय-स्टेप गाइड

    शीर्षक पढ़कर आप पूछेंगे कि एंड्रॉइड पर ऑटोकरेक्ट क्यों डिसेबल करें? आखिरकार, यह एंड्रॉइड डिवाइस पर टाइपिंग त्रुटियों की किसी भी संभावना को खत्म कर देता है, है ना? साथ ही, इसकी प्रणाली ऐसी है कि यह उन शब्दों को सीखता है जिनका आप बार-बार उपयोग करते हैं जैसे-जैसे आप उनका उपयोग करते हैं। फिर भी, ऐसे सम