1

より多くのコントロールを備えたアクティビティがあります: スピナー、2 つの編集ボックス、いくつかのテキストビューとリストビューのボタン、それに別のボタンが続きます。すべて垂直レイアウトです。

最初のボタンの OnClick で、(他の編集ボックスの値とスピナーの値に基づいて) リストビューに新しい項目を追加します。このようにして、リストビューは成長し続けます。追加するたびにリストビューの高さを自動的に拡大する方法があるかどうか知りたいです。また、下部のボタンは拡張後も下部に残る必要があります。

レイアウト上の多くのコントロールのためにリストビューが非常に小さいため、これが必要です。一度に2つのアイテムを表示することはほとんどありません。そのため、ユーザーは一度に追加されたすべてのアイテムを表示することはできません。すべてを表示するには、この2 アイテム リストビュー内をスクロールする必要があります。そして、それは悪くて愚かに見えます。また、ユーザーはリストに 2 つ以上の項目があることを知っておく必要があります。これは、それらを直接見なければ、2 つの項目だけが存在し、新しい項目が表示されないためアプリが機能しないと想定できるためです。私は自分自身を明確にしたことを願っています。

それが可能かどうか教えてください、またはこの場合の最善のアプローチは何ですか?

私のレイアウトは次のとおりです。

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    tools:context=".NewStuff" >

    <Button
        android:id="@+id/button1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentBottom="true"
        android:layout_alignParentRight="true"
        android:text="Back" />

    <TextView
        android:id="@+id/textView1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentLeft="true"
        android:layout_alignParentRight="true"
        android:layout_alignParentTop="true"
        android:gravity="center"
        android:text="Page title"
        android:textAppearance="?android:attr/textAppearanceLarge" />

    <TextView
        android:id="@+id/textView2"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignLeft="@+id/textView1"
        android:layout_below="@+id/textView1"
        android:text="Choose item" />

    <Spinner
        android:id="@+id/spinner1"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_alignLeft="@+id/textView2"
        android:layout_below="@+id/textView2" />

    <TextView
        android:id="@+id/textView3"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignLeft="@+id/spinner1"
        android:layout_below="@+id/spinner1"
        android:text="Property 1" />

    <EditText
        android:id="@+id/editText1"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_alignLeft="@+id/textView3"
        android:layout_alignRight="@+id/spinner1"
        android:layout_below="@+id/textView3"
        android:ems="10"
        android:inputType="numberDecimal" >

        <requestFocus />
    </EditText>

    <TextView
        android:id="@+id/textView4"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignLeft="@+id/editText1"
        android:layout_below="@+id/editText1"
        android:text="Property 2" />

    <EditText
        android:id="@+id/editText2"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_alignLeft="@+id/textView4"
        android:layout_alignRight="@+id/editText1"
        android:layout_below="@+id/textView4"
        android:ems="10"
        android:inputType="numberDecimal" />

    <Button
        android:id="@+id/button2"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_alignLeft="@+id/editText2"
        android:layout_alignRight="@+id/editText2"
        android:layout_below="@+id/editText2"
        android:text="Add to listview" />

    <Button
        android:id="@+id/button3"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignBottom="@+id/button1"
        android:layout_toLeftOf="@+id/button1"
        android:text="Save listview contents" />

    <ListView
        android:id="@+id/listView1"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_above="@+id/button1"
        android:layout_alignLeft="@+id/button2"
        android:layout_below="@+id/button2" >

    </ListView>

</RelativeLayout>
4

3 に答える 3

3

カスタムリストビューが必要です。

public class ExpandedListView extends ListView {

private android.view.ViewGroup.LayoutParams params;
private int old_count = 0;

public ExpandedListView(Context context, AttributeSet attrs) {
    super(context, attrs);
}
@Override
protected void onDraw(Canvas canvas) {
    if (getCount() != old_count) {
        old_count = getCount();
        params = getLayoutParams();
        params.height = getCount() * (old_count > 0 ? getChildAt(0).getHeight() + 2 : 0);
        setLayoutParams(params);
    }
    super.onDraw(canvas);
}
@Override
public boolean dispatchTouchEvent(MotionEvent ev){
   if(ev.getAction()== MotionEvent.ACTION_MOVE)
      return true;
   return super.dispatchTouchEvent(ev);
}

}

このリストビューは、その子の数とともに大きくなります。xmlで使用する必要があります

<your.path.ExpandedListView
                android:layout_width="match_parent"
                android:layout_height="0dip"
                android:layout_weight="1" />

これが役立つことを願っています

于 2013-11-26T15:11:58.633 に答える
2

LinearLayout を使用してすべてを保持し、ListView で layout_weight を使用してこれを実現します。

<ListView android:id="@+id/listView1"
          android:layout_width="match_parent"
          android:layout_height="0dp"
          android:layout_weight="1"
          android:layout_above="@+id/button1"
          android:layout_alignLeft="@+id/button2"
          android:layout_below="@+id/button2"/>
于 2013-08-06T01:47:33.357 に答える