Android
 Computer >> コンピューター >  >> プログラミング >> Android

KotlinでAndroidアプリのGridViewスクロールを無効化する方法を徹底解説

この記事では、Kotlinを使ってAndroidアプリのGridView(グリッドビュー)のスクロール機能を無効にする方法を、サンプルコードとともにわかりやすく解説します。GridViewは画像ギャラリーやメニュー表示などによく使われるUIコンポーネントですが、状況によってはスクロールさせたくないケースもあります。そのような場合に役立つテクニックです。

実装の手順

ステップ1:新規プロジェクトを作成する

まず、Android Studioで新しいプロジェクトを作成します。メニューから「File」→「New Project」を選択し、必要な項目をすべて入力してプロジェクトを作成してください。

ステップ2:レイアウトファイル(activity_main.xml)を編集する

次に、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>

ここでは、画面全体にGridViewを配置したシンプルなレイアウトを定義しています。

ステップ3:MainActivity.ktにコードを記述する

続いて、src/MainActivity.kt に以下のコードを追加します。

import android.content.Context
import android.os.Bundle
import android.view.MotionEvent
import android.view.View
import android.view.ViewGroup
import android.widget.*
import androidx.appcompat.app.AppCompatActivity
class MainActivity : AppCompatActivity() {
    private lateinit var gridView: GridView
        var imageIDs = arrayOf(
            R.drawable.ronaldo,
            R.drawable.andre,
            R.drawable.bernado,
            R.drawable.carvalho,
            R.drawable.bruno,
            R.drawable.patricio,
            R.drawable.pepe,
            R.drawable.felix,
            R.drawable.semedo,
            R.drawable.ronaldo
        )
        override fun onCreate(savedInstanceState: Bundle?) {
            super.onCreate(savedInstanceState)
            setContentView(R.layout.activity_main)
            title = "KotlinApp"
            gridView = findViewById(R.id.gridLayout)
            gridView.numColumns = 3
            gridView.adapter = ImageAdapterGridView(this)
            gridView.setOnTouchListener { _, event ->
            Toast.makeText(this@MainActivity, "Scrolling is Disabled", Toast.LENGTH_SHORT).show()
            event.action === MotionEvent.ACTION_MOVE
         }
    }
    inner class ImageAdapterGridView internal constructor(c: Context) : BaseAdapter() {
        private val context: Context = c
        override fun getCount(): Int {
            return imageIDs.size
        }
        override fun getItem(position: Int): Any? {
            return null
        }
        override fun getItemId(position: Int): Long {
            return 0
        }
        override fun getView(position: Int, convertView: View?, parent: ViewGroup?): View {
            val imageView: ImageView
            if (convertView == null) {
                imageView = ImageView(context)
                imageView.layoutParams = AbsListView.LayoutParams(
                    ViewGroup.LayoutParams.WRAP_CONTENT,
                    ViewGroup.LayoutParams.WRAP_CONTENT
                )
                imageView.scaleType = ImageView.ScaleType.CENTER_CROP
                imageView.setPadding(30, 30, 30, 30)
            }
            else {
                imageView = convertView as ImageView
            }
            imageView.setImageResource(imageIDs[position])
            return imageView
        }
    }
}

このコードのポイントは setOnTouchListener の部分です。タッチイベントが発生した際にトーストメッセージ「Scrolling is Disabled(スクロールは無効です)」を表示し、MotionEvent.ACTION_MOVE のときに true を返すことで、GridViewのスクロール動作を無効化しています。

また、内部クラスとして ImageAdapterGridView を実装し、画像リソースをGridViewの各セルに表示できるようにしています。ViewHolderパターンに近い形で convertView を再利用することで、パフォーマンスにも配慮した実装になっています。

ステップ4:AndroidManifest.xmlを確認・編集する

最後に、androidManifest.xml に以下のコードを追加します。

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="https://schemas.android.com/apk/res/android"
    package="com.example.q11">
    <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>

アプリを実行して動作を確認しよう

それでは、実際にアプリケーションを実行してみましょう。実機のAndroidスマートフォンをパソコンに接続していることを前提としています。Android Studioからアプリを起動するには、プロジェクト内のいずれかのアクティビティファイルを開き、ツールバーにある「Run」アイコンKotlinでAndroidアプリのGridViewスクロールを無効化する方法を徹底解説をクリックします。表示された選択肢から接続中のモバイルデバイスを選択すると、実機の画面にアプリが起動します。

GridView上で指をスワイプしても画面がスクロールせず、「Scrolling is Disabled」というトーストメッセージが表示されれば成功です。

KotlinでAndroidアプリのGridViewスクロールを無効化する方法を徹底解説


  1. AndroidでBluetoothを無効にする方法をコード例付きで解説

    AndroidでBluetoothを無効にする方法 この記事では、AndroidアプリからBluetoothを無効化(オフ)する方法を、実際のコード例とともにわかりやすく解説します。BluetoothManagerから取得できるアダプターのdisable()メソッドを呼び出すことで、プログラム側からBluetoothをオフにすることが可能です。 手順1:Android Studioで新しいプロジェクトを作成する まず、Android Studioを開き、メニューから「File」→「New Project」を選択します。必要な項目をすべて入力して、新しいプロジェクトを作成しましょう。 手順2

  2. KotlinでAndroidアプリのJSONオブジェクトを解析する方法を徹底解説

    この記事では、Kotlinを使用してAndroidアプリでJSONオブジェクトを解析する方法を、サンプルプロジェクトを通してステップごとに詳しく解説します。アセットフォルダに配置したJSONファイルを読み込み、その内容をRecyclerViewで一覧表示するまでの流れを学べます。 ステップ1:Android Studioで新規プロジェクトを作成する まず、Android Studioを開き、メニューから「File」→「New Project」を選択して、必要な項目をすべて入力し、新しいプロジェクトを作成します。プロジェクトのテンプレートには「Empty Activity」を選んでおくとスムーズ