【问题标题】:How to "ellipsize" the title of a AlertDialog in the middle? [duplicate]如何在中间“省略”AlertDialog 的标题? [复制]
【发布时间】:2017-01-01 01:45:11
【问题描述】:

我有一个 AlertDialog,其 title 应该类似于

将“xxx”复制到...

如果xxx 是一个很长的字符串,我希望它被缩短而不是整个标题:重要的是“to...”部分是可见!

举个例子,如果xxx == "A very long text here is being displayed!"我希望AlertDialog的标题是:

正在将“A very long text here is bein...”复制到...

怎么做?

【问题讨论】:

  • 你也需要那个报价吗?例如:“xxxxxxxxxbein..”到.......
  • @Charuka 是的,我需要它与我写的文本中的完全一样!
  • 基本java没有别的让我快速做点什么
  • 你明白我做了什么吗?
  • 是的!请在您的回答下查看我的评论

标签: java android string android-alertdialog


【解决方案1】:

逻辑 = 取一个字符串> 决定你需要显示的长度 > 检查你拥有的字符串的长度 > 删除不需要的字符以保持你想要的长度 > 用你需要的其他字符重置新的字符串添加 > 将其设置为头部!

 String headText = "add anything you want here as head";


        String newHead;
        int maxCharYouWant= 25; // your word limit to display

        if(headText.length()>25){
            newHead = headText.substring(0, Math.min(headText.length(), 18)); // Get the first N number of words-> here 18
            newHead = "\""+newHead+".."+"\""+"to.."; // reset with your format 
        }else {
            newHead =  headText; // length is ok no need to change it
        }


        LayoutInflater inflater = getLayoutInflater();
        View dialogLayout = inflater.inflate(R.layout.body_layout, null); // for body

        AlertDialog.Builder builder = new AlertDialog.Builder(Test.this);
        TextView textView = new TextView(Test.this);
        textView.setText(newHead);  
        builder.setCustomTitle(textView);// set your heading 

        builder.setView(dialogLayout);
        builder.show();

编辑:要获取屏幕的字符数,您可以使用类似这样的方法(我没有在 1080 的多个设备上对此进行测试,它返回 32.. 您可以尝试查看)

Display display = getWindowManager().getDefaultDisplay();
        Point size = new Point();
        display.getSize(size);

        DisplayMetrics metrics = getResources().getDisplayMetrics();
        int width = (int)((float)size.x/metrics.scaledDensity);

        TextView textView = new TextView(Test.this);
        int totalCharstoFit= textView.getPaint().breakText(headText,  0, headText.length(), true, width, null);

阅读更多关于breakText的信息

【讨论】:

  • 谢谢@Charuka。我的问题还在于我事先不知道智能手机屏幕上的可用空间。因此我不能使用int maxCharYouWant = 25;。有什么解决这个问题的建议吗?
  • @Robb1 无论如何添加 1000 个字符,请注意我通过设置 textView 添加头部,所以如果第一行没有足够的空间放置头部,它将进入第二行.. 第三 .. 同样明智
  • 不是台词的问题。我的意思是,在 5" 屏幕上,我希望它显示为 «Copying "A very long text here is bein..." to...»,而在 4" 屏幕上显示为 «Copying "A very long文本...”到...»。它必须根据屏幕的大小来适应!
  • 使用这个 DisplayMetrics metrics = getResources().getDisplayMetrics(); int width = (int)((float)size.x/metrics.scaledDensity); ...... int totalCharstoFit= textView.getPaint().breakText(headText, 0, headText.length(), true, width, null); 获取 int 并将其设置为 yourcharlimit 我得到 32 作为限制
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-10-28
  • 1970-01-01
相关资源
最近更新 更多