xml布局显示需要预判断,可是还没有show出来,怎么办?
最近在實際工作中遇到了一種情況,寫一個音量條,音量條顯示出來之前要判斷系統(tǒng)的音量大小,然后給音量條設(shè)置顯示的位置。解決辦法有兩種,
第一種: ? ?m_pHostThread>MsgAsyncCall(MSG_METHOD(this,speakeMuteBtnHandler::onVolumeBarChanged));在onVolumeBarChanged函數(shù)中,把你當(dāng)前的音量設(shè)置到系統(tǒng)中,實現(xiàn)onVolumeBarChanged函數(shù)。
1 BOOL speakeMuteBtnHandler::onVolumeBarChanged(msgObject&) 2 { 3 xSliderHandler* sliderHandler = m_pHostView->viewAt<xView>("volumeBar").findHandler<xSliderHandler>(); 4 chASSERT(sliderHandler != NULL); 5 int volume = devGetTalkVolume(); 6 sliderHandler->setValue(toString(volume)); 7 return TRUE; 8 }? ? 在這個函數(shù)中,先將布局取到,m_pHostView指的是當(dāng)前整個的布局,通過m_pHostView拿到 id為volumebar的音量條布局,在這個里面取出SliderHandler,判斷當(dāng)前音量條的位置,設(shè)置音量。
第二種:
把整個的次級菜單,封裝進(jìn)一個sliderHandler的類,這類可以繼承xLinearLayout或者其他布局中需要的類,在類內(nèi),將這個布局文件加載出來,加載出來以后,取出對象,設(shè)置音量。
這里寫一下音量條的聯(lián)動:
? ? ??
1 void speakeMuteBtnHandler::onViewConnected() 2 { 3 m_pSpeakeMuteBtn = &m_pHostView->viewAt<xView>("speakeMuteBtn"); 4 slotSpeakeMuteBtn(); 5 msgJoinMessageGroup(szVolumeGroupName, MSG_METHOD(this, speakeMuteBtnHandler::onSpeakeMuteChanged)); 6 SLOT_CONNECT(m_pSpeakeMuteBtn, signalClicked, this, speakeMuteBtnHandler::slotSpeakeMuteBtnClicked); 7 xSliderHandler* sliderHandler = m_pHostView->viewAt<xView>("volumeBar").findHandler<xSliderHandler>(); 8 chASSERT(sliderHandler != NULL); 9 SLOT_CONNECT(sliderHandler, signalValueChanged, this, speakeMuteBtnHandler::slotVolumeBarChanged); 10 m_pHostThread->MsgAsyncCall(MSG_METHOD(this, speakeMuteBtnHandler::onVolumeBarChanged)); 11 };? ? ?onViewConnected這個函數(shù)只加載一次,slotSpeakeMUteBtn是要初始化一次,這個函數(shù)的實現(xiàn)是:
1 void speakeMuteBtnHandler::slotSpeakeMuteBtn() 2 { 3 xImageView& icon = m_pSpeakeMuteBtn->viewAt<xImageView>("icon"); 4 if (devGetOutputSilence()) 5 { 6 icon.setPixmap("talk/softkey/silence.png"); 7 } 8 else 9 { 10 icon.setPixmap("talk/softkey/volume-mute-btn-normal.png"); 11 } 12 };? ?判斷當(dāng)前是否靜音,設(shè)置圖標(biāo)狀態(tài)。
1 BOOL speakeMuteBtnHandler::onSpeakeMuteChanged(msgObject& msgObj) 2 { 3 xImageView& icon = m_pSpeakeMuteBtn->viewAt<xImageView>("icon"); 4 switch (msgObj.message) 5 { 6 case VOLUME_OUTPUT_MUTE_CHANGED: 7 slotSpeakeMuteBtn(); 8 break; 9 default: 10 return FALSE; 11 } 12 return TRUE; 13 };?監(jiān)聽組播消息,這里的組播是線程通信的一種,其他地方有設(shè)置靜音,這里進(jìn)行監(jiān)聽,進(jìn)行相應(yīng)的UI修改。
1 void speakeMuteBtnHandler::slotSpeakeMuteBtnClicked(chSignal* /*sender*/, WPARAM /*wParam*/, LPARAM /*lParam*/, int /*nDataBytes*/, LPVOID /*pData*/) 2 { 3 devSetOutputSilence(!devGetOutputSilence()); 4 };調(diào)用靜音接口函數(shù)。
1 void speakeMuteBtnHandler::slotVolumeBarChanged(chSignal* /*sender*/, WPARAM wParam, LPARAM /*lParam*/, int /*nDataBytes*/, LPVOID /*pData*/) 2 { 3 xSliderHandler* sliderHandler = m_pHostView->viewAt<xView>("volumeBar").findHandler<xSliderHandler>(); 4 int volume = 0; 5 toValue(sliderHandler->value, volume); 6 devSetTalkVolume(volume); 7 };根據(jù)滾動條的變化來設(shè)置音量。
轉(zhuǎn)載于:https://www.cnblogs.com/132818Creator/p/7200659.html
總結(jié)
以上是生活随笔為你收集整理的xml布局显示需要预判断,可是还没有show出来,怎么办?的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Linux搭建PHP环境(LAMP)
- 下一篇: MIP 内容声明