获取LayoutInflater的两种方式

我们需要将一个XML文件转换成View时,需要用到LayoutInflater这么一个视图加载类。

我们平时用到的都是LayoutInflater中自带的一个静态方法:from(Context  context),然后传入一个上下文,接着就拿着LayoutInflater的实例去高事情了。

 
So.....我们进到LayoutInflater的源码里面找到from(Context context)方法:
具体代码如下:
 
/** * Obtains the LayoutInflater from the given context. */ public static LayoutInflater from(Context context) { LayoutInflater LayoutInflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); if (LayoutInflater == null) { throw new AssertionError("LayoutInflater not found."); } return LayoutInflater; }
 

看到这个LayoutInflater是从Context里面获取的,所以我们平时获取LayoutInflater的时候也可以这样获取:

 
LayoutInflater LayoutInflater =(LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);


所以我们就多了一种获取LayoutInflater的选择了。

 
最后我在Android 5.1的源码framework中grep了一把,看下面结果:
 
tlh@ubuntu:/zed02/tlh2/test_Eng/sc7731_l$ grep -rn "LAYOUT_INFLATER_SERVICE" frameworks/base/core/ frameworks/base/core/tests/coretests/src/android/view/ListContextMenu.java:52: mInflater = (LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); frameworks/base/core/tests/coretests/src/android/widget/gridview/GridThrasher.java:66: mInflater = (LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); frameworks/base/core/tests/coretests/src/android/widget/listview/ListThrasher.java:64: mInflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); frameworks/base/core/tests/coretests/src/android/widget/listview/ListTakeFocusFromSide.java:42: mInflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); frameworks/base/core/tests/coretests/src/android/widget/ListViewTest.java:107: if (Context.LAYOUT_INFLATER_SERVICE.equals(name)) { frameworks/base/core/tests/coretests/src/android/widget/focus/ListWithMailMessages.java:130: getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE); frameworks/base/core/tests/coretests/src/android/widget/focus/ListWithFooterViewAndNewLabels.java:97: mContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE); frameworks/base/core/java/com/android/internal/app/LocalePicker.java:165: (LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); frameworks/base/core/java/com/android/internal/app/RestrictionsPinActivity.java:64: (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE); frameworks/base/core/java/com/android/internal/app/AlertController.java:974: mInflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); frameworks/base/core/java/com/android/internal/widget/AccountItemView.java:55: context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); frameworks/base/core/java/android/appwidget/AppWidgetHostView.java:544: theirContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE); frameworks/base/core/java/android/accounts/GrantCredentialsPermissionActivity.java:55: mInflater = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE); frameworks/base/core/java/android/accounts/ChooseAccountTypeActivity.java:187: Context.LAYOUT_INFLATER_SERVICE); frameworks/base/core/java/android/accounts/ChooseAccountActivity.java:163: Context.LAYOUT_INFLATER_SERVICE); frameworks/base/core/java/android/app/DialogFragment.java:411: Context.LAYOUT_INFLATER_SERVICE); frameworks/base/core/java/android/app/DialogFragment.java:414: Context.LAYOUT_INFLATER_SERVICE); frameworks/base/core/java/android/app/FragmentBreadCrumbs.java:124: mInflater = (LayoutInflater)a.getSystemService(Context.LAYOUT_INFLATER_SERVICE); frameworks/base/core/java/android/app/LauncherActivity.java:111: Context.LAYOUT_INFLATER_SERVICE); frameworks/base/core/java/android/app/ContextImpl.java:478: registerService(LAYOUT_INFLATER_SERVICE, new ServiceFetcher() { frameworks/base/core/java/android/view/ContextThemeWrapper.java:107: if (LAYOUT_INFLATER_SERVICE.equals(name)) { frameworks/base/core/java/android/view/LayoutInflater.java:49: * (Context.LAYOUT_INFLATER_SERVICE);</pre> frameworks/base/core/java/android/view/LayoutInflater.java:189: * the standard {@link Context#LAYOUT_INFLATER_SERVICE Context.INFLATER_SERVICE}. frameworks/base/core/java/android/view/LayoutInflater.java:220: (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); frameworks/base/core/java/android/annotation/StringDef.java:34: * LAYOUT_INFLATER_SERVICE frameworks/base/core/java/android/annotation/StringDef.java:39: * public static final String LAYOUT_INFLATER_SERVICE = "layout_inflater"; frameworks/base/core/java/android/preference/Preference.java:508: (LayoutInflater) mContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE); frameworks/base/core/java/android/preference/PreferenceActivity.java:270: mInflater = (LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); frameworks/base/core/java/android/preference/PreferenceScreen.java:165: context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); frameworks/base/core/java/android/service/voice/VoiceInteractionSession.java:617: Context.LAYOUT_INFLATER_SERVICE); frameworks/base/core/java/android/inputmethodservice/InputMethodService.java:672: Context.LAYOUT_INFLATER_SERVICE); frameworks/base/core/java/android/inputmethodservice/KeyboardView.java:295: .getSystemService(Context.LAYOUT_INFLATER_SERVICE); frameworks/base/core/java/android/inputmethodservice/KeyboardView.java:1096: Context.LAYOUT_INFLATER_SERVICE); frameworks/base/core/java/android/widget/Toast.java:261: context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); frameworks/base/core/java/android/widget/DatePickerCalendarDelegate.java:122: Context.LAYOUT_INFLATER_SERVICE); frameworks/base/core/java/android/widget/ArrayAdapter.java:310: mInflater = (LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); frameworks/base/core/java/android/widget/MediaController.java:246: LayoutInflater inflate = (LayoutInflater) mContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE); frameworks/base/core/java/android/widget/SearchView.java:268: Context.LAYOUT_INFLATER_SERVICE); frameworks/base/core/java/android/widget/SimpleAdapter.java:85: mInflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); frameworks/base/core/java/android/widget/Editor.java:2066: getSystemService(Context.LAYOUT_INFLATER_SERVICE); frameworks/base/core/java/android/widget/Editor.java:2415: getSystemService(Context.LAYOUT_INFLATER_SERVICE); frameworks/base/core/java/android/widget/Editor.java:2947: getSystemService(Context.LAYOUT_INFLATER_SERVICE); frameworks/base/core/java/android/widget/SimpleExpandableListAdapter.java:210: mInflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); frameworks/base/core/java/android/widget/ResourceCursorAdapter.java:54: mInflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); frameworks/base/core/java/android/widget/ResourceCursorAdapter.java:76: mInflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); frameworks/base/core/java/android/widget/ResourceCursorAdapter.java:93: mInflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); frameworks/base/core/java/android/widget/ZoomControls.java:50: .getSystemService(Context.LAYOUT_INFLATER_SERVICE); frameworks/base/core/java/android/widget/CalendarViewLegacyDelegate.java:316: .getSystemService(Service.LAYOUT_INFLATER_SERVICE); frameworks/base/core/java/android/widget/TabHost.java:604: (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); frameworks/base/core/java/android/widget/TabHost.java:638: (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); frameworks/base/core/java/android/widget/NumberPicker.java:662: Context.LAYOUT_INFLATER_SERVICE); frameworks/base/core/java/android/widget/AppSecurityPermissions.java:257: mInflater = (LayoutInflater) mContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE); frameworks/base/core/java/android/widget/AppSecurityPermissions.java:324: Context.LAYOUT_INFLATER_SERVICE); frameworks/base/core/java/android/widget/ZoomButtonsController.java:261: .getSystemService(Context.LAYOUT_INFLATER_SERVICE); frameworks/base/core/java/android/widget/TimePickerClockDelegate.java:123: Context.LAYOUT_INFLATER_SERVICE); frameworks/base/core/java/android/widget/DatePicker.java:608: .getSystemService(Context.LAYOUT_INFLATER_SERVICE); frameworks/base/core/java/android/widget/ResourceCursorTreeAdapter.java:60: mInflater = (LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); frameworks/base/core/java/android/widget/RemoteViews.java:2609: context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); frameworks/base/core/java/android/content/Context.java:2088: LAYOUT_INFLATER_SERVICE, frameworks/base/core/java/android/content/Context.java:2159: * <dt> {@link #LAYOUT_INFLATER_SERVICE} ("layout_inflater") frameworks/base/core/java/android/content/Context.java:2217: * @see #LAYOUT_INFLATER_SERVICE frameworks/base/core/java/android/content/Context.java:2290: public static final String LAYOUT_INFLATER_SERVICE = "layout_inflater"; 
 

系统源码里很多地方也在使用这个方法。

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值