如何通过反射来解决AlertDialog标题由于字数过多显示不全的问题

转载前请标明出处:http://blog.csdn.net/sahadev_


先上一下示例图:

这是默认状态下:这是通过反射后修改的结果:


在解决这个问题之前首先需要了解一下AlertDialog的基本构造,所以先从源码看起:

想要知道为什么显示不全,首先入口处应该是这里:

builder.setTitle("关于印发《省环境监察局关于开展党的群众路线教育实践活动的实施方案》的通知");
然后进入setTitle的方法:

/*** Set the title displayed in the {@link Dialog}.** @return This Builder object to allow for chaining of calls to set methods*/public Builder setTitle(CharSequence title) {P.mTitle = title;return this;}

好了,它把字符串赋给了对象P,然后再来看看P的类型:

  public static class Builder {private final AlertController.AlertParams P;private int mTheme;/*** Constructor using a context for this builder and the {@link AlertDialog} it creates.*/public Builder(Context context) {this(context, resolveDialogTheme(context, 0));}

嗯,从Builder处可以看到P是类型为AlertController.AlertParams的对象。然后再接着看AlertController.AlertParams这个类里面的属性( 注意:如果你没有专门设置过可以查看Android内部类的方法的话,这里是看不了的,相关设置可以参见:http://www.2cto.com/kf/201311/259006.html):

好了,进入AlertController.AlertParams类内可以看到该类是属于AlertController的内部类,以下为该类的部分属性:

    public static class AlertParams {public final Context mContext;public final LayoutInflater mInflater;public int mIconId = 0;public Drawable mIcon;public int mIconAttrId = 0;public CharSequence mTitle;

好了,所以那个字符串设置时最终会设置到这个类对象的mTitle处,然后接下来就是要查看这个属性什么时候被使用了呢:

在内类可以看到该方法使用了该属性:

public void apply(AlertController dialog) {if (mCustomTitleView != null) {dialog.setCustomTitle(mCustomTitleView);} else {if (mTitle != null) {dialog.setTitle(mTitle);}

这里说明mTitle被设置给了AlertController的对象dialog,然后接下来就是寻找这个dialog对象是怎么被传入进来的:

通过寻找找到apply该方法的被调用处是:

 /*** Creates a {@link AlertDialog} with the arguments supplied to this builder. It does not* {@link Dialog#show()} the dialog. This allows the user to do any extra processing* before displaying the dialog. Use {@link #show()} if you don't have any other processing* to do and want this to be created and displayed.*/public AlertDialog create() {final AlertDialog dialog = new AlertDialog(P.mContext, mTheme, false);P.apply(dialog.mAlert);dialog.setCancelable(P.mCancelable);if (P.mCancelable) {dialog.setCanceledOnTouchOutside(true);}dialog.setOnCancelListener(P.mOnCancelListener);dialog.setOnDismissListener(P.mOnDismissListener);if (P.mOnKeyListener != null) {dialog.setOnKeyListener(P.mOnKeyListener);}return dialog;}

该方法位于AlertDialog.Builder的内部,也就是当Builder对象调用create方法时会将 AlertController的对象dialog传入,这里可以看到是dialog的mAlert属性,也就是说dialog的 mAlert属性是 AlertController的对象。好了,到这里分析完毕。现在就剩下取出该对象,对该对象进行反射了。

AlertDialog dialog = builder.create();try {Class<?> mAlert = dialog.getClass();Log.e("sahadev", mAlert.getName());Field field = mAlert.getDeclaredField("mAlert");field.setAccessible(true);Log.e("sahadev", field.getName() + "----" + field.get(dialog));Field mTitleView = field.get(dialog).getClass().getDeclaredField("mTitleView");mTitleView.setAccessible(true);Object AlertController = field.get(dialog);mTitleView.set(AlertController, new TextView(this));//该方法<span style="font-family:Microsoft YaHei;">没起作用,不知道为什么,有大神清楚么?</span>dialog.show();Object obj = mTitleView.get(AlertController);TextView textView = (TextView) obj;textView.setSingleLine(false);} catch (Exception e) {e.printStackTrace();}
好了,到了这里就解决完毕了。

如有问题请留言。




本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/479657.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

LeetCode 292. Nim 游戏

文章目录1. 题目信息2. 解题1. 题目信息 你和你的朋友&#xff0c;两个人一起玩 Nim 游戏&#xff1a;桌子上有一堆石头&#xff0c;每次你们轮流拿掉 1 - 3 块石头。 拿掉最后一块石头的人就是获胜者。你作为先手。 你们是聪明人&#xff0c;每一步都是最优解。 编写一个函数…

配送A/B评估体系建设实践

2019年5月6日&#xff0c;美团点评正式推出新品牌“美团配送”&#xff0c;发布了美团配送新愿景&#xff1a;“每天完成一亿次值得信赖的配送服务&#xff0c;成为不可或缺的生活基础设施。”现在&#xff0c;美团配送已经服务于全国400多万商家和4亿多用户&#xff0c;覆盖28…

ListView原理简单介绍(着重介绍getView被调用的一系列过程)

今天出去面试&#xff0c;被面试官问到一个问题&#xff0c;说是如果使用 LayoutInflate.inflate(int resource, ViewGroup root, boolean attachToRoot);这个方法与AbsListView的实现类结合使用的话&#xff0c;会出现什么问题&#xff0c;先看简单的使用过程&#xff1a; Ove…

一人之力,刷爆三路榜单!信息抽取竞赛夺冠经验分享

文 | JayLou娄杰在现如今的NLP竞赛中&#xff0c;信息抽取&#xff08;IE&#xff09;任务已占据半壁江山。来&#xff0c;让我们看看今年的一些IE竞赛都有啥&#xff1a;看到如此众多的IE竞赛&#xff0c;心动的JayJay抽空参加了CHIP2020&#xff08;中国健康信息处理大会&…

pkuseg:一个多领域中文分词工具包

pkuseg简单易用&#xff0c;支持细分领域分词&#xff0c;有效提升了分词准确度。 目录 主要亮点编译和安装各类分词工具包的性能对比使用方式相关论文作者常见问题及解答主要亮点 pkuseg具有如下几个特点&#xff1a; 多领域分词。不同于以往的通用中文分词工具&#xff0c;此…

积木Sketch Plugin:设计同学的贴心搭档

| A consistent experience is a better experience.——Mark Eberman | 一致的体验是更好的体验。——Mark Eberman 《摘自设计师的16句名言》 背景 1.UI一致性项目 积木&#xff08;Tangram&#xff09;Sketch插件源于美团外卖UI的一致性项目&#xff0c;该项目自2019年5月份…

简单讲述一下Intent的传值过程

昨晚带女友Android入门&#xff0c;她本是照着一本书敲得&#xff0c;可以运行&#xff0c;后来她自己凭思维自己写了一个&#xff0c;然后出现了值没有传过来的问题&#xff0c;然后简单的了解了一下Intent是如何传递数据的。 我们的例子是这样的&#xff1a; 由A Activity通…

何恺明团队:stop gradient是孪生网络对比学习成功的关键

文 | Happy源 | 极市平台本文是FAIR的陈鑫磊&何恺明大神在无监督学习领域又一力作&#xff0c;提出了一种非常简单的表达学习机制用于避免表达学习中的“崩溃”问题&#xff0c;从理论与实验角度证实了所提方法的有效性&#xff1b;与此同时&#xff0c;还侧面证实了对比学…

美团无人配送CVPR2020论文CenterMask解读

计算机视觉技术是实现自动驾驶的重要部分&#xff0c;美团无人配送团队长期在该领域进行着积极的探索。不久前&#xff0c;高精地图组提出的CenterMask图像实例分割算法被CVPR2020收录&#xff0c;本文将对该方法进行介绍。 CVPR的全称是IEEE Conference on Computer Vision an…

如何使用ListView实现一个带有网络请求,解析,分页,缓存的公共的List页面来大大的提高工作效率

在平常的开发中经常会有很多列表页面&#xff0c;每做一个列表页就需要创建这个布局文件那个Adapter适配器文件等等一大堆与之相关的附属的不必要的冗余文件。如果版本更新迭代比较频繁&#xff0c;如此以往&#xff0c;就会使项目工程变得无比庞大臃肿。 如果看过这篇文章或者…

从信息检索顶会CIKM'20看搜索、推荐与计算广告新进展

文 | 谷育龙Eric源 | 搜索推荐广告排序艺术我是谷育龙Eric&#xff0c;研究方向有深度学习、搜索推荐&#xff0c;喜欢为大家分享深度学习在搜索推荐广告排序应用的文章。CIKM作为信息检索、数据挖掘等领域的国际一流会议&#xff0c;每年都有很多搜索推荐广告领域的精彩论文。…

复杂风控场景下,如何打造一款高效的规则引擎

| 在互联网时代&#xff0c;安全已经成为企业的命脉。美团信息安全团队需要采用各种措施和手段来保障业务安全&#xff0c;从而确保美团平台上的用户和商户利益不会受到侵害。 本文主要介绍了美团在打造自有规则引擎Zeus&#xff08;中文名“宙斯”&#xff09;的过程中&#x…

Android消息队列图片记录

很早之前为了给学生讲明白整个消息队列是怎么个情况&#xff0c;于是大概阅读了一下消息队列的整个工作过程&#xff0c;鉴于网上大部分都是文字说明&#xff0c;没有一个图例&#xff0c;于是做出了下面这张图&#xff0c;权当作以后复习之用&#xff0c;也供大家学习参考&…

Git使用教程:最详细、最傻瓜、最浅显、真正手把手教!

原文连接&#xff1a;https://blog.csdn.net/u011535541/article/details/83379151 转载自 Git使用教程 预警&#xff1a;因为详细&#xff0c;所以行文有些长&#xff0c;新手边看边操作效果出乎你的预料&#xff09;一&#xff1a;Git是什么&#xff1f; Git是目前世界上最先…

主动学习入门篇:什么是主动学习?有哪些具体应用

文 | 淘系技术部 初类来源 | 知乎在大数据和算力的助力下&#xff0c;深度学习掀起了一波浪潮&#xff0c;在许多领域取得了显著的成绩。以监督学习为主的深度学习方法&#xff0c;往往期望能够拥有大量的标注样本进行训练&#xff0c;模型能够学到更多有价值的知识&#xff08…

LeetCode 59. 螺旋矩阵 II LeetCode 54. 螺旋矩阵

文章目录1. 题目信息2. LeetCode 59 解题3. LeetCode 54. 螺旋矩阵4.《剑指Offer》面试题291. 题目信息 给定一个正整数 n&#xff0c;生成一个包含 1 到 n2 所有元素&#xff0c;且元素按顺时针顺序螺旋排列的正方形矩阵。 示例:输入: 3 输出: [[ 1, 2, 3 ],[ 8, 9, 4 ],[ 7…

如何查看Activity任务栈以及dumpsys_activity命令的简要使用及介绍

今天看到淘宝客户端的某个页面效果&#xff0c;效果是在两个Activity中做动画&#xff0c;为了知道究竟是不是在同一个Activity中做的效果&#xff0c;就必须采取一种手段来知道是不是同一个Activity.描述一下这个动画效果&#xff1a;列表页面点击图片&#xff0c;图片会滑动到…

论文浅尝 | 基于微量资源的神经网络跨语言命名实体识别

论文笔记整理&#xff1a;谭亦鸣&#xff0c;东南大学博士生&#xff0c;研究方向为跨语言知识图谱问答。来源&#xff1a;EMNLP 2018链接&#xff1a;https://www.aclweb.org/anthology/D18-1034问题背景与动机本文关注小语种/资源匮乏语言的跨语言命名实体识别问题&#xff0…

美团命名服务的挑战与演进

| 本文根据美团基础架构部技术专家舒超在2019 ArchSummit&#xff08;全球架构师峰会&#xff09;上的演讲内容整理而成。 命名服务主要解决微服务拆分后带来的服务发现、路由隔离等需求&#xff0c;是服务治理的基石。美团命名服务&#xff08;以下简称MNS&#xff09;作为服务…

NeurIPS 2020 | 自步对比学习:充分挖掘无监督学习样本

文 | 葛艺潇源 | PaperWeekly本文介绍一篇我们发表于 NeurIPS-2020 的论文《Self-paced Contrastive Learning with Hybrid Memory for Domain Adaptive Object Re-ID》&#xff0c;该工作提出自步对比学习框架及混合记忆模型&#xff0c;旨在解决无监督及领域自适应表征学习中…