When you want to access a custom view in some layout.xml
file, you have two options:
- The view is in it's own class. Then you do
<package.name.MyView android:layout_width= ... />
- The view is an inner class:
<view class="package.name.OuterClass$MyView" android:layout_width= ... />
Now I want to do the same thing inside a <PreferenceScreen>
. The first way works well, but I would like to put all the custom Preference
classes together in my PreferenceActivity. I tried <Preference class="package.name.OuterClass$MyPreference" ... />
(also with '.' instead of '$') as well as <package.name.OuterClass.MyPreference ... />
, but both failed.
Does anyone have an idea?
When dealing with Views
inflating, LayoutInflater
looks for a "view" -> "class" case:
View createViewFromTag(View parent, String name, AttributeSet attrs) {
if (name.equals("view")) {
name = attrs.getAttributeValue(null, "class");
} ...
Preference's PreferenceInflater
doesn't, so that is for the "class" case.
It uses reflection in its createItem()
method and that's probably why the first case works for you.
来源:https://stackoverflow.com/questions/7249028/instantiating-an-inner-class-preference-in-xml-file