0

我有一个 XML 布局,它有一个谷歌地图、两个文本视图和一个相对布局的按钮。文本视图位于谷歌地图下方,当用户在地图上移动光标时,文本值“纬度:”和“经度:”更新为“纬度:xxx”和“经度”xxx”。提交按钮说“提交”并做到这一点,它将纬度/经度打包到一个意图中并将其传递给下一个活动。

这一切都很好,直到我开始弄乱布局。我注意到,因为我一直在 eclipse 中懒惰地使用图形设计工具,所以所有东西都有设置尺寸,这意味着在更大的屏幕上它看起来很傻。

我添加了另一个相对布局并将纬度/经度文本和提交按钮放入其中,并将新布局放置在另一个现在只有 MapView 的相对布局下。

我的意图是使用 android:layout_weight 将底部相对布局分配在底部屏幕的 15% 左右,而屏幕的其余部分将是谷歌地图。

物理尺寸很好。但是,如果我的 textviews 完全依赖于提交按钮(android:layout_above/below),则提交按钮的文本将采用依赖于它的 textview 的值并得到更新,而 textview 将停留在“lat /long:" 并且不会更新。

我目前在相对布局的顶部设置了文本视图,在底部设置了独立的提交按钮,它工作正常。我只是好奇到底发生了什么。

这是我的xml文件:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical" >

<RelativeLayout
    android:layout_width="fill_parent"
    android:layout_height="0dp"
    android:layout_weight="80" >

    <com.google.android.maps.MapView
        xmlns:android="http://schemas.android.com/apk/res/android"
        android:id="@+id/mapView"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:apiKey="xxx"
        android:clickable="true"
        android:enabled="true" >
    </com.google.android.maps.MapView>
</RelativeLayout>


<RelativeLayout
    android:layout_width="fill_parent"
    android:layout_height="0dp"
    android:layout_weight="20" >

    <TextView
        android:id="@+id/Latitude"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentLeft="true"
        android:layout_alignParentTop="true"
        android:text="Latitude:" />

    <TextView
        android:id="@+id/Longitude"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentLeft="true"
        android:layout_below="@+id/Latitude"
        android:text="Longitude:" />

    <Button
        android:id="@+id/submitbutton"
        style="?android:attr/buttonStyleSmall"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentBottom="true"
        android:layout_centerHorizontal="true"
        android:onClick="GOTOUPLOADER"
        android:text="Submit" />

</RelativeLayout>

这是唯一(我认为)适用于此 xml 文件的相关代码。请注意,我没有对此处的按钮文本做任何事情。它甚至不是这个类的一个属性。按钮与此类的唯一交互是它在单击时调用一个方法来启动另一个活动。

    //setupmap()instantiates mapview and centers on the given location
public void setupmap()
    {
        getcoords();//setup coordinates
        lattext.setText("Latitude: "+String.valueOf(Lat));
        lontext.setText("Longitude: "+String.valueOf(Long));
        mapView = (MapView) findViewById(R.id.mapView);//instantiate mapview
        mapView.setBuiltInZoomControls(true);//able to zoom
        mcontrol = mapView.getController();//mapcontroller contains methods to manipulate mapview
        mcontrol.animateTo(point);//zoom to our geopoint
        mcontrol.setZoom(19);//zoom level 1-21. 1=world view, 21=as zoomed in as possible
        MyOverlay over = new MyOverlay();//instantiate overlay
        listofoverlays = mapView.getOverlays();//create a list of overlays
        listofoverlays.clear();//clear list
        listofoverlays.add(over);//add our overlay
        mapView.invalidate();//invalidate for changes to take effect
    }//setupmap

请原谅所有的评论。

4

1 回答 1

1

好的,我仍然不确定我是否完全理解您的问题,但开始尝试解决此问题:

我在这里所做的是获取您的代码并将关系定位放回其上。请注意,如果您将一个对象与另一个对象相关联,则必须将要引用的对象放在被引用的对象下方。这是因为id在使用 .java 声明之前不在生成的 R.java 中android:id=@+id/object。在这种情况下,如果您想将一个对象声明为above另一个对象,那么我们从下往上构建。

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:baselineAligned="false"
    android:orientation="vertical" >

    <RelativeLayout
        android:layout_width="fill_parent"
        android:layout_height="0dp"
        android:layout_weight="80" >

        <com.google.android.maps.MapView
            xmlns:android="http://schemas.android.com/apk/res/android"
            android:id="@+id/mapView"
            android:layout_width="fill_parent"
            android:layout_height="fill_parent"
            android:apiKey="xxx"
            android:clickable="true"
            android:enabled="true" >
        </com.google.android.maps.MapView>
    </RelativeLayout>

    <RelativeLayout
        android:layout_width="fill_parent"
        android:layout_height="0dp"
        android:layout_weight="20" >

        <Button
            android:id="@+id/submitbutton"
            style="?android:attr/buttonStyleSmall"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignParentBottom="true"
            android:layout_centerHorizontal="true"
            android:text="Submit" />

        <TextView
            android:id="@+id/Longitude"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignParentLeft="true"
            android:layout_above="@id/submitbutton"
            android:text="Longitude:" />

        <TextView
            android:id="@+id/Latitude"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_above="@id/Longitude"
            android:layout_alignParentLeft="true"
            android:text="Latitude:" />
    </RelativeLayout>

</LinearLayout>

编辑:

从你的例子来看,你的问题似乎出在你的 java.util 中。你如何呼吁TextView使用setText你的节目?

请参见下面的示例:

TextView lattext = (TextView)findViewById(R.id.Latitude); 
lattext.setText("Latitude: " + String.valueOf(Lat));

// And

TextView lontext= (TextView)findViewById(R.id.Longitude);
// Avoid using "Long", Long is reserved... If I am unsure of whether text is reserved
// I will always place my initials in front of it... i.e. "String.valueOf(jjLong));"
lontext.setText("Latitude: " + String.valueOf(Lon));
于 2012-06-07T17:19:43.787 回答