レイアウト内に静的な高さのスクロール可能な領域があるという問題を解決しようとして、多くの問題を抱えています。同じ画面に表示する必要のある3つの長いリストがあり、すべてのエントリを順番に表示することは完全に非現実的です。そのため、カテゴリをスキップする場合は、数百ものエントリをスクロールする必要があるためです。
内部にリニアレイアウトがあるスクロールビューがあると仮定します。たとえば、画面の高さは最大で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は伸縮し、そのすべてを表示します代わりに 250dp/pxの「ウィンドウ」(どの測定でもいいです)その中でスクロール可能なコンテンツ。
私はAndroidプラットフォームに慣れていないので、おそらく答えは明白であり、私は言語を理解していませんでしたが、どんな助けも大歓迎です!ありがとうございます
---解決済み:高さのあるScrollViewの外側にlinearLayoutを配置します。
必要なのはmaxHeight
です。ただし、ビューではサポートされていないため、回避策を使用する必要があります。
この答えをチェックしてください:
this 回答の助けを借りて、この場合に使用できる非常に基本的な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);
}
}
そして、マイナーなことの1つは、valuesフォルダーのattrs.xmlファイルでスタイル可能を宣言することです(これがない場合は、プロジェクトの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>
クレジットは whizzle に移動し、これをすばやくまとめます!
私の簡単な解決策。
XMLでScrollView
heighを設定:
Android:layout_height="wrap_content"
現在の測定された高さが200より大きい場合、このコードを追加して最大高さを200に設定します
sv.measure(0, 0);
if (nsv.getMeasuredHeight() > 200) {
LinearLayout.LayoutParams lp = new LinearLayout.LayoutParams(
ViewGroup.LayoutParams.MATCH_PARENT, 200);
sv.setLayoutParams(lp);
}
私の例ではScrollView
がLinearLayout
に含まれているため、LinearLayout.LayoutParams
を使用しました。
高さを固定してScrollViewの周りにレイアウトを追加します