[我正在尝试制作一个简单的程序,该程序允许“加载” .xml文件并将其显示为新活动的setContentView
中的“视图”。基本上,我想要的是新活动的视图与我调用
setContentView(R.layout.my_view)
其中R.layout.my_view
将是该xml文件。但就我而言,该文件在编译时尚不存在,应动态加载(例如,从存储中)。
我想我可以解析我的.xml文件并通过代码动态地构建视图,但这就像重新发明轮子一样,而且视图极有可能也不相同。我认为应该有一些简单的方法可以做到这一点,但是到目前为止,我发现的所有方法都没有类似的问题(例如
getResources().getXml(R.layout.my_view);
//or
LayoutInflater.from(context).inflate(R.layout.my_view, null) )
似乎要求文件已在编译时。有什么我想念的吗?
这是您所无法描述的。但是您可以通过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。