ズームピンチ機能を含むBlackberryアプリケーションに取り組んでいますが、この機能はタッチスクリーンデバイスで機能します。私のアプリはカーブタイプのデバイスでも動作します。
「デバイスがタッチスクリーンであるかどうかをプログラムで検出できる」かどうかを教えてください。両方のタイプに柔軟に対応できるようになります。
ズームピンチ機能を含むBlackberryアプリケーションに取り組んでいますが、この機能はタッチスクリーンデバイスで機能します。私のアプリはカーブタイプのデバイスでも動作します。
「デバイスがタッチスクリーンであるかどうかをプログラムで検出できる」かどうかを教えてください。両方のタイプに柔軟に対応できるようになります。
タッチサポートは、BlackBerryAPI4.7.0以降に追加されました。TouchEventクラスのドキュメントを確認してください。
したがって、4.7.0以降で実行されているデバイス用のアプリケーションを構築している場合は、何もする必要はありません。タッチイベント関連のタスクをコーディングすると、アプリケーションはタッチデバイスと非タッチデバイスの両方で実行されます。非タッチデバイスの場合、タッチイベントに関連するコードは実行されません。
ただし、4.7.0未満で実行されている古いデバイスをサポートする必要がある場合は、プリプロセッサディレクティブを使用する必要があります。
アプリケーションでプリプロセッサディレクティブを使用するには、次のリンクを試してください。
その他の関連リンク:
RIMコンパイラでサポートされているプリプロセッサディレクティブ
OS 4.7以降のデバイスのみをサポートする必要がある場合は、プリプロセッサを使用する必要はありません。これを使用して、タッチスクリーンをプログラムでテストできます。
boolean isTouch = TouchScreen.isSupported();
Rupakが彼の回答で提案したことは十分ではないかもしれません(タッチ処理コードを追加するだけで、非タッチデバイスでは無視されます)。あなたの場合、ズーム機能をサポートしたい場合は、非タッチデバイスをアクティブに検出し(上記のコードを使用)、新しいズームを追加することを選択する必要がありますButtonField
。これは、サポートしているタッチデバイスでも表示されません。ピンチジェスチャー。これを行わないと、非タッチデバイスがズームできなくなるか、タッチデバイスの画面が不要なボタンで乱雑になります。
ただし、TouchScreen
APIは4.7以降専用です。古いバージョンのOSでも同じコードを実行する必要がある場合は、次の別の方法を使用できます。
boolean isTouch = (new Canvas(){protected void paint(Graphics graphics){}}).hasPointerEvents();
私のアプリはほとんどの場合4.5以降をサポートしており、タッチ処理コードをコンパイルすることさえできません。したがって、私は通常、この種のプリプロセッサマクロを使用して、さまざまなコードを選択的にコンパイルします。まず、ファイルの先頭に
//#preprocess
次に、ファイル内の任意の場所:
//#ifndef TOUCH_SCREEN
/*
//#endif
// code only for touch devices:
import net.rim.device.api.ui.TouchEvent;
//#ifndef TOUCH_SCREEN
*/
//#endif
次に、タッチスクリーンデバイスに展開するために作成するビルドの場合、TOUCH_SCREENプリプロセッサフラグを追加します。タッチデバイスと非タッチデバイスで異なるアプリバンドルをアップロードすることを心配したくない場合は、Javaコード(isTouch
)を使用してタッチスクリーンをプログラムで検出し、プリプロセッサを使用して、4.7より前でコンパイルされないコードを削除します。 OSバージョン。
注:このやや紛らわしい「ダブルネガティブ」プリプロセッサロジックは間違いではありません。 これは、BlackBerry対応IDE(JDE、Eclipse、Netbeansなど)のプリプロセッサが前処理を処理するわずかに異なる方法に対応するためのようなものです。残念ながら、前処理は標準化されたJ2ME機能ではないため、その実装は少し不安定です。