2

このレイアウトには問題があります:(

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/cuerpo"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:layout_gravity="center_vertical"
    android:orientation="vertical" >
...

Java コードで

LinearLayout cuerpo = (LinearLayout) findViewById(R.id.cuerpo);

if(align){
   cuerpo.setGravity(Gravity.CENTER_VERTICAL);
}else{
   cuerpo.setGravity(Gravity.NO_GRAVITY);
}

無重力にはlayout_gravityが必要です。

4

2 に答える 2

8

あなたが話しているレイアウトの重力LayoutParamsは、LinearLayoutオブジェクトの範囲内にあります。したがって、論理的には、これを取得するには、次の手順に従う必要があります。

  1. の を取得しLayoutParamsますLinearLayout

  2. がどうあるべきかわかっている場合はLayoutParams、それらをキャストできます (注意してください。これは選択に基づいているため、正しいことを確認する必要があります!)。

  3. gravityのを必要に応じて設定LayoutParamsします。

したがって、コードでは次のようになります。

ViewGroup.LayoutParams layoutParams = cuerpo.getLayoutParams(); // Step 1.
LinearLayout.LayoutParams castLayoutParams = (LinearLayout.LayoutParams) layoutParams; // Step 2.
castLayoutParams.gravity = Gravity.CENTER_VERTICAL; // Step 3.

または、すべてのステップを 1 つで実行する単純なワンライナーとして:

((LinearLayout.LayoutParams) cuerpo.getLayoutParams()).gravity = Gravity.CENTER_VERTICAL;

注意してください:

あなたが何をしようとしているのか正確にはわかりませんが、正しくないようです。のタイプは のタイプでLayoutParamsはなく、あなたが存在するViewのタイプです。LayoutView

(つまり、@gincsait のリファレンスのように、 aButtonに aがある場合LinearLayoutLayoutParamsButtonは type になります。 のについてLinearLayout.LayoutParamsも同じことは言えません。)LayoutParamsLinearLayout

于 2013-02-06T02:50:04.253 に答える
-2

プログラムでlayout_gravityを設定する方法によると? あなたは書くべきです:

LinearLayout cuerpo = (LinearLayout) findViewById(R.id.cuerpo);    
LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(
            LayoutParams.WRAP_CONTENT, LayoutParams.FILL_PARENT);

if (align) {
    params.gravity= Gravity.CENTER_VERTICAL;
} else {
    params.gravity= Gravity.NO_GRAVITY;
}
cuerpo.setLayoutParams(params);
于 2013-02-06T02:47:48.310 に答える