我的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
以编程方式设置为另一个值。
此外,我需要在 dp 中设置值。所以它目前是45dp,我想在主要活动中将其更改为另一个值。
我试图弄清楚如何使用LayoutParams来做到这一点,但我无法成功。
感谢。
答案 0 :(得分:55)
我想你想要这样的东西:
ImageView imgView = (ImageView) findViewById(R.id.pageImage);
imgView.getLayoutParams().height = 200;
首先,我们从XML中获取ImageView。然后getLayoutParams()获取您可能编辑的参数。你可以直接在那里设置它们。宽度等相同
关于单位(sp,dp ......)我在这里找到了一些东西。希望这会有所帮助:
Use DIP, SP metrics programmatically
他们提到,所有单位都是像素。在示例中,他将最小宽度设置为20sp,如下所示:
TextView tv0 = new TextView(this);
int px = (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_SP, 20, getResources().getDisplayMetrics());
tv0.setMinimumWidth(px);
P.S。这是我使用的完整代码。希望这是你想要的:
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;
}
}
答案 1 :(得分:12)
您可以这样做:
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);
我不知道这是你正在寻找的,或者它是否会起作用,所以如果有,请告诉我。