【问题标题】:Android: Set ImageView layout_height programmaticallyAndroid:以编程方式设置 ImageView layout_height
【发布时间】:2012-08-11 01:02:30
【问题描述】:

我的 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 来做到这一点,但没有成功。

谢谢。

【问题讨论】:

    标签: android android-imageview


    【解决方案1】:

    我想你想要这样的东西:

    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);
    

    附:这是我使用的完整代码。希望这是您想要的:

    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;
        }
    }
    

    【讨论】:

    • 我觉得getLayoutParms()不能用来设置值,只能取回吧?
    • 不,一点也不。我刚试过。它工作得很好! :-)
    • 等等,你能用你的方法设置一个值吗?我做不到。 height 后面需要一个分号。
    • 是的,它有效。我在答案中发布了我的代码。希望这是您想要做的。对您来说有例外或类似的情况吗?我为 Android 2.3 编译 也许他们改变了什么?您使用 Android 4.x 吗?
    • 美丽!有用!太好了,非常感谢。我的朋友,我欠你很多:-)
    【解决方案2】:

    你可以这样做:

    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);
    

    我不知道这是否是您正在寻找的东西,或者它是否会起作用,所以如果它起作用,请告诉我。

    【讨论】:

    • 这也很好用!太感谢了。下面的答案首先出现,并且更简单一些。请原谅我没有选择最佳答案。
    猜你喜欢
    • 2020-10-06
    • 1970-01-01
    • 1970-01-01
    • 2014-08-12
    • 2017-07-14
    • 2012-09-03
    • 1970-01-01
    • 2018-04-15
    • 2018-03-04
    相关资源
    最近更新 更多