我正在学习国际化应用程序的基本步骤,我有一个关于本地化界面NIB文件的问题...我已经看到在Xcode中你可以点击AppViewController.xib界面文件并点击本地化部分中的+检查器窗口添加另一种语言以及默认的英语(例如我添加意大利语)...这允许我翻译意大利语界面...但是你如何保持应用程序的未来发展?例如,如果需要添加按钮,则必须手动将其添加到接口NIB文件的所有本地化版本中?文档也说
nib文件中的对象通常在它们之间具有不应该被破坏的连接.确保在将笔尖移至翻译之前锁定所有连接.有关如何锁定nib文件的信息,请参阅"Interface Builder用户指南"中的"本地化".
你能解释一下这个概念吗?我在检查器中看到了Localization Locking部分,它允许您锁定Properties,Localizable Properties或Un-localizable Properties,但我不太了解它的作用.
总而言之,我希望您建议我设计界面的本地化版本以及在界面发展时维护多个NIB文件的工作流程.
编辑:任何可以帮助我的想法和/或链接?
我正在实现一个app小部件,我希望能够在小部件布局中更改单个视图的属性,而无需RemoteViews
从头开始重建所有内容,这涉及加载XML等,在某些情况下不需要.有没有办法说"在当前窗口小部件布局中由特定ID标识的视图上更新属性X"?我已经看到班上有一种partiallyUpdateAppWidget
方法,AppWidgetManager
但是我无法理解,也不是为了这个目的,也不是必须如何使用它.你能帮助我或指向一个有用的链接或例子吗?
例如,如果我们计划AlarmManager.setInexactRepeating
每小时触发不准确的重复警报,如果手机处于待机状态4小时然后它被唤醒会发生什么?系统是否连续发送4个警报,PendingIntent
或者只发送一个警报?
编辑:更多关注阅读文档,set(int, long, android.app.PendingIntent)
方法文档说:警报意图与int类型的额外数据一起提供Intent.EXTRA_ALARM_COUNT
,表示已经累积到此意图广播中的过去警报事件的数量.由于手机处于睡眠状态而未送达的重复警报可能在交付时计数大于1.
因此,当手机退出待机状态时,只会发出一个警报,其中包含错过警报的数量.
我在使用Objective-C属性时遇到了一些困难。.我正在显示一段代码来解释我的疑问:
啊
@interface A : NSObject
@property (nonatomic,getter = isChosen) BOOL chosen;
@end
Run Code Online (Sandbox Code Playgroud)
主目录
A *myClass = [[A alloc]init];
myClass.chosen = YES;
NSLog(@"1. myClass.chosen = %hhd", myClass.chosen);
myClass.chosen = NO;
NSLog(@"2. myClass.chosen = %hhd", myClass.chosen);
NSLog(@"3. myClass.chosen = %hhd", [myClass isChosen]);
NSLog(@"4. myClass.chosen = %hhd", myClass.isChosen);
Run Code Online (Sandbox Code Playgroud)
输出值
1. myClass.chosen = 1
2. myClass.chosen = 0
3. myClass.chosen = 0
4. myClass.chosen = 0
Run Code Online (Sandbox Code Playgroud)
一切都清楚对我来说,除了代码,在那里我得到的值的最后一行选择属性与myClass.isChosen
:我理解的点语法myClass.chosen
,因为编译器将其转换在消息符号语法[myClass isChosen]
,但我真的不明白为什么myClass.isChosen
可行,或者更好,我认为编译器再次将其转换为消息表示法,但对我来说似乎有点奇怪。
我想知道使用点表示法语法调用getter方法是否被认为是一种好习惯,并且似乎只对我来说很奇怪。.显然,只有在属性声明中更改 …
我在Google Play上有一个应用程序,其java包名称是混合大小写的最后一部分..我想要删除Android Lint警告(请参阅此问题)并且Jens让我注意到Java命名约定说你应该只使用java包名的小写字母,也许这是导致警告的原因..我的应用程序正常工作,但我想将包名更改为小写,以符合java命名约定..如果我更改名称打包到只有小写,我会破坏Google Play的正确行为吗?即,如果我使用新的软件包名称发布新版本的应用程序,Android将无法将其识别为安装在设备上的相同应用程序,它将显示为完全不同的应用程序?您是否建议我简单地忽略这个错误并记住在我的下一个项目中遵守命名约定,或者我可能遇到混合大小写包名称的问题(比简单的Lint警告更糟)?
几天前我读过另一个用户写的关于使用<(less)运算符对NSNumber对象进行比较的帖子.他得到了错误的结果,人们告诉他,它正在比较NSNumber对象的地址而不是它们的值...我试图重现这个问题,但有些东西我不知道了:
int main (int argc, char*argv[])
{
NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];
NSMutableArray *arrayDistance = [NSMutableArray array];
[arrayDistance addObject:
[NSNumber numberWithInteger: 10]];
[arrayDistance addObject:
[NSNumber numberWithInteger: 20]];
[arrayDistance addObject:
[NSNumber numberWithInteger: 8]];
[arrayDistance addObject:
[NSNumber numberWithInteger: 9]];
int iMinor = 0;
int i;
for (i = 0; i < [arrayDistance count]; i++) {
if([arrayDistance objectAtIndex: i] < [arrayDistance objectAtIndex: iMinor])
{
iMinor = i;
}
}
NSLog(@"iMinor is %d", iMinor);
[pool release];
return 0;
}
Run Code Online (Sandbox Code Playgroud)
上面的代码正确返回2,为什么?不应该比较地址而不是比较arrayDistance数组中NSNumber对象的值吗?是否有必要从NSNumber对象中获取整数值或使用NSNumber对象的compare方法?
NSNumber类是否重载<(less)运算符以便比较存储在对象中的实际值?如果是这样,它在参考文档中写在哪里?
我希望这个问题很清楚.预先感谢您的任何帮助.
我有一个关于iOS应用程序中事件处理的简单问题...假设你有一个带有一些按钮的应用程序,它们对调用相同动作的TouchUpInside事件做出反应,动作方法中最好的方法是什么才能理解触发的按钮是什么事件?我知道可以使用按钮的标题轻松完成,但我认为如果您有一个本地化的应用程序,其中按钮文本可能会更改(除非可以反转标题的本地化,即从本地化的字符串中检索原始字符串)...是否有关于此主题的良好实践?我应该使用按钮的其他属性来区分不同的按钮吗?
预先感谢您的任何帮助.
我知道您必须在AndroidManifest.xml文件中声明所有活动和服务,以便系统可以访问它们(如官方文档中所述),但如果我有一个服务或活动,我想只启动它我的应用程序中的另一个Activity,我是否需要在清单中声明它?即,我总是从我的应用程序的主要活动启动一个辅助活动,直接指向辅助活动的类(没有意图过滤器解析),是否仍然需要在清单中声明辅助活动?如果我不希望我的应用程序之外的任何人能够启动我的辅助活动,该怎么办?如果这是一个愚蠢的问题,我很抱歉,我只想了解当你希望它们只是通过将它们各自的类指向它们时,从清单文件中省略活动和服务是否是一个好的做法(如果可能的话).相同的应用.
android android-manifest android-intent android-service android-activity
我正在考虑如何实现一个显示图像的ImageView,当我用新图像刷新其内容时,它会在右侧显示一个带有圆形ProgressBar的"正在加载..."文本,所以我编写了代码附在下面..这是实现我想要的正确方法吗?具有TextView和ProgressBar的LinearLayout在其可见性设置为GONE时是否消耗零资源?当ProgressBar本身或它的父布局的可见性设置为GONE时,它是否会消耗零资源(我正在考虑循环圈动画的进度)?如果我将它设置为INVISIBLE,它应该消耗一些资源,因为布局管理,但它仍然不应该消耗资源来动画进度圈,对吧?
编辑:当我说"它消耗资源"时,我的意思是CPU资源,因为它显然消耗了一点内存资源,因为当我只是将其可见性设置为GONE时我不会释放视图.我在第一条评论和第一个答案后添加了这条评论.
我希望下面的代码是正确的,如果像我这样的其他新手想知道如何实现同样的事情.
按照代码和在模拟器上显示结果的图像:
main.xml中
<FrameLayout
android:layout_width="match_parent"
android:layout_height="wrap_content" >
<ImageView
android:id="@+id/image_view1"
android:src="@drawable/fish"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:scaleType="centerCrop"
android:contentDescription="image view 1" />
<LinearLayout
android:id="@+id/layout_progress"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_gravity="center_vertical"
android:background="@drawable/filled_rectangle"
android:gravity="center_vertical|center_horizontal"
android:orientation="horizontal"
android:visibility="gone" >
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:gravity="fill_horizontal"
android:text="Loading..."
android:textSize="30sp"
android:layout_gravity="center_vertical"/>
<!-- style="@android:style/Widget.ProgressBar.Small" -->
<ProgressBar
android:id="@+id/progress_bar1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"
android:indeterminateOnly="true"/>
</LinearLayout>
</FrameLayout>
<Button
android:id="@+id/refresh_image"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal"
android:onClick="onClick"
android:text="@string/refresh_image"/>
</LinearLayout>
Run Code Online (Sandbox Code Playgroud)
可绘制/ filled_rectangle.xml
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle">
<solid android:color="#80000000"/> …
Run Code Online (Sandbox Code Playgroud) android visibility drawable android-linearlayout progress-bar
您能向我解释一下我应该如何确定targetSdkLevel的正确值吗?
假设我想构建一个适用于从 android 2.3.7 到 4.0.3 所有版本的应用程序,我应该如何设置minSdkLevel和targetSdkLevel?
前者应该匹配android 2.3.7的API级别,后者应该匹配4.0.3的API级别?
那么,当我开发应用程序时,我应该只使用最旧支持的 sdk 级别中可用的方法/类吗?
当我编译应用程序时,它是针对 2.3.7 还是 4.0.3 进行编译?
我无法理解targetSdkLevel的目的,因为无法为该标签中指定的较新版本编译 apk,否则它无法在低于minSdkLevel指定的版本上工作...为什么我不应该将targetSdkLevel设置为最新可用级别?
我还阅读了有关uses-sdk Manifest标签的官方信息,但我仍然不明白..你能帮我澄清这个话题吗?
编辑:谢谢大家,请原谅我提出重复的问题。我读过这篇博客文章,它确实对我有帮助。你们所有人的回答都很好。
我已经派生了一个类IntentService
,我想知道是否有必要在我的实现中覆盖这些方法时调用超类onCreate
和onDestroy
方法,因为当你在Activity
...中覆盖这样的方法时会发生这种情况.如果有必要,请执行这些操作调用需要是我们在重写方法中做的第一件事吗?在Activity
文档中他们非常清楚,在文档Service
或IntentService
文档中我找不到任何具体的内容.
我开始研究应用程序本地化,我一开始就陷入困境..我已经创建了一个名为LocalizedStrings2的新项目:
我点击加号按钮添加意大利语,它让我可以本地化2个InfoPlist.strings文件:
它是否正确?顺便说一句,我添加了意大利语:
然后我在英文InfoPlist.strings文件中编写了以下代码:
"ERR_MSG" = "Error Message!"
Run Code Online (Sandbox Code Playgroud)
已在文件的意大利语版本中输入以下行:
"ERR_MSG" = "Messaggio d'errore!"
Run Code Online (Sandbox Code Playgroud)
当我编译时,我收到以下错误(即使两个文件为空,我也有同样的错误:
有关最新的如何本地化我的IOS App文档的任何提示或良好参考?
在此先感谢您的帮助!
詹尼
如果不同的应用都是在同一个Google Play帐户下发布,我是否需要使用不同的证书来签署?或者我可以使用相同的证书吗?如果没有特别要求,最佳做法是什么?
android ×8
google-play ×2
ios ×2
localization ×2
objective-c ×2
accessor ×1
alarmmanager ×1
android-lint ×1
certificate ×1
cocoa-touch ×1
comparison ×1
drawable ×1
getter ×1
ios5 ×1
nib ×1
nsnumber ×1
package ×1
progress-bar ×1
properties ×1
publishing ×1
remoteview ×1
sdk ×1
sender ×1
visibility ×1
xcode ×1
xcode4.2 ×1