0

マイ アクティビティは 2 つの部分で構成されています。1) 上部のリストビュー。2) 下部 (簡単にするために、背景が黒の TextView にすぎません)。ListView の最後の要素の直後に黒い TextView を配置します。ListView の高さを wrap_content に設定することで、これを簡単に実現できます (ListView の高さに wrap_content を使用しないでください)。 ここに画像の説明を入力

ここから問題が始まります: ListView が画面の半分以上に大きくならないようにします (ListView に多くの項目がある場合、通常の ListView (スクロール可能) のように動作させたいのですが、占有するだけです)。以下のように、アクティビティ画面の半分: ここに画像の説明を入力

XMLを操作するだけでこれを行うことは可能ですか? はいの場合 - どのように?そうでない場合は、コードでこれを実現する方法の関連する方向性を教えてください。

4

2 に答える 2

1

このタイプの動作は動的すぎて XML で定義できませんが、カスタム コンテナー ビューを使用すると簡単に実現できます。あなたのアプリケーションについていくつかの仮定を立てています。主に、アクティビティのルート レイアウトには 2 つの子 (ListViewとフッター ビュー) しかないということです。それに基づいて、以下はLinearLayout必要なものを提供するカスタムです。

public class ComboLinearLayout extends LinearLayout {
    public ComboLinearLayout(Context context) {
        super(context);
    }

    public ComboLinearLayout(Context context, AttributeSet attrs) {
        super(context, attrs);
    }

    @Override
    protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
        //We're cheating a bit here, letting the framework measure us first
        super.onMeasure(widthMeasureSpec, heightMeasureSpec);

        //Impose a maximum height on the first child
        View child = getChildAt(0);
        int newHeightSpec = MeasureSpec.makeMeasureSpec(getMeasuredHeight() / 2, MeasureSpec.EXACTLY);
        if (child.getMeasuredHeight() > (getMeasuredHeight() / 2)) {
            measureChild(child, widthMeasureSpec, newHeightSpec);
        }

        //Optional, make the second child always half our height
        child = getChildAt(1);
        measureChild(child, widthMeasureSpec, newHeightSpec);
    }
}

次に、これを次のようにアクティビティ レイアウトに適用できます。

<com.example.myapplication.ComboLinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical">

    <ListView
        android:id="@+id/list"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"/>

    <TextView
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:text="Hi Mom!"
        android:background="#0A0"/>
</com.example.myapplication.ComboLinearLayout>

コンテナ コードの正味の効果は、コンテナの高さの測定値がListViewそれよりも大きい場合にのみ、コンテナの高さの正確な半分に固定されることです。それ以外の場合は、ListViewを小さくできます。

必要に応じて追加した補助的なトリックがあります。これは、フッター ビューを常に画面の半分の高さにするオプションのコード ブロックです。XML でフッター ビューを固定の高さに設定している場合は、おそらく からその 2 番目のセクションを削除できますonMeasure()。そのコードを使用する場合、フッター ビューがmatch_parentXML で に設定されている場合に最適に機能します。

于 2013-08-19T17:15:16.257 に答える
0

xmlだけではできません。ListView の固定の高さまたは重量を設定すると、常に固定の位置になります。これを実現するには、リストビューが大きくなるにつれてリストビューの親の高さを動的に設定し、要件を満たしたときに停止する必要があります。それがあなたを助けることを願っています。

于 2013-08-19T15:56:56.610 に答える