0

さて、私は自分自身を軽視します。私の電話ではなく、エミュレーターでは問題なく表示されるため、実際には混乱しています。

エミュレーターでは、カスタム SurfaceView _map オブジェクトが画面全体を占めていますが、下部の EditText テキスト ボックスは本来あるべき場所にあります。Motorola Droid で同じコードを実行すると、どこにも EditText が表示されません。

私が持っている LinearLayout 実装で何かが欠けていると思います。これまで、別の API のレイアウト マネージャーの使用方法を簡単に学習してきました。

コードは次のとおりです。

    _map = new Map(this);
    _chatText = new EditText(this);

    layout = new LinearLayout(this);
    layout.setOrientation(LinearLayout.VERTICAL);
    layout.setLayoutParams(new LayoutParams(LayoutParams.FILL_PARENT, 1));
    layout.setGravity(Gravity.BOTTOM);
    layout.addView(_map, 0);
    layout.addView(_chatText, 1);

    setContentView(layout);

とても率直に見えるので、実際の Android デバイスで実行すると、なぜ EditText を食べるだけなのか、正直なところわかりません。悲しいことに、私はすでにエミュレーター自体に正しく表示されるようにするのにかなりの時間を費やしました。

4

1 に答える 1

1

はい、電話が異なれば結果も異なります。私も携帯電話を 1.2 GHz にオーバークロックし、カスタム ROM を持っているので、これは私に当てはまるかもしれません。いずれにせよ、この小さな不具合に対する解決策は、レイアウトに追加されたビューに重み指定を追加することでした。

LinearLayout.LayoutParams lpMap = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.FILL_PARENT, LinearLayout.LayoutParams.FILL_PARENT); // Verbose!
    lpMap.weight = 0.15f; 

次に、上記の代わりに次の行を使用しました。

layout.addView(_map, 0, lpMap);

これが誰かに役立つことを願っています。確かに紛らわしい状況ですが、いじくり回すことが解決策になる場合もあります。私は自分の質問に答えましたが、コミュニティ全体に感謝します。

于 2010-11-07T03:38:52.457 に答える