Androidはプログラムでカスタムビューの高さと幅を設定します


128

という名前のカスタムビューを作成しましたGraphview。以下はGraphViewクラスの構造です。

public class GraphView extends View {

    public GraphView(Context context, float[] values, String title, String[] horlabels, String[] verlabels, boolean type) {
        super(context);
                ........
   }

   ..................
   .................
}

を使用してテーブル行にビューを追加しましたaddview()。正常に動作しています。次に、の高さと幅を設定しGraphViewます。どうやってするか?

回答:


140

簡単な方法は、プログラムでそのようにサイズを設定することです:

graphView.setLayoutParams(new LayoutParams(width, height));

ビューの正確なサイズがわかっている場合は問題ありません。あなたはより柔軟なアプローチをたい場合は、上書きすることができますonMeasure()利用可能なスペースとレイアウト制約(に応じて、より正確にビューを測定するための方法をwrap_contentmatch_parent、または固定サイズ)。

オーバーライド方法の例onMeasure()は、AndroidのドキュメントLabelViewSDKディレクトリのサンプルを参照してください。


16
そこにインポートしているLayoutParamsを知っておくと役に立ちます。
user3690202 '19 / 11/16

1
LayoutParamsは、graphViewが配置されているレイアウトからのものである必要があります。たとえば、XMLレイアウトファイルgraphViewが内RelativeLayoutに配置されている場合、次を使用する必要がありますnew RelativeLayout.LayoutParams(width, height)
Vic

208

次のように高さと幅を設定できます。

myGraphView.setLayoutParams(new LayoutParams(width, height));

76
使用するLayoutParamクラスが正しい親Layoutクラスからのものであることを確認する必要があります。たとえば、GraphViewがLinearLayoutに含まれている場合、LinearLayout.LayoutParamsクラスを使用する必要があります。
yincrash 2012

41
これも機能し、正しいLayoutParamsクラスを確実に使用できますmyGraphView.getLayoutParams().height = 100;
sulai

21
実行する場合はthis.getLayoutParams().height = 100、必ずを実行してくださいthis.setLayoutParams(this.getLayoutParams())。そうしないと、何も実行されません(便利です)。
Achal Dave 2013

4
この答えがより多くのポイントを得ているのは奇妙だと思います。簡単ですが、モジュール性ははるかに低くなります。別の場所でビューを使用する場合は、それらの幅/高さの値もそこにハードコードする必要があります。これを使用する場合は注意してください。
gardarh 2013年

1
それを指摘してくれて@yincrashに感謝します。私のカスタムビューの親クラス(私の場合はSurveView)の代わりに親ビューのクラス(私の場合はRelativeLayout)を使用する必要があるのは奇妙に思えます
ericn

75

このように相対レイアウトでビューの高さと幅を設定できます

ViewGroup.LayoutParams params = view.getLayoutParams();
params.height = 130;
view.setLayoutParams(params);

2
再度layoutparamを設定する必要はありません。自動的に反映されます。これは、オブジェクト指向アプローチの利点です。
ディペンドラ2015

8
@Dipendraへの呼び出しsetLayoutParams()、それはこのような他のメソッドを呼び出すために必要になるresolveLayoutParams()requestLayout()
ウィリアム

onCreateで例外を与えるgetLayoutParams()はnull値です。そのため、params.heightで例外が発生します
Sibasish

高さを設定する必要があるビューを参照する必要があります。同じビューを指しているかどうかを確認してください
Rakshi

1
layoutParamsビューの開始時にNPEを取得します。これを実行する時点で説明してください。
John Sardinha

6

Kotlinでは、仮想プロパティを使用してビューの幅と高さを直接設定できます。

someView.layoutParams.width = 100
someView.layoutParams.height = 200

4
spin12.setLayoutParams(new LinearLayout.LayoutParams(200, 120));

spin12あなたのスピナーとされ200120があるwidthheight、あなたのためにspinner


3

これはKotlinベースのバージョンで、親ビューがのインスタンスであると想定していますLinearLayout

someView.layoutParams = LinearLayout.LayoutParams(100, 200)

これにより、幅と高さ(100および200)を1行で設定できます。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.