0

2 つのリストビューと 2 つのデッド ボタンを含む線形レイアウトがあります。リスト ビュー間でスペースを均等に分割する方法。高さを 0dip に設定するなどの提案がいくつかありましたが、うまくいきませんでした。Eclipse のグラフィカル レイアウトは正しいレイアウトを示していますが、リストに異なる数の要素を追加すると、異なる高さに拡張されます。ここにxmlがあります。

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

    <Button
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:enabled="false"
        android:text="Installed engines" >
    </Button>

    <ListView
        android:id="@+id/primary"
        android:layout_width="match_parent"
        android:layout_height="0dp" 
        android:layout_weight="1" >
    </ListView>

    <Button
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:enabled="false"
        android:text="Active engines" >
    </Button>

    <ListView
        android:id="@+id/secondary"
        android:layout_width="match_parent"
        android:layout_height="0dp" 
        android:layout_weight="1" >
    </ListView>

</LinearLayout>

ありがとう

誰も私を信じていないので、ここにあるのは私が得ているもののイメージです. 写真を投稿するのに十分な評判がないので、リンクだけです:( ! run ! eclipse

xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx

結局のところ、これはこの回答に基づくxmlの問題ではない可能性がありますAndroidの線形レイアウトと重み

XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

これは、静的な XML レイアウトでは正しいです。実行時にビューを動的に追加する場合は、addView(button, new LinearLayout.LayoutParams(0, height, 1)); のようなレイアウト パラメータで addView を使用する必要があります。これは、正しい幅と重みの値でレイアウトを膨らませている場合でも当てはまります。— ヌサッチ

xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx

レイアウト インフレータを使用してビューをタブに追加します。多分それが問題です.. xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx

これは、インフレータを使用した場合の問題を再現するサンプル コードです。

public class TestActivity extends Activity {
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        ParticipantsPanel p = new ParticipantsPanel(this);
        setContentView(p);
    }
}

class ParticipantsPanel extends LinearLayout {
    public ParticipantsPanel(Context ctx) {
        super(ctx);

        LayoutInflater li = LayoutInflater.from(ctx);
        View myView = li.inflate(R.layout.participants, null);
        final ListView primary = (ListView) myView.findViewById(R.id.primary);
        final ListView secondary = (ListView) myView.findViewById(R.id.secondary);
        final ArrayAdapter<String> primaryA = 
            new ArrayAdapter<String>(ctx,R.layout.lvtext);
        final ArrayAdapter<String> secondaryA = 
            new ArrayAdapter<String>(ctx,R.layout.lvtext);

        primaryA.add("hello1");
        primaryA.add("hello2");
        primaryA.add("hello3");
        primaryA.add("hello4");
        primaryA.add("hello5");
        primaryA.add("hello6");
        primaryA.add("hello7");
        primaryA.add("hello8");

        secondaryA.add("select1");
        secondaryA.add("select2");

        primary.setAdapter(primaryA);
        secondary.setAdapter(secondaryA);

        addView(myView);
    }
}

xxxxxxxxxxxxxxxxxxxxxxx

さらに別の更新。 問題は Nuthatch (古い投稿から参照した人物) が指摘したとおりだと思います。参加者パネルのコードをメイン アクティビティに移動し、ビューを別の線形レイアウトに追加せずに直接設定すると、期待どおりに動作します。その理由と、コードをクラスに配置して望ましい動作を実現する方法についての説明をいただければ幸いです。

4

2 に答える 2

1

あなたが投稿したコードは良い例ではありません。を使用するときに同じスペースを取らListViewsない2 つの問題は、その.LayoutInflaterViewGroupLayoutParams

使用する場合:

addView(myView, new LinearLayout.LayoutParams(
                LinearLayout.LayoutParams.MATCH_PARENT,
                LinearLayout.LayoutParams.MATCH_PARENT));

または変更して、親をタグと設定R.layout.participantsに置き換えます。LinearLayoutmerge

        this.setOrientation(LinearLayout.VERTICAL);
        this.setWeightSum(2.0f);
        li.inflate(R.layout.participants, this, true);

のためにParticipantsPanel

その後、すべてが大丈夫なはずです。

于 2012-05-20T14:25:20.210 に答える
0

垂直方向の場合、加重ビューの高さを 0px (または 0dp など、Android のすべての単位で 0 は 0) に設定します。水平方向の場合は同じことを行いますが、幅は異なります。

于 2012-05-19T20:34:48.763 に答える