2013-12-17 8 views
9

私の問題に関する多くのギガバイトの情報があることを知っています。developer.android.comの公式文書、XDA-開発者とここの記事、および他の多くの人はまだそれに問題があると私はあなたが私にそれを説明することを願っています。だから私は、メイン画面上のダッシュボードのアイコンでアプリをした、と私は、この画面は、既存のすべての画面で同じに見えたされることを確認する必要があり、ここでは、肖像画や土地standartsです:サポートの乗算画面の理解

MAIN_PORTRAITMAIN_LAND

私は、各画面の解像度のためdimens.xmlにsettedてきた

enter image description here

そして、このような画像のサイズ、文字サイズや余白など、すべてのサイズ:

は、私は次のフォルダ私のプロジェクトに追加したそれを作るために、 、私はそれが考えていた異なるデバイスで同じ画像を見るのに十分です。しかし、私は間違っていました。解像度は同じですが、画面サイズが異なって見えます。ここでは3.2" である5.1" MDPIとスクリーン:

Screen 3.2"Screen 5.1"

私は 『値-MDPI-sw320dp』などのフォルダを追加する必要があり、私は取得していないというようにか何か別のがあります私はすべての画面で同じ写真を見なければなりませんか?すべてのサイズを2倍に設定するのは正しい方法ですか?それを私に説明してください。ご注意ください。

+0

このリンクをチェックするhttp://stackoverflow.com/questions/19065701/applying-resolution-for-different-devices/19065842#19065842 –

+0

@KanwaljitSingh私はあなたの答えを読んだあなたが私が尋ねたことを理解していないようです。ええ、「デバイス解像度」を使用するのはまったく正しいですが、画面解像度は同じですが画面サイズが異なるデバイスを入手する場合はどうしますか?私はすべてのサイズ(画像、ボタンなど)にディメンションを使用したという事実が複雑になります。 – whizzzkey

+0

okこれをチェックしてくださいhttp://stackoverflow.com/questions/15506786/how-do-i-create-different-layouts-for-4-and-10-displays-at-same-resolution –

答えて

4

これらの異なるサイズをすべて指定する必要はありませんそれと同じくらいシンプルな画面。 レイアウトでちょっと遊びましょう。 たとえば、最初の画面を見てみましょう。 TableLayoutを使用することもできますし、N LinearLayoutを内部に持つLinearLayoutを使用することもできます。この時点では単に重さを使用してください! 例:

<?xml version="1.0" encoding="utf-8"?> 

<LinearLayout 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" > 

    <ImageView 
     android:layout_width="0px" 
     android:layout_height="wrap_content" 
     android:layout_weight=".33" /> 

    <ImageView 
     android:layout_width="0px" 
     android:layout_height="wrap_content" 
     android:layout_weight=".33" /> 

    <ImageView 
     android:layout_width="0px" 
     android:layout_height="wrap_content" 
     android:layout_weight=".33" /> 
</LinearLayout> 

    <LinearLayout 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" > 

    <ImageView 
     android:layout_width="0px" 
     android:layout_height="wrap_content" 
     android:layout_weight=".33" /> 

    <ImageView 
     android:layout_width="0px" 
     android:layout_height="wrap_content" 
     android:layout_weight=".33" /> 

    <ImageView 
     android:layout_width="0px" 
     android:layout_height="wrap_content" 
     android:layout_weight=".33" /> 
</LinearLayout> 

さて、残念ながらそれはあなたのため、まだ十分ではありません:2行、各行のための3つの正方形の画像のグリッドが欲しいです。あなたが達成したいかもしれないもう一つのことは、あなたの画像にまだ正方形の比率を持たせることです。

public class SquaredImageView extends ImageView { 

public SquaredImageView(Context context, AttributeSet attrs) { 
    super(context, attrs); 
} 

@Override 
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec){ 
      int width = MeasureSpec.getSize(widthMeasureSpec); 
      int height = width; 
      setMeasuredDimension(width, height); 

} 

}

今単に右の密度で画像を提供し、あなたが

+0

あなたの答えをありがとうが、3.2インチと5.1インチの画面では別の画面の画像でも問題はありますが、mdpi画面ではアイコンがdrawable-mdpiから5に小さくなります。1 "と私はサイズを増やすと、非常に悪いと醜い(多くのピクセルが画面に表示されます) – whizzzkey

+0

あなたは別のdrawablesを使用することができます(ここでは異なるフォルダが本当に役立つところです)単純に大きなmdpiイメージをdrawables-swXXdp-mdpiという名前のXXを、dpの最小サイズで置き換えて使用する必要があります。 –

1

私はこのトピックも多くの問題だと思います。あなたが言ったように、あなたのアプリケーションでvalues-sw320dp-hdpivalues-sw320dp-xhdpivalues-sw320dp-xxhdpiなどを使用する必要があります。

