我正在尝试在我的Android项目中使用Kotlin.我需要创建自定义视图类.每个自定义视图都有两个重要的构造函数
public class MyView extends View {
public MyView(Context context) {
super(context);
}
public MyView(Context context, AttributeSet attrs) {
super(context, attrs);
}
}
Run Code Online (Sandbox Code Playgroud)
MyView(Context)用于在代码中实例化视图,并MyView(Context, AttributeSet)在从XML 扩展布局时由布局inflater调用.
对这个问题的回答表明我使用默认值或工厂方法的构造函数.但这就是我们所拥有的:
工厂方法:
fun MyView(c: Context) = MyView(c, attrs) //attrs is nowhere to get
class MyView(c: Context, attrs: AttributeSet) : View(c, attrs) { ... }
Run Code Online (Sandbox Code Playgroud)
要么
fun MyView(c: Context, attrs: AttributeSet) = MyView(c) //no way to pass attrs.
//layout inflater can't use
//factory methods
class MyView(c: Context) : View(c) { …Run Code Online (Sandbox Code Playgroud) 我有一个枚举:
enum E {
case A, B, C(Int)
}
let a: E = .A
Run Code Online (Sandbox Code Playgroud)
这是我如何检查是否a等于.B
if case .B = a {
// works fine
}
Run Code Online (Sandbox Code Playgroud)
但是我如何检查相反的情况呢?(a 不相等.B)?这是我试过的:
if case .B != a { // Variable binding in a condition requires an initializer
// ...
}
if !(case .B = a) { // Expected ',' separator
// ...
}
Run Code Online (Sandbox Code Playgroud)
当然,我可以这样做:
if case .B = a {
// ...
} else {
// put your …Run Code Online (Sandbox Code Playgroud) 我正在尝试将新版本上传到TestFlight,但Application Loader给出了以下错误:
ERROR ITMS-90502:"无效的捆绑包.仅包含arm64切片的应用程序在Info.plist中的UIRequiredDeviceCapabilities列表中也必须包含'arm64'."
如果我添加arm64到UIRequiredDeviceCapabilities的建议,我得到另一个错误:
ERROR ITMS-90098:"此捆绑包无效.密钥UIRequiredDeviceCapabilities包含值'arm64',它与MinimumOSVersion值'8.0'不兼容."
我不确定是什么导致了这个问题,为什么bundle只包含arm64架构.我检查了项目设置,它们似乎包含其他架构.ARCHS(体系结构)设置为Standard architectures (armv7, arm64),VALID_ARCHS(有效体系结构)设置为arm64 armv7 armv7s.
我尝试上传最后一次构建(约1个月)已经有一段时间了.Apple的一个更新是否破坏了什么?(从那时起,我绝对没有触及过架构设置,唯一添加的是UIBackgroundModes = remote-notification).或者是否有其他原因导致此错误?
很长一段时间潜伏 - 第一次海报!
我在重建UITextView像WhatsApp这样的酒吧时遇到了问题.
我正在使用自定义UIView子类,并懒惰地实例化它:
- (UIView *)inputAccessoryView
并返回YES:
- (BOOL)canBecomeFirstResponder
现在,我想改变的大小inputAccessoryView时,UITextView在规模的增长.在iOS 7上,我只是改变所述视图框架的大小 - 而不是它的原点 - 然后调用reloadInputViews它会起作用:视图将向上移动,使其在键盘上方完全可见.
但是,在iOS 8上,这不起作用.使其工作的唯一方法是还将帧的原点更改为负值.这样会很好,除了它会产生一些奇怪的错误:例如,UIView在输入任何文本时返回到"原始"框架.
有什么我想念的吗?我非常肯定WhatsApp使用它inputAccessoryView是因为它们在拖动时解除键盘的方式 - 仅在最新版本的应用程序中.
如果你能帮助我,请告诉我!或者,如果有任何测试,您希望我运行!
谢谢!:)
顺便说一下,这是我用来更新自定义UIView高度的代码composeBar:
// ComposeBar frame size
CGRect frame = self.composeBar.frame;
frame.size.height += heightDifference;
frame.origin.y -= heightDifference;
self.composeBar.frame = frame;
[self.composeBar.textView reloadInputViews]; // Tried with this
[self reloadInputViews]; // and this
Run Code Online (Sandbox Code Playgroud)
编辑:完整源代码可在@ https://github.com/manuelmenzella/SocketChat-iOS获得
由于通知中的Android 5.0大图标具有彩色背景:

对于小图标,它是notification(Notification.Builder.setColor(int))的强调颜色.如何将其设置为大图标?它是实际图像的一部分吗?如果是,圆半径应该是多少?
我有以下自定义视图,它基于RelativeLayout:
public class LearningModeRadioButton extends
RelativeLayout
implements
Checkable,
View.OnClickListener {
private void init(Context context, AttributeSet attrs) {
LayoutInflater.from(context).inflate(R.layout.rb_learning_mode, this, true);
}
}
Run Code Online (Sandbox Code Playgroud)
R.layout.rb_learning_mode 内容是:
<?xml version="1.0" encoding="utf-8"?>
<merge
xmlns:android="http://schemas.android.com/apk/res/android"
>
<RadioButton
android:id="@+id/rb"
android:button="@drawable/sel_rb_button"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
/>
<TextView
android:id="@+id/tv_mode_title"
style="@style/text_regular"
android:layout_toRightOf="@+id/rb"
android:layout_width="match_parent"
android:layout_height="wrap_content"
/>
<TextView
android:id="@+id/tv_description"
style="@style/text_small"
android:layout_below="@+id/tv_mode_title"
android:layout_alignLeft="@+id/tv_mode_title"
android:layout_width="match_parent"
android:layout_height="wrap_content"
/>
</merge>
Run Code Online (Sandbox Code Playgroud)
它有点工作,但布局参数(layout_xxx)被忽略.我可以使用另一个<RelativeLayout/>作为布局的根元素,但我想避免在视图层次结构中有额外的级别.
所以问题是:如何在<merge/>工作中制作布局属性?
Swift 1.2/Xcode 6.3备受期待的功能之一是增量构建.直到最近,它们对我来说都很好,但现在几乎每次我改变一行代码都会完全重建.
我尝试重新启动Xcode,计算机,清理派生数据,但无济于事.谷歌搜索似乎没有透露任何东西.
还有其他人有这个问题吗?我如何解决它?
我正在尝试将PromiseKit与Swift一起使用.我对它并不熟悉,似乎没有太多关于它与Swift一起使用的信息.
我似乎无法弄清楚如何终止一连串的承诺.只要最后一个(终端)then块包含单个语句,一切都很好:
firstly {
// ...
}.then { obj in
self.handleResult(obj)
}.catch { error in
self.handleError(error)
}
Run Code Online (Sandbox Code Playgroud)
但是,如果我尝试添加另一个语句,编译器会抱怨:
firstly {
// ...
}.then { obj in
self.handleResult(obj)
self.doSomethingDifferent(obj)
}.catch { error in // compiler error: Missing return in a closure expected to return 'AnyPromise'
self.handleError(error)
}
Run Code Online (Sandbox Code Playgroud)
显然,解决方案是返回另一个承诺,但它在终端块中没有意义.还有什么我可以做的吗?
我创建了一个框架,其中包含对测试有用的代码(例如,一堆便利的初始值设定项)。现在我想在测试目标中导入该框架,但在 Xcode 中似乎没有办法做到这一点。import Dependency在构建时,只是导入它会给我“找不到模块”错误。
测试目标的常规选项卡没有任何设置(或任何设置):
Build Phase 选项卡有一个 Dependencies 部分,但是当我按下 + 按钮时,我想添加的框架没有显示在列表中:
还有一个 Link Binary with Libraries 部分,但是当我尝试选择框架时,Xcode 说该文件已被链接(在哪里?):
如果将框架添加到主要目标的框架、库和嵌入式内容部分,我可以导入和使用该框架,但我不想这样做,因为该框架仅用于测试代码。我没有看到用所有额外的初始值设定项污染命名空间的原因。我可能会尝试检查XCTest在运行时和崩溃时是否没有可用的类,但这似乎是一种解决方法而不是解决方案。
有什么建议吗?
PS 我使用的是最新版本的 Xcode (11.3.1)。
我的ActionBar有以下菜单布局:
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android" >
<item
android:id="@+id/itemSearch"
android:icon="@drawable/actionbar_icon_search"
android:showAsAction="ifRoom|collapseActionView"
android:actionViewClass="android.widget.SearchView"
android:title="Search"/>
</menu>
Run Code Online (Sandbox Code Playgroud)
这是设置代码:
@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
inflater.inflate(R.menu.actionbar_default, menu);
SearchView searchView=(SearchView) menu.findItem(R.id.itemSearch).getActionView();
int searchPlateId = searchView.getContext().getResources().getIdentifier("android:id/search_src_text", null, null);
View searchEditText = searchView.findViewById(searchPlateId);
((TextView) searchEditText).setTextColor(Color.WHITE);
searchView.setOnCloseListener(new OnCloseListener() {...});
searchView.setOnQueryTextListener(new OnQueryTextListener() {...});
}
Run Code Online (Sandbox Code Playgroud)
一切都很好,除了一件事:在我的华硕平板电脑(TF-201,Android 3.2.1)上,图形模糊:

如果我删除android:actionViewClass="android.widget.SearchView",一切看起来都正常:

4.1.2模拟器上不再复制此问题.我试着只留下菜单通胀代码,onCreateOptionsMenu()但这没有帮助.
我该如何解决?
android ×4
ios ×3
swift ×3
xcode ×3
constructor ×1
ios8 ×1
kotlin ×1
objective-c ×1
promisekit ×1
xcode6.3 ×1