小编Dan*_*ray的帖子

在Android中获取屏幕高度

如何在Android中获得可用的屏幕高度?我需要高度减去状态栏/菜单栏或可能在屏幕上的任何其他装饰,我需要它适用于所有设备.另外,我需要在onCreate函数中知道这一点.我知道之前已经问过这个问题,但我已经尝试过他们的解决方案而且没有一个能够工作.以下是我尝试过的一些事情:

我已经在API 7-17上测试了这个代码.不幸的是,在API 13上,水平和垂直底部都有额外的空间,而在API 10,8和7上,水平和垂直底部都没有足够的空间.(我没有测试过时的API):

Display display = getWindowManager().getDefaultDisplay();
DisplayMetrics metrics = new DisplayMetrics();
display.getMetrics(metrics);
screenWidth = metrics.widthPixels;
screenHeight = metrics.heightPixels;

TypedValue tv = new TypedValue();
if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB)
{
    if (getTheme().resolveAttribute(android.R.attr.actionBarSize, tv, true))
        screenHeight -= TypedValue.complexToDimensionPixelSize(tv.data,getResources().getDisplayMetrics());
}

int resourceId = getResources().getIdentifier("status_bar_height", "dimen", "android");
if (resourceId > 0)
    screenHeight -= getResources().getDimensionPixelSize(resourceId);
Run Code Online (Sandbox Code Playgroud)

这不考虑状态栏/菜单栏:

Display display = getWindowManager().getDefaultDisplay();
screenWidth = display.getWidth();
screenHeight = display.getHeight();
Run Code Online (Sandbox Code Playgroud)

这也不是:

Point size = new Point();
getWindowManager().getDefaultDisplay().getSize(size);
screenWidth = size.x;
screenHeight = size.y;
Run Code Online (Sandbox Code Playgroud)

这不是:

Point size = new …
Run Code Online (Sandbox Code Playgroud)

java layout android screen android-layout

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

如何准确检测是否在Swift 4中的UILabels内部点击了链接?

编辑

请参阅我的答案以获得完整的解决方案:

我设法通过使用UITextView而不是a 来解决这个问题UILabel.我写了一个类,使UITextView行为像一个UILabel但具有完全准确的链接检测.


我已经成功设置了链接的样式而没有使用问题,NSMutableAttributedString但我无法准确地检测到哪个字符已被点击.我已经尝试了这个问题中的所有解决方案(我可以转换为Swift 4代码),但没有运气.

以下代码有效,但无法准确检测单击了哪个字符并获取了链接的错误位置:

