21

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を使用してこれを行う方法を理解しようとしましたが、成功しませんでした。

ありがとう。

4

2 に答える 2

59

私はあなたがこのようなものが欲しいと思います:

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

したがって、最初にXMLからImageViewを取得します。次に、getLayoutParams()は、編集できるパラメーターを正確に取得します。そこに直接設定できます。幅なども同様です。

ユニットについて(sp、dp ...)ここで何かを見つけました。お役に立てれば:

プログラムでDIP、SPメトリックを使用する

そこで彼らは、すべての単位がピクセルであると述べています。この例では、彼は次のように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;
    }
}
于 2012-08-11T01:26:43.057 に答える
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);

これがあなたが探しているものなのか、それともうまくいくのかわかりませんので、うまくいくかどうか教えてください。

于 2012-08-11T01:34:41.897 に答える