在Android的运行时从xml文件设置视图

问题描述 投票:0回答:1

[我正在尝试制作一个简单的程序,该程序允许“加载” .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) )

似乎要求文件已在编译时。有什么我想念的吗?

android xml view
1个回答
0
投票

这是您所无法描述的。但是您可以通过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。

© www.soinside.com 2019 - 2024. All rights reserved.