在Android中设置运行时从xml文件查看
我试图制作一个简单的程序,允许“加载”一个.xml文件,并将其显示为新活动的在Android中设置运行时从xml文件查看,android,xml,view,Android,Xml,View,我试图制作一个简单的程序,允许“加载”一个.xml文件,并将其显示为新活动的setContentView中的视图。基本上,我希望新活动的视图与我调用的视图相同 setContentView(R.layout.my_view) 其中R.layout.my_view就是那个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。