上海建网站开发公司,电子商务网站建设流程是什么,网站开发需求分析包括什么,成都公司注册后多久可以买房转载前请标明出处:http://blog.csdn.net/sahadev_ 先上一下示例图#xff1a;
这是默认状态下#xff1a;这是通过反射后修改的结果#xff1a; 在解决这个问题之前首先需要了解一下AlertDialog的基本构造#xff0c;所以先从源码看起#xff1a;
想要知道为什么显示不…转载前请标明出处: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 dont 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 stylefont-family:Microsoft YaHei;没起作用不知道为什么有大神清楚么/spandialog.show();Object obj mTitleView.get(AlertController);TextView textView (TextView) obj;textView.setSingleLine(false);} catch (Exception e) {e.printStackTrace();}
好了到了这里就解决完毕了。如有问题请留言。