我通过AppCompat使用工具栏(而不是ActionBar).我想用图标替换工具栏的标题(app/actity名称),但我不知道如何.
我的图标只是使用非标准字体的文本,所以我想它可能在Material Design中被允许.
我的应用程序将缓存文件写入(并读取)到getExternalCacheDir()位置.在Android Lollipop(API 21)之前,我一直在使用此权限:
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" android:maxSdkVersion="18" />
Run Code Online (Sandbox Code Playgroud)
maxSdkVersion存在,因为在API v18之后不应该需要此权限:http: //developer.android.com/reference/android/Manifest.permission.html#WRITE_EXTERNAL_STORAGE
但是在Android Lollipop(5.0)上,我获得了这样的访问权限(使用我的日志输出来显示实际使用的路径):
11-19 13:01:59.257 4462-4541/com.murrayc.galaxyzoo.app E/android-galaxyzoo? createCacheFile(): IOException for filename=/storage/emulated/0/Android/data/com.murrayc.galaxyzoo.app/cache/52
java.io.IOException: open failed: EACCES (Permission denied)
at java.io.File.createNewFile(File.java:941)
at com.murrayc.galaxyzoo.app.provider.ItemsContentProvider.createCacheFile(ItemsContentProvider.java:528)
Run Code Online (Sandbox Code Playgroud)
我在模拟器和我的Nexus 4中看到了这一点.有什么变化,或者我一直在做错什么?我只是想访问我自己的应用程序的缓存.
更新:我现在只在我的设备上看到这一点(运行标准Android 5.1.1的Nexus 4,自从我第一次遇到这个问题以来,它甚至有了新的Android重新刷新).我不再在模拟器中看到这一点 - 当然系统图像已经多次更新.
我正在研究一些使用libsigc ++进行信令(事件)的C++代码.
我对C++很陌生,我倾向于用C#思考.在C#中我想要的等价代码将是这样的:
var names = new List<string>();
thing.Happened += (string name) => names.Add(name);
thing.DoStuff();
Run Code Online (Sandbox Code Playgroud)
该libsigc ++教程做展示如何绑定一个函数或成员的信号的一个很好的工作,但我不希望定义一个新的类级别的方法对于真正应该私下封装的客户端中这样一个简单的方法,在至少我的想法.
libsigc ++ API似乎支持lambda表达式,但我没有找到任何显示如何使用它们的示例.有人可以帮我吗?请记住,我是一个C++新手!
我正在尝试使用jOOQ在一些通用代码中构建SQL查询.我对使用jOOQ执行这些查询或检查结果不感兴趣.此外,此代码是通用的,所以我不能使用jOOQ的代码生成.
我已经设法弄清楚这一点:
List<org.jooq.Field<?>> fields = new ArrayList<org.jooq.Field<?>>();
Field<?> field = Factory.field("somefield");
fields.add(field);
field = Factory.field("someotherfield");
fields.add(field);
Field<Object> fieldPK = Factory.field("somePKField");
Condition condition = fieldPK.equal(123);
Factory factory = new Factory(connection, SQLDialect.POSTGRES);
SelectFinalStep step = factory.select(fields).from("sometable").where(condition);
String query = step.getQuery().getSQL(true);
Run Code Online (Sandbox Code Playgroud)
但是Factory.field()和from()采用通用SQL而不是实际的表或字段名称,因此没有引用(即使使用RenderNameStyle.QUOTED)并且没有针对SQL注入的保护.
有没有办法创建一个知道他们名字是什么的字段或表?理想情况下,我可以通过其名称和父表指定一个字段,jOOQ为我构建"sometable"."somefield"字符串.
我的主要场景UIViewController
通过在其视图中放置一个子容器,并在该子容器中嵌入子UIViewController来显示一个孩子.我这样做,从子容器CTRL拖动到孩子UIViewController
的storyboard
,并选择"嵌入" SEGUE.
这让我可以在UIViewController
其他地方封装和重用孩子.我认为这是相当标准的.但我无法正确地进行自动布局.
我做了一个简单的测试用例来证明这一点:https: //github.com/murraycu/ios-example-autolayout-of-child-container-views
它有两个UIViewControllers
嵌入在选项卡控制器中,因此您可以在它们之间切换.
"简单"选项卡显示SimpleViewController
,其中显示了故事板中显示的图像和标签:
UIImage或UILabel都没有指定高度约束,尽管它们具有等宽(等于父视图)约束以保持宽度简单.
UILabel显然不是很高,但是UIImage和UILabel的内容拥抱优先级略有不同,根据Auto Layout的说法,它们的高度并不含糊.因此,由于自动布局,当我在运行时将其文本设置为需要更多空间的文本时,它会占用更多空间,从而远离其上方的UIImage.这很好 - 这是我想要的行为,如在模拟器中看到的那样:
现在问题:"With Child Container"选项卡显示WithChildContainerViewController,它显示相同的图像,但显示我的ChildViewController(嵌入在子容器中)而不是UILabel.嵌入式ChildViewController显示UILabel.这是在故事板中:
但是,自动布局系统现在似乎不知道子容器需要多少空间来显示我的ChildViewController中标签中的所有文本.与"简单"选项卡中一样,UIImage或子容器都没有指定高度约束.现在XCode抱怨"高度对于容器视图是不明确的".它在模拟器中看起来像这样:
如果我向子容器添加一个约束,将其底部约束到父视图的底部,这会得到改善,如@iphonic所建议的那样:https://github.com/murraycu/ios-example-autolayout-of-child-container -views/commit/1d295fe0a6c4502764f8725d3b99adf8dab6b9ae但高度仍然是错误的:
如何让汽车布局系统知道该怎么做?我已经考虑过实现UIView的intrinsicContentSize,但是UIViewController不是UIView.