達成する可能性のある方法の 1 つは、ListView を に設定することheight="wrap_content"
です。これを行うと、アクティビティをオーバーライドonTouchEvent()
して、ユーザーが空のスペースに触れたときにイベントを取得できます。
レイアウト.xml
<ListView
android:id="@+id/list"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:entries="@array/list" />
アクティビティ.java
public class MainActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
ListView mList = (ListView)findViewById(R.id.list);
mList.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View v, int pos,long id) {
Toast.makeText(v.getContext(), ""+pos, Toast.LENGTH_SHORT).show();
}
});
}
@Override
public boolean onTouchEvent(MotionEvent me){
if(me.getAction() == MotionEvent.ACTION_DOWN){
Toast.makeText(this, "Empty space", Toast.LENGTH_SHORT).show();
return true;
}
return false;
}
}
ただし、何らかの理由で ListView の高さが match_parent であることを期待している場合 (つまり、バックグラウンド ドローアブル)、これは理想的なソリューションではありません。