0

Google マップ、2 つのテキスト ビュー、相対レイアウトのボタンを含む XML レイアウトがあります。テキスト ビューは Google マップの下にあり、ユーザーがカーソルをマップ上に移動すると、"Latitude:" と "Longitude:" というテキスト値が "Latitude:xxx" と "Longitude"xxx" に更新されます。送信ボタンには、次のように表示されます。 「送信」して、それを実行します。緯度/経度をインテントにパッケージ化し、次のアクティビティに渡します。

レイアウトをいじり始めるまで、これはすべて問題ありませんでした。Eclipse でグラフィカル デザイン ツールを怠惰に使用していたため、すべてに寸法が設定されていることに気付きました。

別の相対レイアウトを追加し、そこに緯度/経度テキストと送信ボタンを配置し、新しいレイアウトを、MapView のみを持つ他の相対レイアウトの下に配置しました。

私の意図は、android:layout_weight を使用して、botton の画面の約 15% 程度の下の相対レイアウトを割り当てることでした。画面の残りの部分は Google マップになります。

物理的に寸法は問題ありませんでした。ただし、送信ボタンに依存するテキストビューがまったくある場合 (android:layout_above/below)、送信ボタンのテキストはそれに依存するテキストビューの値を取得し、更新されますが、テキストビューは「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で宣言されるまで、生成された 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にあるようです。あなたはあなたのショーをどのよう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 に答える