私は最近、私が上で働いていたアプリケーションで同じことをやったと私はGalaxy S2values-sw320dp-hdpiを読んで、Galaxy S4values-sw320dp-xxhdpiを取り、Galaxy Notevalues-sw320dp-xhdpiを取ったことが分かりました。そう、はい、これらのことを宣言することは不可欠です。

希望する場合は、thisをクイックリードとして参照できます。そして、thisアプリケーションは、秘密を保持しているデバイスのほとんどを明らかにするので、本当に役に立ちます。

+0

あなたの答えに感謝しますが、たくさんの "クローンフォルダ"を作成するのを避ける方法はありますか? – whizzzkey

+0

@whizzzkey申し訳ありませんが、これはまだ私には分かりません。 –

+0

それはひどいです、それは何でも答えに+1を得ました。 – whizzzkey

1
  1. 最小幅修飾子はあなたの5.1" 画面が3.2以前よりもOSのバージョンを実行している場合、それが正しいレイアウトとは一致しません、唯一のAndroid 3.2以上で利用可能です。

  2. 両方の場合アンドロイドのバージョンは、 『真の』それのために最適化されていない> = 3.2、layout_sw600dpまたはlayout_sw720dpのレイアウトファイルです。あなたが提供するスクリーンショットからは、いくつかのUI要素のレイアウトのサイズが右に最適化されていません。

0

をしたいとすべてが/あなたの解像度でレイアウトフォルダを作成し、正確になります。それは単純に、このような画像表示が拡張達成するために それらの名前をlayout、layout-largeと命名します。今すぐ別の画面サイズで動作する必要があります

+0

私はすでにこのフォルダを作成しましたが、私にとっては役に立たないのは、レイアウトアイテムのサイズ-xxdpi-> dimens.xml) – whizzzkey

0

重み付けが不十分な場合は、コード内で動的に次元を設定することを検討してください。あなたは、このことにより、現在の画面の対角を得ることができます。

Display display = ((WindowManager) c.getSystemService(Context.WINDOW_SERVICE)).getDefaultDisplay(); 
    DisplayMetrics displayMetrics = new DisplayMetrics(); 
    display.getMetrics(displayMetrics); 
    screenRect = new Rect(0, 0, width, height); 
    screenDiagonal = Math.sqrt(width * width + height * height)/displayMetrics.densityDpi; 

次に、あなたが動的にビューのLayoutParamsを作成し、この値に応じてサイズを適用することができます。私はそれがちょっとハッキーだと知っているし、ウェイトを使ったアプローチはネイティブですが、これはあなたのために働くかもしれません。

+0

ありがとうございますが、あなたのソリューションは難しくて難しいと思います。私のダッシュボードのすべてのアクティビティにこのコードを追加する必要があります。余計で混乱します。 – whizzzkey

+0

問題はありません。ところで、あなたはそれを一度計算してシングルトンクラスに保存することができます。 – Dmide

1

まず最初に、画面のサイズはインチ単位ではありません。あなたはあなたの画面の密度を把握しなければなりません。私のSony Xperia Zの場合は240 + dpiです。その後、Androidで定義されたクローゼットバケットに一致させることができます。 240dpi - hdpi。

あなたの場合、バケットはmdpiです。 drawable-mdpiに1セットのドロアブルのみが両方のデバイスに適用されます。

あなたが見ているのは正しい動作です。たとえば、大きな画面に合わせて商品を並べ替えることができます。 (100dpではなく各アイコンに160dp; DisplayMetricsを使用して計算を行う必要があります)、より高解像度の画像を使用してこれらのフレームに合わせることができます(これらの画像はSAMEフォルダdrawable-mdpi

+1

ありがとうございます。アイコンは3.2 "mdpiで見栄えが良いですが、5.1" mdpiでは小さすぎます私はそれをサイズを増やそうとすると、見た目が非常に悪くて醜い(私はたくさんのピクセルを見た)。 – whizzzkey

+0

あなたがスクリーンショットから、そして3.2インチと5.1インチの巨大な差異からmdpiである場合、私は幅と高さが2つのデバイスで非常に異なっていると結論づけることができます。 1つは300dp、もう1つは500dpです。したがって、実際には幅と高さの精度計算を行う必要があります。 3.2インチデバイスで100dp、5.1インチで160dpの 'icon width = screen width/3'。可能な限り最高の解像度で画像を使用することを忘れないでください – ericn

+0

私は正しいことを理解しましたか教えてください - 多くのdrawable-dpiフォルダの代わりに、可能な限り高い解像度の画像で「drawabale」を使用する必要があります。 – whizzzkey

関連する問題