小编jer*_*rry的帖子

在Swift中添加引号

Swift中有一种直接的方法可以为String 添加引号吗?引号应根据用户的语言设置正确本地化(请参阅https://en.wikipedia.org/wiki/Quotation_mark).我想在添加引号后在UILabel中显示字符串.

例如:

var quote: String!
quote = "To be or not to be..."
// one or more lines of code that add localized quotation marks 
Run Code Online (Sandbox Code Playgroud)

对于法国用户:«成为或不成为......»

对于德国用户:"成为或不成为......"

localization ios swift

17
推荐指数
2
解决办法
3334
查看次数

无法在Android库模块中启动活动

在我的Android应用程序项目中,我添加了一个包含名为"SampleDataMenuActivity"的活动的模块.此活动没有什么特别之处 - 它是使用Android Studio中的"新模块" - >"Android库"对话框添加的,并包含Android Studio生成的"Hello World"代码.

该应用的AndroidManifest.xml包括(来自模块):

<activity
    android:name="com.sample.sampledata.SampleDataMenuActivity" >
    <intent-filter>
        <action android:name="android.intent.action.SampleDataMenuActivity" />
        <category android:name="android.intent.category.DEFAULT" />
    </intent-filter>
</activity>
Run Code Online (Sandbox Code Playgroud)

在app的build.gradle中:

dependencies {
    (...)
    compile project(':sampledata')
}
Run Code Online (Sandbox Code Playgroud)

在项目的settings.gradle中:

include ':sampledata', ':app'
Run Code Online (Sandbox Code Playgroud)

在我的应用程序的主要活动中,我想使用以下方法导航到模块中的活动:

startActivity(new Intent("com.sample.sampledata.SampleDataMenuActivity"));
Run Code Online (Sandbox Code Playgroud)

该项目构建得很好,但是当我点击应该将我带到模块中的活动的按钮时,它会失败,报告:

android.content.ActivityNoFoundException: No Activity found to handle Intent ( act=com.sample.sampledata.SampleDataMenuActivity )
Run Code Online (Sandbox Code Playgroud)

我错过了什么?

android module android-activity android-studio

15
推荐指数
1
解决办法
8138
查看次数

用SQLite-WinRT Wrapper构建问题

在添加SQLite-WinRT数据库包装器后,我无法让我的应用程序为ARM目标构建.我可以用一个简单的测试应用程序重现这一点,如下所示:

(这是在Visual Studio 2013中完成的.)

  1. 创建一个空的Windows 8.1通用应用程序(WinRT)
  2. 使用工具/扩展和更新下载SQLite for Windows Phone 8.1SQLite for Windows Runtime(Windows 8.1).将它们添加到相应项目的参考中.
  3. 使用NuGet,将SQLite-WinRT包添加到每个项目.
  4. 构建x86(本地机器或手机模拟器) - >没问题.
  5. Build for ARM(电话设备) - >如下所示的构建错误(独立于调试或发布版本).

正在构建"ARM"的项目的处理器体系结构与实现文件"C:\ Users\jr\Documents\Visual Studio 2015\Projects\sqlite-test\packages"的处理器体系结构"x86"之间存在不匹配\ Sqlite-Winrt.3.8.7.1\lib\wpa81\SQLiteWinRT.dll"for"C:\ Users\jr\Documents\Visual Studio 2015\Projects\sqlite-test\packages\Sqlite-Winrt.3.8.7.1\lib\wpa81\SQLiteWinRT.winmd".这种不匹配可能会导致运行时故障.请考虑通过Configuration Manager更改项目的目标处理器体系结构,以便在项目和实现文件之间调整处理器体系结构,或者选择具有实现文件的winmd文件,该文件具有与您的目标处理器体系结构相匹配的处理器体系结构项目.

我在这里发布了一个小测试项目(Windows Phone 8.1空项目,添加了SQLite,通过NuGet添加了SQLite-WinRT).

sqlite windows-runtime winrt-xaml windows-phone-8.1

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

在 Swift 中强制定向后恢复自动旋转

在我的 iPhone 应用程序中,我有一个我只想以纵向模式显示的视图。当导航到该视图时,它应该自动显示在纵向视图中。当导航离开时,方向应该变回原来的状态,或者,如果设备方向发生了变化,则适应它。我可以找到有关强制定向和防止自动旋转的信息。在离开该视图后,我找不到有关如何改回正确方向的任何信息。

所以我的想法是

  1. 保存初始方向(存储在currentOrientation
  2. 订阅方向更改事件以在内容锁定为纵向时跟踪方向更改(更新currentOrientation
  3. 离开视图时,使用该currentOrientation值恢复正确的方向。

编辑(现已删除代码):除了它不起作用之外,这是一种危险的方法,因为它广泛使用了不受支持的 API。


编辑:

我相信这个问题现在可以归结为以下几点:

  1. 是否有记录的、受支持的方法来强制界面方向独立于设备方向setValue(UIInterfaceOrientation.Portrait.rawValue, forKey: "orientation")已在 SO 和其他地方多次推荐,但它确实似乎是不受支持的 hack。

  2. 是否有记录的、受支持的方式将界面方向更新为设备方向?这将需要从另一个视图中的强制界面方向“恢复”,而不必通过来回转动设备来触发自动旋转。

支持的是supportedInterfaceOrientations()shouldAutorotate()。但是这些只会在设备转到该位置后锁定 interfaceOrientation。它们不能防止错误的初始方向。

与此类似的问题有很多,可见此问题的设置并不少见,但目前使用支持的方法还没有令人满意且完整的解决方案。

uiinterfaceorientation ios uideviceorientation swift

6
推荐指数
1
解决办法
3687
查看次数

灵活的水平布局,带有`layout_weight`和`maxWidth`

我有一个TextView和一个正方形ImageView,我想以水平线性布局显示.每个应该占父视图宽度的一半,高度应该适合内容(即图像).文本应垂直居中.

附加约束是图像不应超过给定maxWidth(= maxHeight),并且应该使超出的宽度可用TextView.显然,这与上面的50/50规则相冲突.有没有办法优先考虑约束,即允许图像占用一半的空间,除非它超过给定的大小?

期望的结果

这些是我尝试过的布局:

第一个很好地将左侧拉伸到可用空间.但是图像占用宽度的一半以上,因为layout_weight未指定(如下图所示).

<LinearLayout
    android:orientation="horizontal"
    android:layout_width="match_parent"
    android:layout_height="wrap_content">

    <LinearLayout
        android:orientation="vertical"
        android:layout_width="0dp"
        android:layout_height="match_parent"
        android:layout_weight="1"
        android:gravity="center_vertical">
        <TextView
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:text="Some text."/>
    </LinearLayout>

    <ImageView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:maxWidth="200dp"
        android:adjustViewBounds="true"
        android:src="@drawable/image" />
</LinearLayout>
Run Code Online (Sandbox Code Playgroud)

没有<code>layout_weight</code>到<code>ImageView</code>它始终把宽度的一半,而忽略了<code>maxWidth</code>(见下面的图片).</p>

<pre><code>    <ImageView
        android:layout_width=Run Code Online (Sandbox Code Playgroud)

使用<code>ImageView</code>在另一个<code>LinearLayout</code>中<code>maxWidth</code>再次启用,但封闭<code>LinearLayout</code>仍然占用一半的可用空间(见下图).</p>

<pre><code>    <LinearLayout
        android:layout_width=Run Code Online (Sandbox Code Playgroud)

使用封闭的<code>RelativeLayout</code>带有不可见视图的a作为中心分隔符,但是将分区锁定为50/50(或放置分隔符的任何位置).</p> </div>
        <p>
          <a href=xml android android-layout android-layout-weight

6
推荐指数
1
解决办法
2342
查看次数

在Java中添加引号

我之前为Swift 问了一个类似的问题,我现在面临着Android/Java中的同样问题.

Java中是否有一种方法可以为String 添加引号?引号应根据用户的语言设置正确本地化(请参阅https://en.wikipedia.org/wiki/Quotation_mark).文本在数据库中不带引号存储.我想TextView在添加引号后显示字符串.

例如:

String quote = "To be or not to be..."
// one or more lines of code that add localized quotation marks
// to the beginning and the end of the string
mMyTextView.setText(stringWithQuotes);
Run Code Online (Sandbox Code Playgroud)

对于法国用户:«成为或不成为......»

对于德国用户:"成为或不成为......"

对于英语(美国)用户:"成为或不成为...... "

java android localization quotation-marks

6
推荐指数
1
解决办法
412
查看次数

抑制XML中的Lint警告

我的理解是,通过添加ignore属性,例如,可以在XML中完成抑制个别警告

xmlns:tools="http://schemas.android.com/tools"
tools:ignore="SpUsage"
android:textSize="30dp"
Run Code Online (Sandbox Code Playgroud)

直接指定文本大小时,此工作正常.但是当我使用对维度的引用时,例如

android:textSize="@dimen/largeTextSize"
Run Code Online (Sandbox Code Playgroud)

尽管被忽略,Lint仍会发出警告.

让我们假设给定的案例是一个合理的例外,并且对于文本通常更喜欢sp维度的指导dp是很好理解和遵循的.

因为这是一个例外,我不想全局禁用警告.我怎么能在本地做呢?

xml android lint text-size android-studio

5
推荐指数
1
解决办法
2880
查看次数

从Code Behind操作Windows Phone 8.1 XAML中的应用程序栏

这可能是一个微不足道的初学者问题,我已经为Windows和Silverlight应用程序找到了相当多的相关信息,但没有什么可以直接帮助我.我正在用C#和XAML 编写Windows Phone 8.1/WinRT应用程序,我想以编程方式修改在XAML中创建的应用程序栏.例如,我想在调试版本中包含一个按钮,使用后面的代码中的预处理程序指令.

在下面的XAML代码中,我正在创建一个带有两个按钮的BottomAppBar.如何创建第二个按钮(AppBarAddSampleItemsButton),包括代码背后的所有属性?

<prism:VisualStateAwarePage.BottomAppBar>
    <CommandBar >
        <CommandBar.PrimaryCommands>
            <AppBarButton x:Uid="AppBarNewItemButton"
                          Label="New item"
                          Icon="Add" Command="{Binding GoToAddItemPageCommand}" />
        </CommandBar.PrimaryCommands>
        <CommandBar.SecondaryCommands>
            <AppBarButton x:Uid="AppBarAddSampleItemsButton"
                          Label="Add sample items"
                          Command="{Binding GoToAddSampleItemssPageCommand}" />
        </CommandBar.SecondaryCommands>
    </CommandBar>
</prism:VisualStateAwarePage.BottomAppBar>
Run Code Online (Sandbox Code Playgroud)

c# commandbar windows-runtime winrt-xaml windows-phone-8.1

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

在Swift中创建默认样式的UIButton

当我UIButton在Swift中创建一个,例如

let aButton = UIButton()
aButton.setTitle("Title", forState: UIControlState.Normal)
Run Code Online (Sandbox Code Playgroud)

看起来我没有获得与在Interface Builder中添加按钮时所获得的相同的按钮样式.具体来说,标题颜色是白色而不是默认的"色调",使按钮不可见.现在我希望这个按钮看起来像任何其他按钮,所以我不想指定我自己的颜色.

设置正常(未按下)状态可以通过以下方式完成:

aButton.setTitleColor(self.tintColor, forState: UIControlState.Normal)
Run Code Online (Sandbox Code Playgroud)

到现在为止还挺好.但按下按钮时文本颜色不会改变.我猜,因为我需要

aButton.setTitleColor(/* somehting here */, self.tintColor, forState: UIControlState.Highlighted)
Run Code Online (Sandbox Code Playgroud)

理想情况下,如果没有硬编码颜色,我需要在上面替换以获得默认的按下按钮颜色?或者是否有更简单的方法来创建UIButton默认样式?

uibutton ios swift

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

UISplitViewController的详细视图中缺少标题栏

我有一个UISplitViewController嵌入到容器视图中的容器(因为它不在我的应用程序的根目录中),其机制运行良好,除了一个问题:iPad上没有详细视图的导航栏。

初始设置基本上如下:

  1. 在IB中,将一个Split View Controller拖到情节提要上,这将创建一个Split View Controller,一个导航控制器,一个Table View Controller(主控),一个基本View Controller(Detail)以及将它们连接起来的序列。
  2. 添加带有容器视图的常规视图控制器。创建从容器视图到拆分视图控制器的嵌入Segue。
  3. 在主控制器中的以下代码支持下,将另一个单元从原型单元添加到详细视图控制器:

override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
    self.performSegue(withIdentifier: "showDetail", sender: nil)
}

override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
    if segue.identifier == "showDetail" {
        let destinationViewController = segue.destination as! DetailViewController
        let path = self.tableView.indexPathForSelectedRow! as  NSIndexPath
        destinationViewController.selectedTrainingId = (self.itemList[path.row] as! MyListItem).id
    }
}
Run Code Online (Sandbox Code Playgroud)
  1. 添加数据。

正在将项目加载到主视图并选择详细信息。


这是IB中的样子(为了节省空间,我显示了iPhone布局,但是无论如何关系都应该可见):

在此处输入图片说明

SO处理类似问题的答案很少。最接近的匹配项建议为详细视图添加自己的导航控制器。我不明白为什么这样做是必要的,因为我相信它可以在iPhone上正常工作,这表明细节视图与主(根)视图使用相同的导航控制器。但是我尝试了一下。正如我所怀疑的,结果是最初显示了一个导航栏。但是一旦选择了一项,该条就会消失。以下是设置。

在此处输入图片说明

在许多应用程序(邮件,电子邮件,Skype等)中,您可以看到用于主视图和详细视图的单独的顶部栏。尽管从技术上讲我的应用程序并不一定同时需要两者,但尤其是带有彩条的情况下,它并不是很漂亮。因此,问题是:如何获得详细视图的导航栏

master-detail ipad uisplitviewcontroller ios swift

3
推荐指数
1
解决办法
1408
查看次数

将行添加到Excel表

我正在使用Excel 2013/2015 VSTO工作簿应用程序.从在Windows窗体中输入的数据,我想在我的一个工作表的现有表中创建一个新记录.

如何使用C#和VSTO将新表行插入Excel表(不是简单的工作表数组)?

c# excel vsto visual-studio listobject

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

日历提供程序:Android 8上的权限拒绝

我在使用日历提供程序时遇到Oreo Android 8.0/8.1设备上的应用程序崩溃.我的设备上运行Nougat及以下版本时,问题并未显示.

Permission Denial: reading com.android.providers.calendar.CalendarProvider2 uri content://com.android.calendar/calendars from pid=8522, uid=10197 requires android.permission.READ_CALENDAR, or grantUriPermission()
Run Code Online (Sandbox Code Playgroud)

令我困惑的是,即使系统在运行时请求持久性,它们也会被用户确认,并且可以在系统设置中验证崩溃.甚至在访问之前检查权限(参见下面的代码)也无济于事.访问被确认 - 然后被拒绝.

在我的AndroidManifest中:

<manifest ...>
    <uses-permission android:name="android.permission.READ_CALENDAR" />
    <uses-permission android:name="android.permission.WRITE_CALENDAR" />
    <application>
        ...
    </application>
</manifest>
Run Code Online (Sandbox Code Playgroud)

作为示例(对于其他查询也会出现问题),我使用此方法创建日历:

public static void createCalendarIfNotExists(android.app.Activity activity) throws SecurityException {

    ContentResolver contentResolver = activity.getContentResolver();

    // Check if calendar already exists.
    String[] projection = new String[]{
                    CalendarContract.Calendars._ID,
                    CalendarContract.Calendars.CALENDAR_DISPLAY_NAME};

    if (ContextCompat.checkSelfPermission(activity, Manifest.permission.WRITE_CALENDAR) == PackageManager.PERMISSION_GRANTED) {
        Cursor cursor = contentResolver.query(CalendarContract.Calendars.CONTENT_URI,
                projection,
                CalendarContract.Calendars.CALENDAR_DISPLAY_NAME + " = ?",
                new String[]{CALENDAR_NAME},
                null);

        if (cursor != …
Run Code Online (Sandbox Code Playgroud)

java android android-calendar android-permissions android-8.0-oreo

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