Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/184.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

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

Android 使用XML定位表单和文本窗口?

Android 使用XML定位表单和文本窗口?,android,xml,android-layout,Android,Xml,Android Layout,我正在做一个工作中的项目,有两个问题我不确定,如果有人能告诉我这是否可行,我将不胜感激 如果有一个XML文件,其中包含用于指示屏幕上对象位置的数据,那将是相当困难的。正在考虑存储坐标,然后解析坐标,并使用xml文档中存储的信息在Java中设置布局。你认为使用这种方法会变得太复杂吗 现在我怀疑这是可能的,但我只是想确定一下 B是否可以将EditText、TextView和其他小部件等存储在XML文件中,并使用Java对其进行解析,然后将其添加到布局中 提前感谢。对a和b: 我们这样做,效果很好:

我正在做一个工作中的项目,有两个问题我不确定,如果有人能告诉我这是否可行,我将不胜感激

如果有一个XML文件,其中包含用于指示屏幕上对象位置的数据,那将是相当困难的。正在考虑存储坐标,然后解析坐标,并使用xml文档中存储的信息在Java中设置布局。你认为使用这种方法会变得太复杂吗

现在我怀疑这是可能的,但我只是想确定一下

B是否可以将EditText、TextView和其他小部件等存储在XML文件中,并使用Java对其进行解析,然后将其添加到布局中

提前感谢。

对a和b:

我们这样做,效果很好:

更具体地说:

我们使用框架布局并动态地向其中添加UI元素。使用边距可以轻松设置大小和位置

B我们有一个活动,它可以显示XML文件中指定的任意表单。构建它只需要几百行代码,但效果很好

有关如何基于XML设置UI的一些代码:

首先,我假设您知道如何解析XML文件并将相关信息存储在对象中。在下面的示例中,包含XML文件中所有UI元素的视图称为frame

    FrameLayout frame = new FrameLayout(context);

    // assemble views
    // XmlElement is one element in the XML file
    // page and cntnr are of type XmlElement
    for (XmlElement cntnr : page.getChildren())
    {
        content.addView(getViewForContainer(cntnr, context));
    }
现在可以将框架用于setContentView或将其添加到另一个视图组。 缺少getViewForContainer方法:

对于所有类型的UI元素都可以这样做。我将仅显示createImage作为示例:

private static View createImage(Activity context,
        XmlElement page)
{
    ImageView iv = new ImageView(context);
    iv.setImageBitmap(BitmapFactory.decodeFile(RessourceLoader
                .getFilesDirectory() + page.getFile()));

    setImageViewPosition(iv, page);
    return iv;
}
以下是设置视图位置的方法。它仅适用于框架布局并使用边距。它还假设帧使用整个屏幕。如果你不想让它填满整个屏幕,那么就使用其他窗口宽度和高度

private static void setViewPosition(View view, Activity context,
    XmlElement page)
{
        final int windowWidth = context.getWindowManager().getDefaultDisplay().getWidth();
        final int windowHeight = context.getWindowManager().getDefaultDisplay().getHeight();
    Rect bounds = page.getBounds();
        int x = bounds.left;
    int y = bounds.top;
        int w = bounds.right;
        int h = bounds.bottom;

        LayoutParams params = new LayoutParams(w != 0 ? w : android.view.ViewGroup.LayoutParams.WRAP_CONTENT, h != 0 ? h : android.view.ViewGroup.LayoutParams.WRAP_CONTENT);
        params.setMargins(x, y, w != 0 ? windowWidth - w - x : 0, h != 0 ? windowHeight - h - y : 0);
            view.setLayoutParams(params);
}

正如我所说:几百行代码。使用类和工厂等也可以做得更好。。。但是你知道它是如何工作的:

请你详细说明B点好吗?我不太清楚你的意思。我们有一个在XML文件中指定的表单。它由按钮、文本视图、编辑文本、单选按钮和复选框组成。我们解析XML文件并用它构建UI。我们的布局是一个有两列的TableLayout。在第一列中,有一个描述表单字段的文本,就像您的名字一样。第二列包含实际的表单元素,如EditText等。将表单元素添加到布局的代码是前面提到的几百行代码。基本上实施起来并不困难。根据您对Java和Android的熟悉程度,实现使用XML构建的布局只需几个小时。因此,您在Java类中有一个EditText、TextView、RadioButton等类型的数组,然后使用循环添加所需数量的数组?您可以看到,我的任务是创建一个程序,允许用户通过更改XML自定义应用程序。只是不确定如何定位每个小部件时,我不知道事先有多少文本视图,编辑文本等将需要。如果我使用一个循环来声明它们,那么如何使用解析的XML来定位每个单独的循环呢?当我解析数据时,我有一个包含存储所有解析数据的ArrayList的类。您是否也将所有解析的数据存储在ArrayList中?我有几个关于代码的问题,我不太确定。首先,请参阅page.getChildren。那是关于什么的?在XmlElement类中是否设置了变量?另外,如果我尝试使用params.setMargins,它会出现一个错误。我只做了一个月的android编程,我的工作还有很多东西要学,而且我没有接受任何工作培训,所有这些都是自学的。如果问题看起来有点基本,那么很抱歉:P
private static void setViewPosition(View view, Activity context,
    XmlElement page)
{
        final int windowWidth = context.getWindowManager().getDefaultDisplay().getWidth();
        final int windowHeight = context.getWindowManager().getDefaultDisplay().getHeight();
    Rect bounds = page.getBounds();
        int x = bounds.left;
    int y = bounds.top;
        int w = bounds.right;
        int h = bounds.bottom;

        LayoutParams params = new LayoutParams(w != 0 ? w : android.view.ViewGroup.LayoutParams.WRAP_CONTENT, h != 0 ? h : android.view.ViewGroup.LayoutParams.WRAP_CONTENT);
        params.setMargins(x, y, w != 0 ? windowWidth - w - x : 0, h != 0 ? windowHeight - h - y : 0);
            view.setLayoutParams(params);
}