我已经尝试了GetKeyboardLayoutName()和GetKeyboardLayout()来获取当前的键盘布局,但它们都给我默认布局并且更改布局不会影响输出!
while(1)
{
Sleep(5);
for(int i = 8; i < 191; i++)
{
if(GetAsyncKeyState(i)&1 ==1)
{
TCHAR szKeyboard[KL_NAMELENGTH];
GetKeyboardLayoutName(szKeyboard);
if(GetAsyncKeyState(i)&1 ==1)
{
TCHAR szKeyboard[KL_NAMELENGTH];
GetKeyboardLayoutName(szKeyboard);
cout << szKeyboard << endl ;
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
当默认布局设置为英语时,它总是给我"00000409",而当我将布局更改为Farsi时,我希望它为"00000429".
我在这里的第一个问题,我过去通过搜索找到了我的所有答案.但是现在我经过几个小时的搜索并且什么也没得到......
我写了一个多语言的应用程序。
我有不同的values
文件夹,用于支持values-fa
和等不同的语言values-ru
。由于其中一些语言(如波斯语和阿拉伯语)是RTL,因此我通过将其他一些布局.xml文件layout-ldrtl
放在主layout
文件夹旁边的文件夹中,使用了不同的布局设计。
我还将一个名为is_right_to_left.xml
int的文件放在一个名为的文件夹中values-ldrtl
,该文件夹定义了这样的变量:
<bool name="is_right_to_left">true</bool>
Run Code Online (Sandbox Code Playgroud)
我在values
文件夹中有相同的文件,并将变量值设置在false
那里。
每当我需要知道的代码时,我都会使用此行来了解当前语言环境是否是RTL:
isRightToLeft = context.getResources().getBoolean(R.bool.is_right_to_left);
Run Code Online (Sandbox Code Playgroud)
我已经使用不同的设备配置测试了该应用程序,并且一切正常工作。例如,将设备语言设置为Farsi会导致应用从中读取字符串values-fa
和布局layout-ldrtl
,而为设备设置了阿拉伯语时,则从中读取值,也从中读取values-ar
布局,layout-ldrtl
因为它们都是RTL语言。当然,它也适用于LTR语言。这是我想要的。
当我以编程方式设置应用程序的语言环境时,会发生问题。这是我在onCreate()
my方法中编写的代码MainActivity
:
Locale myLocale = new Locale("fa");
Resources res = getResources();
DisplayMetrics dm = res.getDisplayMetrics();
Configuration conf = res.getConfiguration();
conf.locale = myLocale;
res.updateConfiguration(conf, dm);
Run Code Online (Sandbox Code Playgroud)
现在,值根据语言正确读取,但layout-ldrtl
与values-ldrtl
被从来没有读过。因此,由于错误的.xml文件和错误的isRightToLeft
变量值,该应用程序将在LTR设计中加载。我测试过的一种解决方案是将这些.xml文件分别放在每个语言布局文件夹中,并且可以正常工作。但是我希望找到一种更好,更整洁的方法来解决问题。除了解决方案,为什么Android会以这种方式运行?
这里解释了如何在 Android Studio 中排除目录。它还有一个关于不知道如何再次包含它的警告。现在我需要这样做。
当然,我可以再次创建/导入项目。但我想有更好的方法来做到这一点。在那儿?如何?
在Android中创建可重用对话框的最佳方法是什么?
通过Dialog开发指南阅读,我知道我可以AlertDialog.Builder(this);
在我Activity
的一个中使用,但如果我想在多个活动中使用它,该怎么办?如果这是其他类我会扩展它,所以MyDialog extends AlertDialog
,但是我不能使用Builder
.
有什么建议?
我正在写一个c ++客户端.客户端使用TCP协议成功连接到服务器并发送数据.我写下面的代码来接收数据:
char data[9];
int received_size = recv(fd, data, 9, flags);
std::string str{ data };
// str.empty() is true
Run Code Online (Sandbox Code Playgroud)
哪些标志是MSG_NOSIGNAL.
问题是在执行此行之后,received_size为9但数据长度为零.