編集された質問:
モバイル解像度:
次の解像度のような異なる画面dpiを設計したいと思います。
320x480、
480×800、
540x960、
720x1280(Samsung S3)、
1080x1920(S4、Nexus5、Nexus 5x、Moto G4)、
2560 x 1440(Nexus 6、Nexus 6p、Samsung Edge)
タブレットの解像度:
480x800(マイクロマックス)、
600x1024(samsung tab2)、
800x1280(nexus 7)、
1200x1920(新しいネクサス7)、
2048x1536(nexus 9)
異なるフォントサイズデバイスのディスプレイ解像度に応じて使用します。
Q1)このbest
を解決するproblem
の方法は何ですか?
Q2)スローコーディングまたはXMLを行う最適なオプションは何ですか
Q3)どのドローアブルフォルダがどのデバイス解像度を表しますか?
Q4)異なる解像度のApplication Launcherアイコンのサイズは?
さまざまな解像度のアプリランチャーアイコンのサイズ(ピクセル)
モバイル解像度
タブレット固有のレイアウトを使用する場合は、次のフォルダーを使用します。
layout-large-mdpi (1024x600)
layout-large-tvdpi (800x1280)
layout-large-xhdpi (1200x1920)
layout-xlarge-mdpi (1280x800)
layout-xlarge-xhdpi (2560x1600)
モバイル
res/drawable (default)
res/drawable-ldpi/ (240x320 and nearer resolution)
res/drawable-mdpi/ (320x480 and nearer resolution)
res/drawable-hdpi/ (480x800, 540x960 and nearer resolution)
res/drawable-xhdpi/ (720x1280 - Samsung S3, Micromax Canvas HD etc)
res/drawable-xxhdpi/ (1080x1920 - Samsung S4, HTC one, Nexus 5, etc)
res/drawable-xxxhdpi/ (1440X2560 - Nexus 6,Samsung S6Edge).
タブレットの解像度:
注:
textsize=12sp
などのtextSize
を扱うときは、常にSPを使用するようにしてください。
定義済みのtextAppearance
を使用します。
デバイスの密度に応じてテキストサイズが自動的に設定されます。
<TextView Android:textAppearance="?android:attr/textAppearanceSmall"/>
<TextView Android:textAppearance="?android:attr/textAppearanceMedium"/>
<TextView Android:textAppearance="?android:attr/textAppearanceLarge" />
サンプル使用法:
<TextView
style="@Android:style/TextAppearance.Small"
Android:text="Sample Text - Small" />
<TextView
style="@Android:style/TextAppearance.Medium"
Android:text="Sample Text - Medium" />
<TextView
style="@Android:style/TextAppearance.Large"
Android:text="Sample Text - Large" />
各デバイスにdimension.xml
を使用します。
Google IO Pdfから、以下の構造が表示されます。
モバイル:
res/values/dimens.xml(default)
res/values-ldpi/dimens.xml (240x320 and nearer resolution)
res/values-mdpi/dimens.xml (320x480 and nearer resolution)
res/values-hdpi/dimens.xml (480x800, 540x960 and nearer resolution)
res/values-xhdpi/dimens.xml (720x1280 - Samsung S3, Micromax Canvas HD, etc)
res/values-xxhdpi/dimens.xml (1080x1920 - Samsung S4, HTC one, etc)
res/values-xxxhdpi/dimens.xml(1440X2560-Nexus 6、Samsung S6Edge)。
タブレット:
タブレットでは、values-xlarge
、values-large
などのより具体的なフォルダーを使用できます。
res/values-large/dimens.xml (480x800)
res/values-large-mdpi/dimens.xml (600x1024)
または
res/values-sw600dp/dimens.xml (600x1024)
res/values-sw720dp/dimens.xml (800x1280)
res/values-xlarge-xhdpi/dimens.xml (2560x1600 - Nexus 10")
res/values-large-xhdpi/dimens.xml (1200x1920 - Nexus 7"(latest))
詳細情報:
複数画面のサポート を参照してください。
デザインについては、Google IO Pdfのページ番号77を参照してください デバイス密度 。その中で、さまざまなデバイスの
dimens.xml
を処理する方法を見つけるでしょう。- アプリを準備する Nexus 6およびNexus 9 。
密度に依存しないピクセルは、160 dpi画面上の1つの物理ピクセルに相当します。これは、 "medium"密度に対してシステムが想定するベースライン密度です。画面。実行時に、システムは、使用中の画面の実際の密度に基づいて、必要に応じてdpユニットのスケーリングを透過的に処理します。 dp単位から画面ピクセルへの変換は簡単です:
px = dp * (dpi / 160)
。たとえば、240 dpiの画面では、1 dpは1.5物理ピクセルに相当します。アプリケーションのUIを定義するときは、dpユニットを常に使用して、さまざまな密度の画面でUIが適切に表示されるようにする必要があります。
最初に、さまざまな画面にさまざまな値のフォルダーを作成し、画面に応じたサイズをres->values->dimens.xml
ファイルに配置し、"@dimen/text_size"
を使用して単純なフォントサイズを呼び出します。
res/values/dimens.xml
res/values-small/dimens.xml
res/values-normal/dimens.xml
res/values-xlarge/dimens.xml
//for small
<?xml version="1.0" encoding="utf-8"?>
<resources>
<dimen name="text_size">15sp</dimen>
</resources>
//for normal
<?xml version="1.0" encoding="utf-8"?>
<resources>
<dimen name="text_size">20sp</dimen>
</resources>
//for large
<?xml version="1.0" encoding="utf-8"?>
<resources>
<dimen name="text_size">30sp</dimen>
</resources>
//for xlarge
<?xml version="1.0" encoding="utf-8"?>
<resources>
<dimen name="text_size">40sp</dimen>
</resources>
次に示すように、TextView
のフォントサイズを取得します。
<TextView
Android:id="@+id/lblHeader"
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
Android:textSize="@dimen/text_size"
Android:textStyle="bold"
Android:typeface="serif" />
基本的に、次のようなテキストスタイルを作成する必要があります。
<style name="CodeFont">
<item name="Android:textSize">30sp</item>
</style>
詳細はこちらをご覧ください http://developer.Android.com/guide/topics/ui/themes.html
Androidさまざまな画面のサポートガイドを使用して、適切な解像度のフォルダーにさまざまな画面に必要なさまざまなサイズを作成します: http://developer.Android.com/guide/ practice/screens_support.html
補足:フォントサイズにSP単位を使用すると、さまざまな携帯電話でフォントが多少同じサイズに見えるようにスケーリングされます。
さまざまな画面解像度とさまざまな密度の問題を回避するために、画面の幅と高さのパーセンテージに基づいてすべてのサイズと位置を決めます。画面の幅または高さのパーセンテージに基づいてテキストのサイズが変更された場合、フォントはすべてのデバイスおよびすべての解像度で正しいサイズになります。スペースの幅と高さに基づいて正しいフォントサイズを取得するには、次の関数を使用します。
private float SetTextSize(String text, int width, int height)
{
Paint paint = new Paint();
float textWidth = Paint.measureText(text);
float textSize = (int) ((width / textWidth) * Paint.getTextSize());
Paint.setTextSize(textSize);
textWidth = Paint.measureText(text);
textSize = (int) ((width / textWidth) * Paint.getTextSize());
// Re-measure with font size near our desired result
Paint.setTextSize(textSize);
// Check height constraints
FontMetricsInt metrics = Paint.getFontMetricsInt();
float textHeight = metrics.descent - metrics.ascent;
if (textHeight > height)
{
textSize = (int) (textSize * (height / textHeight));
Paint.setTextSize(textSize);
}
return textSize;
}
画面の幅と高さを取得するコードは次のとおりです。
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB_MR2)
{
Point size = new Point();
getWindowManager().getDefaultDisplay().getSize(size);
screenWidth = size.x;
screenHeight = size.y;
}
else
{
Display display = getWindowManager().getDefaultDisplay();
screenWidth = display.getWidth();
screenHeight = display.getHeight();
}
必要なフォントサイズを取得するには、画面の幅と画面の高さに基づいて領域を作成し、フォントサイズが適切になるまで調整します。正しく見えるようになったら、すべてのデバイスで正しく見えるはずです。
float textSize = SetTextSize("text", (int) (screenWidth * 0.1), (int) (screenHeight * 0.15));
これがあなたのお役に立てば幸いです
まず、1つの解像度のアプリケーション設計を行います。
例:モバイル解像度380 * 480を想定
mobile screen width:380
textView size is 80dp
Assume : if width is 380dp then 100 % then
textview width 80dp then how many %(per).
ower answer is: 25 %
belove式を使用してプログラムで画面サイズを見つける
DisplayMetric displaymetrics = new DisplayMetrics();
getWindowManager().getDefaultDisplay().getMetrics(displaymetrics);
ScreenHeight = displaymetrics.heightPixels;
ScreenWidth = displaymetrics.widthPixels;
txt_height = (int)((ScreenHeight*14.58)/100);
txt_width = (int)((ScreenWidth*37.5)/100);
LinearLayout.LayoutParams normal_param = new LinearLayout.LayoutParams(txt_height ,txt_width );
txt_Name.setLayoutParams(normal_param);
これは良い答えだと思います:
しかし、ここではどのように画面解像度でそれを行うことができます:
次のような解決策ごとに「値」リソースディレクトリを作成できます。
values-wWIDTHp-hHEIGHTdp (you can also use values-wWIDTHp or values-hHEIGHTdp)
for example: 320*480 will be values-w320p-h480dp
各ディレクトリ(デフォルト値dirを含む)に、次の内容を持つ「dimens.xml」という名前のファイルを作成します。
for exmaple (the value related to the resolution):
<dimen name="def_font_size">10sp</dimen>
これで、「@ dimen/def_font_size」を使用するか、デフォルト値ディレクトリにスタイルを作成できます。
これを「styles.xml」に追加します。
<style name="FontSize">
<item name="Android:textSize">@dimen/def_font_size</item>
</style>
Nexus 6デバイスをサポートするには、drawable-560dpiフォルダーを作成し、すべての画像をそのフォルダーに入れます。
Dpのサイズを画面サイズに応じたサイズに変換する関数を作成しましたが、うまく機能しています。画面に応じてテキストサイズに問題がある場合は、試してみてください。
public float convertFromDp(int input) {
final float scale = getResources().getDisplayMetrics().density;
return ((input - 0.5f) / scale);
}
以下のように、プログラムでテキストビューサイズに指定された値を単純に指定します
tvTextView1.setTextSize(convertFromDp(24));