2011-01-25 11 views
7

したがって、画面の領域に応じて画像のサイズを変更する必要があります。画像は画面の高さの半分になる必要があります。そうしないと、テキストが一部重なるた​​めです。Androidスクリーンサイズに応じて画像サイズを変更しますか?

So高さ= 1/2スクリーン高さ。

Display myDisplay = ((WindowManager) getSystemService(Context.WINDOW_SERVICE)).getDefaultDisplay(); 
int width =myDisplay.getWidth(); 
int height=myDisplay.getHeight(); 

しかし、どのように私はJavaで画像の高さを変更します:アスペクト比Iだった何かを見つけ

(ただ、同じアスペクト比を維持しようとしている)* 幅=高さ?可能であればXMLでもかまいませんか?私は実用的な答えを見つけることができないようです。

答えて

17

LayoutParamsのコードでこれを行うことができます。残念ながら、XMLを使ってパーセンテージを指定する方法はありません(直接ではなく、重みをつぶすことはできますが、それは常に助けになるとは限らず、縦横比は維持されません)。

//assuming your layout is in a LinearLayout as its root 
LinearLayout layout = (LinearLayout)findViewById(R.id.rootlayout); 

ImageView image = new ImageView(this); 
image.setImageResource(R.drawable.image); 

int newHeight = getWindowManager().getDefaultDisplay().getHeight()/2; 
int orgWidth = image.getDrawable().getIntrinsicWidth(); 
int orgHeight = image.getDrawable().getIntrinsicHeight(); 

//double check my math, this should be right, though 
int newWidth = Math.floor((orgWidth * newHeight)/orgHeight); 

//Use RelativeLayout.LayoutParams if your parent is a RelativeLayout 
LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(
    newWidth, newHeight); 
image.setLayoutParams(params); 
image.setScaleType(ImageView.ScaleType.CENTER_CROP); 
layout.addView(image); 

複雑すぎるかもしれませんが、もっと簡単な方法がありますか?私が最初にやってみたいのはこれです。

+0

これを実行しようとすると、Force Closeが表示されているようです。 LogCatの下でこれが助けになると、「キャッチされていない例外のためスレッドがメイン終了しました」というメッセージが表示されます。私はこのことがどういう意味かはっきりしていません。 Ps.私はまだまだAndroidの新機能です。 – QQWW1

+1

これは一般的な例です。あなたの状況はコース(変数名、XML idsなど)によって異なります。 LogCatの下には、何が発生したのか、そしてファイルのどの行にトレースがあるのでしょうか。 – kcoppock

+0

Ahhh ...私が間違ったことを見ると、私はRelativeLayoutではなくImageViewに "R.id.rootlayout"を置き換えました。ありがとう!!!! – QQWW1

関連する問題