Android中如何以编程方式设置ImageView layout_height?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (12)

我在我的main.xml文件中有一个ImageView:

<ImageView
            android:id="@+id/pageImage"
            android:layout_width="270dp"
            android:layout_height="45dp"
            android:layout_alignParentLeft="true"
            android:layout_alignParentTop="true"
            android:layout_marginLeft="25dp"
            android:layout_marginTop="15dp"
            android:scaleType="fitXY"
            android:src="@drawable/pageimage" />

我只需要将layout_height程序设置为另一个值吗?

提问于
用户回答回答于

我想你想要这样的东西:

ImageView imgView = (ImageView) findViewById(R.id.pageImage);
imgView.getLayoutParams().height = 200;

所以首先我们从XML中获取ImageView。然后,getLayoutParams()就可以完全获取您可以编辑的参数。你可以直接在那里设置它们。宽度相同等。

在这个例子中,他设置了20sp 的最小宽度,如下所示:

TextView tv0 = new TextView(this);
int px = (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_SP, 20, getResources().getDisplayMetrics());
tv0.setMinimumWidth(px);

PS这里是我使用的完整代码。希望这是你想要的:

package com.example.testproject2;

import android.os.Bundle;
import android.app.Activity;
import android.view.Menu;
import android.widget.ImageView;

public class MainActivity extends Activity {

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        ImageView imgView = (ImageView) findViewById(R.id.pageImage);
        imgView.getLayoutParams().height = 500;
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        getMenuInflater().inflate(R.menu.activity_main, menu);
        return true;
    }
}
用户回答回答于

你可以这样做:

LinearLayout.LayoutParams layoutParams  = new LinearLayout.LayoutParams(width_physical_pixels, height_physical_pixels);
imageView.setLayoutParams(layoutParams);

但是在参数中,它需要一个像素,所以您必须使用公式将像素转换为DP,例如,可以使用它来转换:

float scale = getBaseContext().getResources().getDisplayMetrics().density;    
px = dp_that_you_want * (scale / 160);

把所有东西组合在一起:

//Get screen density to use in the formula.
float scale = getBaseContext().getResources().getDisplayMetrics().density;    
px = dp_that_you_want * (scale / 160);

LinearLayout.LayoutParams layoutParams  = new LinearLayout.LayoutParams(px, px);
imageView.setLayoutParams(layoutParams);

扫码关注云+社区