AndroidでGridViewのスクロールを無効にする方法
AndroidでGridViewのスクロールを無効にする方法
この記事では、AndroidアプリでGridViewのスクロール操作を無効にする方法を詳しく解説します。GridViewはデフォルトでスクロール可能なビューですが、setOnTouchListener()を使ってタッチイベントを横取りし、指を動かした際に発生するACTION_MOVEイベントを消費することで、スクロールを禁止できます。
それでは、実際の手順を見ていきましょう。
ステップ1:Android Studioで新規プロジェクトを作成する
Android Studioを起動し、「File → New Project」を選択して新しいプロジェクトを作成します。必要な項目をすべて入力してプロジェクトを完成させてください。今回は言語としてJavaを使用します。
ステップ2:レイアウトファイル(activity_main.xml)にGridViewを配置する
res/layout/activity_main.xmlに以下のコードを記述します。画面いっぱいにGridViewを配置するシンプルな構成です。
<?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にスクロール無効化の処理を実装する
src/MainActivity.javaに以下のコードを追加します。ポイントはsetOnTouchListener()内で、MotionEvent.ACTION_MOVEが発生した場合のみtrueを返してイベントを消費している点です。これによりスクロール操作が無効になり、代わりにトーストメッセージが表示されます。
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));
gridView.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
Toast.makeText(MainActivity.this, "Scrolling is Disabled", Toast.LENGTH_SHORT).show();
return event.getAction() == MotionEvent.ACTION_MOVE;
}
});
}
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を確認する
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>
アプリを実行して動作を確認する
それではアプリを実行してみましょう。実機のAndroidスマートフォンをPCに接続していることを前提に説明します。Android Studioでプロジェクト内の任意のアクティビティファイルを開き、ツールバーの「Run」アイコンをクリックしてください。接続済みのモバイルデバイスを選択すると、実機の画面に以下のようにGridViewが表示されます。

画面上で指をドラッグすると、スクロールは行われず「Scrolling is Disabled」というトーストメッセージが表示されることが確認できます。
補足:より現代的な代替手段
なお、現在のAndroid開発ではGridViewよりもRecyclerViewやJetpack ComposeのLazyVerticalGridが推奨されています。RecyclerViewの場合は、recyclerView.setNestedScrollingEnabled(false)のようにネストスクロールを制御したり、LayoutManagerのスクロールをオーバーライドしたりすることで、より柔軟にスクロール挙動を管理できます。既存プロジェクトでGridViewを使い続ける場合でも、本記事の手法はそのまま活用できます。
-
AndroidでGear VRサービスを無効にする7つの方法|バッテリー消費の悩みを解決
古いモデルのSamsungスマートフォンをお使いの方なら、「Samsung Gear VRサービス」という項目を目にしたことがあるかもしれません。そもそもGear VRサービスとは何かというと、簡単に言えばVRヘッドセットを使用するためのシステムサービスです。しかし、このサービスには大きな問題点があります。それはバッテリー消費が激しいということです。 さらに厄介なことに、ユーザーが操作していないのにサービスが勝手に起動し、電力消費を増やしてしまうケースもあります。本記事では、Gear VRサービスの概要から、バックグラウンドでの動作を止める具体的な方法まで、詳しく解説していきます。 Gear
-
【保存版】Androidでオートコレクト(自動修正)を無効にする方法
タイトルを見て「なぜAndroidでオートコレクトを無効にする必要があるの?」と思う方もいるかもしれません。確かに、オートコレクトは入力ミスを防いでくれる便利な機能であり、使うほどによく使う言葉を学習してくれる仕組みになっています。 しかし、状況によってはオートコレクトがかえって邪魔になり、作業の妨げになることも少なくありません。そんなときは、一時的にオートコレクトをオフにしておくのがおすすめです。もちろん、必要になったらいつでもオンに戻せます。なお、無効化の手順は機種によって異なる点にご注意ください。 オートコレクトを無効にしたくなる場面 固有名詞を頻繁に入力するとき Androidの内蔵