小编And*_*nko的帖子

使用Kotlin自定义Android视图

我正在尝试在我的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)

android constructor kotlin

41
推荐指数
5
解决办法
2万
查看次数

不在'if case'语句中的条件

我有一个枚举:

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)

swift

31
推荐指数
3
解决办法
8845
查看次数

应用程序加载器:ERROR ITMS-90502

我正在尝试将新版本上传到TestFlight,但Application Loader给出了以下错误:

ERROR ITMS-90502:"无效的捆绑包.仅包含arm64切片的应用程序在Info.plist中的UIRequiredDeviceCapabilities列表中也必须包含'arm64'."

如果我添加arm64UIRequiredDeviceCapabilities的建议,我得到另一个错误:

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).或者是否有其他原因导致此错误?

xcode itunesconnect ios application-loader

28
推荐指数
5
解决办法
2万
查看次数

在iOS 8中更改inputAccessoryView的框架

很长一段时间潜伏 - 第一次海报!

我在重建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获得

objective-c ios inputaccessoryview ios8

27
推荐指数
4
解决办法
1万
查看次数

大通知图标背景

由于通知中的Android 5.0大图标具有彩色背景:

棒棒糖通知

对于小图标,它是notification(Notification.Builder.setColor(int))的强调颜色.如何将其设置为大图标?它是实际图像的一部分吗?如果是,圆半径应该是多少?

android android-notifications android-5.0-lollipop

25
推荐指数
1
解决办法
2万
查看次数

自定义View xml布局中的<merge />

我有以下自定义视图,它基于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/>工作中制作布局属性?

android android-layout

12
推荐指数
1
解决办法
4345
查看次数

Xcode 6.3总是完全重建Swift项目

Swift 1.2/Xcode 6.3备受期待的功能之一是增量构建.直到最近,它们对我来说都很好,但现在几乎每次我改变一行代码都会完全重建.

我尝试重新启动Xcode,计算机,清理派生数据,但无济于事.谷歌搜索似乎没有透露任何东西.

还有其他人有这个问题吗?我如何解决它?

xcode ios swift xcode6.3

11
推荐指数
1
解决办法
1792
查看次数

使用Swift的PromiseKit:终止承诺链

我正在尝试将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)

显然,解决方案是返回另一个承诺,但它在终端块中没有意义.还有什么我可以做的吗?

swift promisekit

9
推荐指数
1
解决办法
5127
查看次数

如何向测试目标添加框架依赖项?

我创建了一个框架,其中包含对测试有用的代码(例如,一堆便利的初始值设定项)。现在我想在测试目标中导入该框架,但在 Xcode 中似乎没有办法做到这一点。import Dependency在构建时,只是导入它会给我“找不到模块”错误。

测试目标的常规选项卡没有任何设置(或任何设置):

在此处输入图片说明

Build Phase 选项卡有一个 Dependencies 部分,但是当我按下 + 按钮时,我想添加的框架没有显示在列表中:

在此处输入图片说明

还有一个 Link Binary with Libraries 部分,但是当我尝试选择框架时,Xcode 说该文件已被链接(在哪里?):

在此处输入图片说明

如果将框架添加到主要目标的框架、库和嵌入式内容部分,我可以导入和使用该框架,但我不想这样做,因为该框架仅用于测试代码。我没有看到用所有额外的初始值设定项污染命名空间的原因。我可能会尝试检查XCTest在运行时和崩溃时是否没有可用的类,但这似乎是一种解决方法而不是解决方案。

有什么建议吗?

PS 我使用的是最新版本的 Xcode (11.3.1)。

xcode dependency-management

9
推荐指数
1
解决办法
1023
查看次数

ActionBar中的SearchView drawables显得模糊

我的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 android-actionbar

8
推荐指数
1
解决办法
1723
查看次数