xml布局显示需要预判断,可是还没有show出来,怎么办?
最近在实际工作中遇到了一种情况,写一个音量条,音量条显示出来之前要判断系统的音量大小,然后给音量条设置显示的位置。解决办法有两种,
第一种: m_pHostThread>MsgAsyncCall(MSG_METHOD(this,speakeMuteBtnHandler::onVolumeBarChanged));在onVolumeBarChanged函数中,把你当前的音量设置到系统中,实现onVolumeBarChanged函数。
BOOL speakeMuteBtnHandler::onVolumeBarChanged(msgObject&)
{
xSliderHandler* sliderHandler = m_pHostView->viewAt<xView>("volumeBar").findHandler<xSliderHandler>();
chASSERT(sliderHandler != NULL);
int volume = devGetTalkVolume();
sliderHandler->setValue(toString(volume));
return TRUE;
}
在这个函数中,先将布局取到,m_pHostView指的是当前整个的布局,通过m_pHostView拿到 id为volumebar的音量条布局,在这个里面取出SliderHandler,判断当前音量条的位置,设置音量。
第二种:
把整个的次级菜单,封装进一个sliderHandler的类,这类可以继承xLinearLayout或者其他布局中需要的类,在类内,将这个布局文件加载出来,加载出来以后,取出对象,设置音量。
这里写一下音量条的联动:
void speakeMuteBtnHandler::onViewConnected()
{
m_pSpeakeMuteBtn = &m_pHostView->viewAt<xView>("speakeMuteBtn");
slotSpeakeMuteBtn();
msgJoinMessageGroup(szVolumeGroupName, MSG_METHOD(this, speakeMuteBtnHandler::onSpeakeMuteChanged));
SLOT_CONNECT(m_pSpeakeMuteBtn, signalClicked, this, speakeMuteBtnHandler::slotSpeakeMuteBtnClicked);
xSliderHandler* sliderHandler = m_pHostView->viewAt<xView>("volumeBar").findHandler<xSliderHandler>();
chASSERT(sliderHandler != NULL);
SLOT_CONNECT(sliderHandler, signalValueChanged, this, speakeMuteBtnHandler::slotVolumeBarChanged);
m_pHostThread->MsgAsyncCall(MSG_METHOD(this, speakeMuteBtnHandler::onVolumeBarChanged));
};
onViewConnected这个函数只加载一次,slotSpeakeMUteBtn是要初始化一次,这个函数的实现是:
void speakeMuteBtnHandler::slotSpeakeMuteBtn()
{
xImageView& icon = m_pSpeakeMuteBtn->viewAt<xImageView>("icon");
if (devGetOutputSilence())
{
icon.setPixmap("talk/softkey/silence.png");
}
else
{
icon.setPixmap("talk/softkey/volume-mute-btn-normal.png");
}
};
判断当前是否静音,设置图标状态。
BOOL speakeMuteBtnHandler::onSpeakeMuteChanged(msgObject& msgObj)
{
xImageView& icon = m_pSpeakeMuteBtn->viewAt<xImageView>("icon");
switch (msgObj.message)
{
case VOLUME_OUTPUT_MUTE_CHANGED:
slotSpeakeMuteBtn();
break;
default:
return FALSE;
}
return TRUE;
};
监听组播消息,这里的组播是线程通信的一种,其他地方有设置静音,这里进行监听,进行相应的UI修改。
void speakeMuteBtnHandler::slotSpeakeMuteBtnClicked(chSignal* /*sender*/, WPARAM /*wParam*/, LPARAM /*lParam*/, int /*nDataBytes*/, LPVOID /*pData*/)
{
devSetOutputSilence(!devGetOutputSilence());
};
调用静音接口函数。
void speakeMuteBtnHandler::slotVolumeBarChanged(chSignal* /*sender*/, WPARAM wParam, LPARAM /*lParam*/, int /*nDataBytes*/, LPVOID /*pData*/)
{
xSliderHandler* sliderHandler = m_pHostView->viewAt<xView>("volumeBar").findHandler<xSliderHandler>();
int volume = ;
toValue(sliderHandler->value, volume);
devSetTalkVolume(volume);
};
根据滚动条的变化来设置音量。
xml布局显示需要预判断,可是还没有show出来,怎么办?的更多相关文章
- Android Studio无法预览xml布局之解决方法(两种)
学习安卓程序开发,用的Android Studio,发现怎么更改xml代码都没有想要的效果.如图 代码如下: <?xml version="1.0" encoding=&qu ...
- 仿酷狗音乐播放器开发日志二十四 选项设置窗体的实现(附328行xml布局源码)
转载请说明原出处,谢谢~~ 花了两天时间把仿酷狗的选项设置窗体做出来了,当然了只是做了外观.现在开学了,写代码的时间减少,所以整个仿酷狗的工程开发速度减慢了.今天把仿酷狗的选项设置窗体的布局代码分享出 ...
- Android中measure过程、WRAP_CONTENT详解以及 xml布局文件解析流程浅析
转自:http://www.uml.org.cn/mobiledev/201211221.asp 今天,我着重讲解下如下三个内容: measure过程 WRAP_CONTENT.MATCH_PAREN ...
- 第五篇:在SOUI中使用XML布局属性指引(pos, offset, pos2type)
窗口布局的概念 每一个UI都是由大量的界面元素构成的,在Windows编程,这些界面元素的最小单位通常称之为控件. 布局就是这些控件在主界面上的大小及相对位置. 传统的布局一般使用一个4个绝对坐标来定 ...
- android xml布局文件属性说明
android xml布局文件属性说明 [摘]android xml布局文件属性说明 LinearLayout和RelativeLayout 共有属性:java代码中通过btn1关联次控件androi ...
- 使用XML布局文件和Java代码混合控制UI界面
完全使用Java代码来控制UI界面不仅烦琐.而且不利于解耦:而完全利用XML布局文件来控制UI界面虽然方便.便捷,但难免有失灵活.因此有些时候,可能需要混合使用XML布局文件和代码来控制UI界面. 当 ...
- android 开发 使用自定义布局实现标题栏复用(标题栏内容自定义:使用代码实现和xml布局自定义属性2种办法实现)
在个人学习的情况下可能很少使用自定义布局去实现大量复用的情况下,但是在一个开发工作的环境下就会使用到大量复用的自定义控件. 实现思维: 1.写一个xml的布局,用于标题栏的样式,并且添加在标题栏中你想 ...
- 安卓app开发-05-Android xml布局详细介绍
安卓app开发-05-Android xml布局详细介绍 虽然说有 墨刀,墨客 这些图形化开发工具来做 Android 的界面设计,但是我们还是离不开要去学习做安卓原生app,学习 xml 布局还是必 ...
- XML布局文件于Java代码使用问题
2013-9-21 问题一.不同的XML文件中相同类型的控件id相同,那么将这些不同的布局xml组合在一个大的布局中,如何解决相同id问题 ? 解决办法: 不同的布局文件XML要组合成一个新的大布局, ...
随机推荐
- selenium+Python(定位 单选、复选框,多层定位)
1.定位一组元素webdriver 可以很方便的使用 findElement 方法来定位某个特定的对象,不过有时候我们却需要定位一组对象,这时候就需要使用 findElements 方法.定位一组对象 ...
- C 标准库 - string.h
C 标准库 - string.h This header file defines several functions to manipulate C strings and arrays. stri ...
- 在Xcode中手动添加pch文件
在Xcode中手动添加pch文件: 一: 在工程中新建.pch文件,pch文件名通常用工程名字命名: 二: 在Targets->build Settings->Prefix Header ...
- awk如何替换一个字符串的第n个字符?
方法一: echo "abcdefg" | awk 'BEGIN{FS=OFS=""}$4="h"' // ""可 ...
- Python学习之环境搭建及模块引用
这是我学习Python过程积累的经验和踩过的坑,希望学习Python的新手们能尽量避免,以免不必要的时间浪费.今天也是我第一次接触Python. 基础语法看了两个晚上,所以如果没看的朋友们,抽时间先看 ...
- Expression Blend实例中文教程(5) - 布局控件快速入门StackPanel,ScrollViewer和Border
上一篇,介绍了Canvas布局控件在Blend中的使用.本篇继续介绍布局控件StackPanel,ScrollViewer和Border. 相对于Grid和Canvas来说,StackPanel,Sc ...
- 深入Java关键字null
一.null是代表不确定的对象 Java中,null是一个关键字,用来标识一个不确定的对象.因此可以将null赋给引用类型变量,但不可以将null赋给基本类型变量. 比如:int a = nu ...
- 简单来看看JavaBean
1.什么是JavaBean? JavaBean是一个遵循特定写法的java类. 用作JavaBean的类必须有一个公共的,无参数的构造方法. JavaBean的属性与普通的Java类的属性的概念一样, ...
- 单例模式的c++实现
#pragma once #include <iostream> #include <memory> #include <Windows.h> using name ...
- cssText用法和使用说明
cssText 本质是什么? cssText 的本质就是设置 HTML 元素的 style 属性值. cssText 怎么用? document.getElementById("d1&quo ...