Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/194.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
android xml中视图的自定义命名空间_Android - Fatal编程技术网

android 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/

在这里,我用android制作了自己的自定义小部件,它们都工作得很好。但是,我有20个xml文件,我不想在所有xml布局中将xml中的
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
,并让原始工厂创建其他视图。好的,谢谢,我将尝试这样做,完成后将发布解决方案