android xml中视图的自定义命名空间
在这里,我用android制作了自己的自定义小部件,它们都工作得很好。但是,我有20个xml文件,我不想在所有xml布局中将xml中的android xml中视图的自定义命名空间,android,Android,在这里,我用android制作了自己的自定义小部件,它们都工作得很好。但是,我有20个xml文件,我不想在所有xml布局中将xml中的EditText更改为com.example.customwidget.MyEditText。有什么快速的方法吗 例如: 下面的xml不起作用。它将使应用程序崩溃,因为android sdk小部件中没有MyEditText,这是我自己的小部件 <RelativeLayout xmlns:android="http://schemas.android.com/
EditText
更改为com.example.customwidget.MyEditText
。有什么快速的方法吗
例如:
下面的xml不起作用。它将使应用程序崩溃,因为android sdk小部件中没有MyEditText,这是我自己的小部件
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent" >
<MyEditText
android:id="@+id/editText1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:layout_alignParentRight="true"
android:layout_alignParentTop="true"
android:ems="10"
android:inputType="number" >
<requestFocus />
</MyEditText>
</RelativeLayout>
但是,,
这一个将起作用:
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent" >
<com.example.customwidget.MyEditText
android:id="@+id/editText1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:layout_alignParentRight="true"
android:layout_alignParentTop="true"
android:ems="10"
android:inputType="number" >
<requestFocus />
</com.example.customwidget.MyEditText>
</RelativeLayout>
我想做的是简单地将EditText
标记保留在xml中。但是,我想通过自己的自定义EditText
好的,我知道我必须首先将类名更改为EditText
而不是MyEditText
,但是如何让所有XML布局文件知道我想要的是自定义的EditText
,而不是本机的?实现自定义并将其设置为
以下是此类工厂的一个示例:
public class MyLayoutInflaterFactory implements LayoutInflater.Factory
{
public View onCreateView(String name, Context context, AttributeSet attrs)
{
if ("EditText".equals(name))
return new MyEditText(context, attrs);
return null;
}
}
然后,您需要在活动中使用它:
public class MyActivity extends Activity
{
⋮
LayoutInflater layoutInflater;
@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
layoutInflater = LayoutInflater
.from(this)
.cloneInContext(this)
.setFactory(new MyLayoutInflaterFactory());
setContentView(layoutInflater.inflate(R.layout.my_activity, null));
}
@Override
public LayoutInflater getLayoutInflater()
{
return layoutInflater;
}
⋮
}
不,那不是我想要的我肯定你搞错了。我想要的是,当我在xml中使用
EditText
时,它不会使用本机的EditText,而是使用我修改的EditText
,这就是方法。啊,我想我现在开始了解你了。。但是我不知道该怎么做,任何提示都值得一提:)LayoutInflater.Factory.onCreateView获取XML中的名称。如果该名称为“EditText”,您将创建EditText
(使用提供的上下文和属性集),否则您只需返回null
,并让原始工厂创建其他视图。好的,谢谢,我将尝试这样做,完成后将发布解决方案