小编htt*_*tch的帖子

如果文本中有阿拉伯语或波斯语字母,则通过fontmetrics计算的字符串宽度非常慢

我有个问题.如果我在那里使用东方语言我的应用程序界面工作得慢得多 特别是我觉得它在JList,JCombobox,JTable等组件中.

如果在文本中至少有一个字母是阿拉伯语或波斯语,我如何发现FontMetrics.stringWidth方法的性能非常慢(500次以上).我怎么知道它是各种摆动组件中常用的方法.

有没有办法提高这种方法的性能?

以下是演示该问题的示例类:

import java.awt.Font;
import java.awt.FontMetrics;
import java.awt.Graphics;
import java.awt.image.BufferedImage;

public class FontMetricsSpeedTest
{

 public static void main( String args[] ) {
  String persian="?????????????????????";
  String english="abcde()agjklj;lkjelwk";
  FontMetrics fm=createFontMetrics(new Font("dialog",Font.PLAIN,12));
  int size=50000;
  long start=System.currentTimeMillis();
  for(int i=0;i<size;i++)
  {
   fm.stringWidth(persian);
  }
  System.out.println("Calculation time for persian: "+(System.currentTimeMillis()-start)+" ms");
  start=System.currentTimeMillis();
  for(int i=0;i<size;i++)
  {
   fm.stringWidth(english);
  }
  System.out.println("Calculation time for english: "+(System.currentTimeMillis()-start)+" ms");
 }
 private static FontMetrics createFontMetrics(Font font)
 {
  BufferedImage bi = new BufferedImage(1, 1, BufferedImage.TYPE_INT_ARGB_PRE);
  Graphics g = bi.getGraphics();
  FontMetrics fm = …
Run Code Online (Sandbox Code Playgroud)

java performance fonts swing fontmetrics

14
推荐指数
1
解决办法
3414
查看次数

损坏的ActionBar看起来

我很久以前就注意到了这个问题,但直到现在我才能准备好演示,并清楚地再现它.问题是2.1模拟器和我的ICS 4.0.3设备上的预先发布.

在应用程序中我有AsyncTask,它可以通过调用invalidateOptionsMenu调整操作栏不确定进度的可见性并重新启动菜单.这应隐藏刷新图标.这工作正常,直到我修改listView数据模型并在适配器上调用notifyDataSetChanged.在这样的行动之后,Actionbar可能已经打破了视野

预期观点: 图片

断开的视图(最后一项永远消失或在某些情况下添加了空白区域): 图片 图片

导致代码在onPostExecute中

    @Override
        protected void onPostExecute(Void result)
        {
            super.onPostExecute(result);
            for (int i = 0; i < 10; i++)
            {
                adapter.items.add(i);
            }
            adapter.notifyDataSetChanged();
            activity.stopLoading();
        }
...
    void stopLoading()
    {
        if (loaders.decrementAndGet() == 0)
        {
            setSupportProgressBarIndeterminateVisibility(false);
            invalidateOptionsMenu();
        }
    }
Run Code Online (Sandbox Code Playgroud)

知道为什么会发生这种情况,并且在大多数情况下是因为更新listview适配器(或者可能是某些视图更新)?如果我删除行adapter.notifyDataSetChanged(); 动作栏不会在演示中被破坏.但在实际应用中它也可能因为另一个原因而被打破(无法确定所有问题的原因)

项目展示了一个问题:http://goo.gl/ZbMTU

打开ActionBarSherlock问题:https://github.com/JakeWharton/ActionBarSherlock/issues/887

UPD:继续深入研究这个问题.似乎不完全是adapter.notifyDataSetChanged()导致无效的外观,但是由AdapterView.AdapterDataSetObserver调用的requestLayout正在侦听ListView中的数据集更改事件

解决方法存在,我可以在handler.post中调用invalidateOptionsMenu和setSupportProgressBarIndeterminateVisibility.但它强制使用FragmentPagerAdapter的自定义实现,它在延迟的handler.post中调用fragment.setHasOptionsMenu.

我想要的是找到一种最有效的方法来使视图和操作栏无效而不会破坏它.

android actionbarsherlock android-actionbar

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

带有组的插件的 Gradle 版本目录

我想弄清楚是否可以在版本目录中声明插件(如果它也有一个组)。

如果我尝试这样声明它

libs.versions.toml

[plugins]
google-services = { id = "com.google.gms:google-services", version = "4.3.10" }

build.gradle
plugins {
    alias(libs.plugins.google.services)
}
Run Code Online (Sandbox Code Playgroud)

我收到下一个错误

> plugin id 'com.google.gms:google-services' is invalid: Plugin id contains invalid char ':' (only ASCII alphanumeric characters, '.', '_' and '-' characters are valid)
Run Code Online (Sandbox Code Playgroud)

有什么建议如何正确使用插件吗?

android gradle

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