func didTapAttributedTextInLabel(label: UILabel, inRange targetRange: NSRange) -> Bool {
    // Create instances of NSLayoutManager, NSTextContainer and NSTextStorage
    let layoutManager = NSLayoutManager()
    let textContainer = NSTextContainer(size: CGSize.zero)
    let textStorage = NSTextStorage(attributedString: label.attributedText!)

    // Configure layoutManager and textStorage
    layoutManager.addTextContainer(textContainer)
    textStorage.addLayoutManager(layoutManager)

    // Configure textContainer
    textContainer.lineFragmentPadding = 0.0
    textContainer.lineBreakMode = label.lineBreakMode
    textContainer.maximumNumberOfLines = label.numberOfLines
    let labelSize = label.bounds.size
    textContainer.size = labelSize

    // Find the tapped …
Run Code Online (Sandbox Code Playgroud)

xcode nsattributedstring uilabel ios swift4

12
推荐指数
3
解决办法
2040
查看次数

file_get_contents得到错误的结果

更新资料

我解决了问题并发布了答案。但是,我的解决方案并非100%理想。我宁愿只symlinkcachewith clearstatcache(true, $target)或中删除,clearstatcache(true, $link)但那不起作用。

我还宁愿首先避免对符号链接进行缓存,也可以在生成符号链接后立即将其从缓存中删除。不幸的是,我没有运气。由于某些原因clearstatcache(true),创建符号链接后无法正常工作,但仍会对其进行缓存。

我会很高兴地将悬赏奖励给任何能够改善我的答案并解决这些问题的人。

编辑

我试图通过每次clearstatcache运行时生成一个文件来优化我的代码,因此我只需要为每个符号链接清除一次缓存。由于某些原因,这不起作用。clearstatcache每次symlink在路径中包含a时都需要调用它,但是为什么呢?必须有一种方法可以优化我拥有的解决方案。


我使用PHP 7.3.5nginx/1.16.0。有时file_get_contents在使用时会返回错误的值symlink。问题是删除并重新创建符号链接后,其旧值保留在缓存中。有时返回正确的值,有时返回旧值。它似乎是随机的。

我试图用以下方法清除缓存或防止缓存:

function symlink1($target, $link)
{
    realpath_cache_size(0);
    symlink($target, $link);
    //clearstatcache(true);
}
Run Code Online (Sandbox Code Playgroud)

我并不是真的想要禁用缓存,但是我仍然需要100%的file_get_contents精度。

编辑

我无法发布我的源代码,因为它太长且太复杂了,所以我创建了一个最小的,可重现的示例(index.php),该示例再次出现了问题:

<h1>Symlink Problem</h1>
<?php
    $dir = getcwd();
    if (isset($_POST['clear-all']))
    {
        $nos = array_values(array_diff(scandir($dir.'/nos'), array('..', '.')));
        foreach ($nos as $no)
        {
            unlink($dir.'/nos/'.$no.'/id.txt');
            rmdir($dir.'/nos/'.$no);
        }
        foreach (array_values(array_diff(scandir($dir.'/ids'), array('..', '.'))) as $id)
            unlink($dir.'/ids/'.$id);
    }
    if …
Run Code Online (Sandbox Code Playgroud)

php symlink caching nginx file-get-contents

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

我如何修复"[App]如果我们在真正的预提交处理程序中,由于CA限制我们实际上无法添加任何新的围栏"?

当我在模拟器中旋转设备时,我在控制台中收到以下消息:[App] if we're in the real pre-commit handler we can't actually add any new fences due to CA restriction.

有很多关于如何抑制警告的信息,例如在这个问题中.然而,似乎这只是在没有实际解决任何问题的情况下踩到问题.

警告究竟意味着什么,我该如何解决?

xcode ios swift

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

在Linux中更改.eclipse文件夹

如何在Linux中更改.eclipse文件夹?我尝试添加这一行:

-Dosgi.configuration.area=/directory/directory1/eclipse/.eclipse
Run Code Online (Sandbox Code Playgroud)

在eclipse.ini的顶部,但它不起作用.我也尝试将它添加到eclipse.ini中的其他各个地方,但仍然没有运气.

编辑

我添加了这一行:

-Dosgi.configuration.area=file:/directory/directory1/eclipse/.eclipse
Run Code Online (Sandbox Code Playgroud)

紧接着-vmargs.当Eclipse启动时,它现在从正确的.eclipse位置读取,如果.eclipse不存在,则创建它.不幸的是,在Eclipse加载之后,在我的主文件夹中创建了另一个.eclipse文件夹,然后Eclipse继续从该文件夹中读取.我怀疑我的eclipse.ini文件现在是正确的,但还有另一个我需要更改的文件.

eclipse linux ide

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

为什么我不能在HTML5号码字段中输入500?

我的HTML5号码字段一直出现奇怪的意外验证错误.这是我的HTML代码:

<input type="number" name="width" maxlength="5" placeholder="Width" value="733.95591182365" />&nbsp;Width<br />
Run Code Online (Sandbox Code Playgroud)

当我输入500并提交表格时,我收到错误:"请输入有效值.两个最接近的有效值是499.95591182365和500.95591182365."

我已经解决了这个问题.问题是这个value="733.95591182365".我已将PHP代码更改为将小数舍入为整数,以便只能将整数回显到数字字段中.现在我只在输入小数时才收到错误,这没关系.

html forms validation html5 input

6
推荐指数
2
解决办法
3147
查看次数

如何在Android中获得屏幕的高度?

如何在Android中获得可用的屏幕高度?我需要高度减去状态栏/菜单栏或可能在屏幕上的任何其他装饰,我需要它适用于所有设备.另外,我需要在onCreate函数中知道这一点.我知道之前已经问过这个问题,但我已经尝试过他们的解决方案而且没有一个能够工作.以下是我尝试过的一些事情:

这不考虑状态栏/菜单栏:

Display display = getWindowManager().getDefaultDisplay();
screenWidth = display.getWidth();
screenHeight = display.getHeight();
Run Code Online (Sandbox Code Playgroud)

这也不是:

Point size = new Point();
getWindowManager().getDefaultDisplay().getSize(size);
screenWidth = size.x;
screenHeight = size.y;
Run Code Online (Sandbox Code Playgroud)

这不是:

Point size = new Point();
getWindowManager().getDefaultDisplay().getRealSize(size);
screenWidth = size.x;
screenHeight = size.y;
Run Code Online (Sandbox Code Playgroud)

这不起作用:

Display display = getWindowManager().getDefaultDisplay();
DisplayMetrics metrics = new DisplayMetrics();
display.getMetrics(metrics);
// since SDK_INT = 1;
screenWidth = metrics.widthPixels;
screenHeight = metrics.heightPixels;
try
{
    // used when 17 > SDK_INT >= 14; includes window decorations (statusbar bar/menu bar)
    screenWidth = (Integer) Display.class.getMethod("getRawWidth").invoke(display); …
Run Code Online (Sandbox Code Playgroud)

java size height android screen

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

将焦点设置为按钮

如何将焦点设置为按钮但不将setFocusableInTouchMode设置为true?

我第一次尝试这个:

button.requestFocus();
Run Code Online (Sandbox Code Playgroud)

这根本行不通.然后我尝试了这个:

button.setFocusableInTouchMode(true);
button.requestFocus();
Run Code Online (Sandbox Code Playgroud)

问题是,它突出了按钮.我不希望按钮在触摸模式下突出显示.我只想在用户点击回车键或Tab键时选择按钮.

为了澄清,我只是希望第一个按钮在不处于触摸模式时以焦点开始.

java user-interface android focus button

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

notifyItemChanged() 在 setOnUtteranceProgressListener 中调用时不起作用

编辑

我创建了一个演示项目来Github展示确切的问题。吉特项目


我写了一个可扩展recyclerViewKotlin每一行都有一个播放按钮,它使用TextToSpeech. 播放按钮的文本应在播放时更改为停止,然后在播放结束时更改回播放。

当我调用notifyItemChangedinsideonStartonDoneof 时setOnUtteranceProgressListeneronBindViewHolder不会调用并且 recyclerView 中的行将不再正确展开和折叠。

t1 = TextToSpeech(context, TextToSpeech.OnInitListener { status ->
    if (status != TextToSpeech.ERROR) {
        t1?.setOnUtteranceProgressListener(object : UtteranceProgressListener() {
            override fun onStart(utteranceId: String?) {
                recyclerView.adapter.notifyItemChanged(position)
            }

            override fun onStop(utteranceId: String?, interrupted: Boolean) {
                    super.onStop(utteranceId, interrupted)
                    onDone(utteranceId)
            }

            override fun onDone(utteranceId: String?) {
                val temp = position
                position = -1
                recyclerView.adapter.notifyItemChanged(temp)
            }

            override fun onError(utteranceId: String?) …
Run Code Online (Sandbox Code Playgroud)

java android kotlin android-recyclerview

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

如何在Kotlin Android中拨打电话号码

如何在Android Kotlin中拨打电话或拨打电话?例如:致电*21*2#

android kotlin

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