1

このコンテンツとのダイアログがあります:

<RelativeLayout
    android:layout_width="wrap_content"
    android:layout_height="wrap_content" >

    <ScrollView
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:layout_alignParentTop="true"
        android:layout_marginBottom="25dp" >
        <LinearLayout
           ...
        </LinearLayout>
    </ScrollView>

    <Button
        android:id="@+id/closebtn"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_below="@id/scrollview"
        android:layout_centerHorizontal="true" />

</RelativeLayout>

できるだけLinearLayoutのコンテンツに合うように、ダイアログのサイズを垂直方向に変更したいと思います。ただし、LinearLayoutのコンテンツが高すぎると、ScrollViewがダイアログを埋め尽くし、閉じるボタンが下部を超えて押されて表示されないことがわかりました。

私が試したのは、Button layout_alignParentBottom="true"とScrollViewlayout_above= "@ + id / closebtn"を作成することでしたが、LinearLayoutのコンテンツが実際にある場合でも、ダイアログは常に画面全体に垂直に拡大します。短い。

4

3 に答える 3

0

これに対する1つの解決策は、プログラムで画面の高さを取得し、スクロールビューの高さを手動で指定することです。

画面サイズ(ピクセル単位)を取得するには:

画面サイズをピクセル単位で取得

問題は、ボタンの高さがピクセル密度に基づいて各画面で異なるピクセル数になることですが、ボタンは設定された量のDPになります。

XMLで、DPでボタンの高さを設定します。

次に、ボタンの高さが何ピクセルかを計算します。参照:Androidの「px」、「dp」、「dip」、「sp」の違いは何ですか?

次に、画面の高さからボタンの高さを引いたものを使用して、ボタンのレイアウトパラメータで設定できるサイズを決定できます。

LayoutParams params = findViewById(R.id.your_scroll_view).getLayoutParams();
params.height = screenHeight - buttonHeight;
于 2012-06-25T00:59:08.280 に答える
0

これを機能させるために、RelativeLayoutをLinearLayoutに変更することになりました。私が試したとき、それは私の本当に背が高くて細いダイアログを与えたので、私はもともとそれをしませんでした(内側のLinearLayoutにはImageViewsとTextViewsが含まれています)。しかし、驚くべきことに、すべてのビューをwidth = fill_parentからwrap_contentに変更すると、ダイアログが水平方向に伸びて画面全体に表示されます。これは私が望んでいたことであり、高さは正しく動作します。

于 2012-06-25T06:20:19.657 に答える
0

あなたが電話した後:

AlertDialog dialog = builder.show();    

次に、電話します。

fixScrollViewHeight(scrollView);

//

private void fixScrollViewHeight(ScrollView scrollView) {
    int screenHeight = activity.getWindowManager().getDefaultDisplay().getHeight();
    LayoutParams lp = scrollView.getLayoutParams();
    lp.height = screenHeight / 3;
    scrollView.setLayoutParams(lp);
}
于 2013-01-07T17:15:43.677 に答える