Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/14.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_Xml_View - Fatal编程技术网

在Android中设置运行时从xml文件查看

在Android中设置运行时从xml文件查看,android,xml,view,Android,Xml,View,我试图制作一个简单的程序,允许“加载”一个.xml文件,并将其显示为新活动的setContentView中的视图。基本上,我希望新活动的视图与我调用的视图相同 setContentView(R.layout.my_view) 其中R.layout.my_view就是那个xml文件。但在我的例子中,该文件在编译时还不存在,应该动态加载(例如,从存储中加载) 我想我可以解析我的.xml文件并通过代码动态构建视图,但这感觉就像是重新发明轮子,而且视图很可能不完全相同。我认为应该有一些简单的方法来做到

我试图制作一个简单的程序,允许“加载”一个.xml文件,并将其显示为新活动的
setContentView
中的视图。基本上,我希望新活动的视图与我调用的视图相同

setContentView(R.layout.my_view)
其中
R.layout.my_view
就是那个xml文件。但在我的例子中,该文件在编译时还不存在,应该动态加载(例如,从存储中加载)

我想我可以解析我的.xml文件并通过代码动态构建视图,但这感觉就像是重新发明轮子,而且视图很可能不完全相同。我认为应该有一些简单的方法来做到这一点,但我找到的所有方法都与类似的问题相去甚远(例如


似乎需要已经在编译时的文件。我缺少什么吗?

正如您所描述的,这是不可能的。但是您可以通过Java代码来完成。

当我们在布局资源文件夹下创建一个布局xml文件并使用
android:id=“@+id/textview”
IDE提供一些id时,生成一个id R.java文件,其中包含我们分配的所有id

当我们从Activity或Fragment调用该视图时,我们使用该ID创建一个对象,如

TextView TextView=(TextView)findViewById(R.id.TextView);

用户也知道

如果要将xml代码表单存储或服务器作为xml格式的计划文本加载。您将为视图分配一些ID。但IDE不会为此生成任何ID。因此,您无法创建视图的对象

所以,解决方案是您必须通过Java代码生成视图,这意味着以编程方式

    setContentView(R.layout.activity_main);

    Display display = getWindowManager().getDefaultDisplay();
    int width = display.getWidth();
    width = width - (100/width)*80;

    LinearLayout layout = (LinearLayout) findViewById(R.id.lo_dynamic_view_container);
    LinearLayout.LayoutParams lparams = new LinearLayout.LayoutParams(
            LinearLayout.LayoutParams.WRAP_CONTENT,
            LinearLayout.LayoutParams.WRAP_CONTENT);

    TextView tv = new TextView(this);
    tv.setLayoutParams(lparams);
    tv.setWidth(width);
    float redious [] = { 0, 0, 8.3f, 8.5f, 8.2f, 8.9f, 0, 0 };
    ShapeDrawable shape = new ShapeDrawable (new RoundRectShape(redious,null,null));
    shape.getPaint().setColor(Color.GREEN);
    tv.setBackground(shape);
    layout.addView(tv);

这里activity_main.xml将只有一个空的LinearLayout布局。您可以根据您的条件或说明文档从存储或服务器生成视图,并将它们添加到LinearLayout中。

正如您所描述的,这是不可能的。但您可以通过Java代码来完成。

当我们在布局资源文件夹下创建一个布局xml文件并使用
android:id=“@+id/textview”
IDE提供一些id时,生成一个id R.java文件,其中包含我们分配的所有id

当我们从Activity或Fragment调用该视图时,我们使用该ID创建一个对象,如

TextView TextView=(TextView)findViewById(R.id.TextView);

用户也知道

如果要将xml代码表单存储或服务器作为xml格式的计划文本加载。您将为视图分配一些ID。但IDE不会为此生成任何ID。因此,您无法创建视图的对象

所以,解决方案是您必须通过Java代码生成视图,这意味着以编程方式

    setContentView(R.layout.activity_main);

    Display display = getWindowManager().getDefaultDisplay();
    int width = display.getWidth();
    width = width - (100/width)*80;

    LinearLayout layout = (LinearLayout) findViewById(R.id.lo_dynamic_view_container);
    LinearLayout.LayoutParams lparams = new LinearLayout.LayoutParams(
            LinearLayout.LayoutParams.WRAP_CONTENT,
            LinearLayout.LayoutParams.WRAP_CONTENT);

    TextView tv = new TextView(this);
    tv.setLayoutParams(lparams);
    tv.setWidth(width);
    float redious [] = { 0, 0, 8.3f, 8.5f, 8.2f, 8.9f, 0, 0 };
    ShapeDrawable shape = new ShapeDrawable (new RoundRectShape(redious,null,null));
    shape.getPaint().setColor(Color.GREEN);
    tv.setBackground(shape);
    layout.addView(tv);

此处activity_main.xml将只有一个空的LinearLayout布局。您可以根据您的条件或说明文档从存储或服务器生成视图,并将其添加到LinearLayout中。

嗯,无法从服务器加载xml并像通常的布局xml一样解析它。从
LatourInflater

出于性能原因,视图膨胀在很大程度上依赖于在构建时对XML文件进行的预处理。因此,当前不可能在运行时对普通XML文件使用带有XmlPullParser的LayoutInflater

它与生成IDS或类似的机制无关,只是性能——所以考虑到你确实需要这个特性,它有点被阻止了。


但如果您仍然想从第三方加载布局,可以使用lib。祝你好运

嗯,从服务器加载XML并像通常的布局XML一样解析它是不可能的。从LatourInflater:

出于性能原因,视图膨胀在很大程度上依赖于在构建时完成的XML文件的预处理。因此,当前不可能在运行时对普通XML文件使用带有XmlPullParser的LayoutInflater

它与生成IDS或类似的机制无关,只是性能——所以考虑到你确实需要这个特性,它有点被阻止了。p>


但如果您仍然想从第三方加载布局,可以使用lib。祝你好运

谢谢!虽然这个方法似乎还需要在xml上运行一个脚本,以便在执行之前将其转换为json。谢谢!尽管这种方法似乎还需要在xml上运行脚本,以便在执行之前将其转换为json。