S60開発・設定リストのスライダ設定アイテムをカスタマイズ(2) (2006-10-26)
前回の記事(2006-10-17)の続きです。
グラフィック表示を文字表示に
設定リストにおける「スライダ設定アイテム」は、デフォルトのままだと設定リスト上でもスライダのグラフィックが表示されます。
このようなグラフィック表示は、直感的にわかりやすい表示方法ではありますが、正確な値を知りたい場合には不便です。こういった場合、以下のように設定値を文字(数字)で表示させるようにすると、正確な値が一目でわかるようになるので便利です。
このように、設定リスト上の表示をカスタマイズする方法について、以下に説明します。
ヘッダファイル
設定リスト上の表示をカスタマイズする場合は、S60標準のスライダ設定アイテムクラス(CAknSliderSettingItem)を継承して、デフォルトの動作をオーバーライドして変更する必要があります。以下に、派生クラス(ここではCMySliderSettingItemという名前にしました)の定義例を示します。
class CMySliderSettingItem : public CAknSliderSettingItem { public: CMySliderSettingItem(TInt aIdentifier, TInt& aExternalSliderValue); virtual ~CMySliderSettingItem(); public: // from CAknSliderSettingItem. const TDesC& SettingTextL(void); private: // from CAknSliderSettingItem. CFbsBitmap* CreateBitmapL(void); private: TBuf<32> iLabelText; // (以下略) };
ソースファイル
オーバーライドする必要があるメンバ関数は、SettingTextL()とCreateBitmapL()の2つです。
SettingTextL()
const TDesC& CMySliderSettingItem::SettingTextL(void) { _LIT(KFormat, "%d秒"); // サンプルなので、ソース内に直書き iLabelText.Format(KFormat, InternalSliderValue()); return iLabelText; }
設定リスト上に表示したい文字列を戻り値として返すように実装すればOKです。上の例の場合、InternalSliderValue()にて現在のスライダの値を取得して、その値に単位「秒」を付加した文字列を返す実装になっています。結果として、設定リスト上には「5秒」といった文字列が表示されることになります。
CreateBitmapL()
CFbsBitmap* CMySliderSettingItem::CreateBitmapL(void) { return NULL; }
常にNULLを返すように実装すれば、設定リスト上のグラフィックは消えます。
CreateBitmapL()関数は、設定リスト上に表示するビットマップを返すメンバ関数です。S60標準のスライダ設定アイテムや音量設定アイテム(CAknVolumeSettingItem)では、このメンバ関数でスライダやボリュームのグラフィックを表示するように実装されているようです。なので、常にビットマップとしてNULLを返すように実装し直すことで、設定リスト上のグラフィックが消えるわけです。
ちなみに、CreateBitmapL()をオーバーライドしないでSettingTextL()のみオーバーライドした場合、標準のCreateBitmapL()内の処理でスライダのグラフィックが表示されて、その上に、オーバーライドしたSettingTextL()内の処理で文字列が表示されることになります。