15

レイアウト内に静的な高さのスクロール可能な領域があるという問題を解決しようとすると、多くの問題が発生します。同じ画面に表示する必要がある 3 つの長いリストがありますが、すべてのエントリを順番に表示するのはまったく現実的ではありません。カテゴリをスキップしたい場合は、おそらく数百のエントリをスクロールする必要があるからです。

内部に Linear Layout を含むスクロール ビューがあるとします。これは、画面上で最大 250 dp の高さを占め、250 dp のスペースに収まりきらないほど多くのエントリが入力されると、独立してスクロールできるようにしたいと考えています。

私が今持っているものは次のとおりです。

<ScrollView
    android:minWidth="25px"
    android:minHeight="150px"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:id="@+id/XXXXXXX"
    android:scrollbars="vertical">

    <LinearLayout
        android:orientation="vertical"
        android:minWidth="25px"
        android:minHeight="25px"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:id="@+id/XXXXXX" />
</ScrollView>

データが入力されると、scrollview と linearlayout は、250 dp/px の「ウィンドウ」を使用する代わりに (任意の測定値が適しています)、コンテンツをスクロールできるようにする代わりに、コンテンツに合わせてすべてを表示する必要がある限り拡大します。

私は Android プラットフォームを初めて使用するので、おそらく答えは明らかで、言語が理解できなかっただけかもしれませんが、どんな助けも大歓迎です! ありがとうございました

--- 解決済み: 高さのある ScrollView の外側に linearLayout を配置します。

4

4 に答える 4

21

この回答の助けを借りて、この場合に使用できる非常に基本的な ScrollView コンポーネントをまとめることができました。

ScrollView を拡張するカスタム クラスを作成し、次の変更を行います。

public class MaxHeightScrollView extends ScrollView {

    private int maxHeight;

    public MaxHeightScrollView(Context context) {
        super(context);
    }

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

    public MaxHeightScrollView(Context context, AttributeSet attrs, int defStyleAttr) {
        super(context, attrs, defStyleAttr);
        init(context, attrs);
    }

    @TargetApi(Build.VERSION_CODES.LOLLIPOP)
    public MaxHeightScrollView(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) {
        super(context, attrs, defStyleAttr, defStyleRes);
        init(context, attrs);
    }

    private void init(Context context, AttributeSet attrs) {
        if (attrs != null) {
            TypedArray styledAttrs = context.obtainStyledAttributes(attrs, R.styleable.MaxHeightScrollView);
            maxHeight = styledAttrs.getDimensionPixelSize(R.styleable.MaxHeightScrollView_maxHeight, 200); //200 is a default value
            styledAttrs.recycle();
        }
    }

   @Override
   protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
       heightMeasureSpec = MeasureSpec.makeMeasureSpec(maxHeight, MeasureSpec.AT_MOST);
       super.onMeasure(widthMeasureSpec, heightMeasureSpec);
   }
}

あとは、values フォルダーの attrs.xml ファイルで styleable を宣言するだけです (ない場合は、プロジェクトの res フォルダーの values フォルダーにこの名前の xml ファイルを作成してください)。そこに次の行を追加します。

<declare-styleable name="MaxHeightScrollView">
    <attr name="maxHeight" format="dimension" />
</declare-styleable>

新しい ScrollView を次のように使用します。

<com.yourpackage.MaxHeightScrollView
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    app:maxHeight="300dp">
</com.yourpackage.MaxHeightScrollView>

クレジットは、これをすばやくまとめるために口笛を吹くために行きます!

于 2014-12-09T11:32:11.833 に答える
3

必要なのはmaxHeight. ただし、ビューはそれをサポートしていないため、回避策を使用する必要があります。

この答えをチェックしてください:

https://stackoverflow.com/a/13811461/770467

于 2013-07-16T18:18:31.967 に答える
1

高さを固定して ScrollView の周りにレイアウトを追加します

于 2019-06-28T15:11:16.923 に答える