私はAndroid version2.2でプログラムを開発しています。複数の画面サイズのサポートに関する多くのドキュメントを読みましたが、それでも混乱しています。大画面と通常画面をサポートするレイアウトファイルを小さな画面で試してみると、画面に合わせてレイアウトが調整されているわけではないので、マニフェストでもこのコードを使用しました。
<supports-screens
Android:resizeable="true"
Android:smallScreens="true"
Android:normalScreens="true"
Android:largeScreens="true"
Android:anyDensity="true"
/>
小さな画面の画像は here。 小さな画面と互換性のある画面を設定するにはどうすればよいですか? 「layout-small」フォルダを使用して見つけた場所がありますが、これを使用すると、プロジェクトのサイズが大きくなります。それは望ましくありません。だから、これを行う最善の方法を提案できますか?
以下のリンクをご覧ください。これらはあなたを助けるかもしれません:
私の知る限り、すべての画面をサポートする唯一の方法は、そのフォルダーの分岐を行うことです。すべてのXMLファイルは数キロバイトになります。そのため、サイズはそれほど大きな問題ではありません。
すべての画面に対応し、すべてのレイアウトをサポートします。
アイコン:
mdpi hdpi xhdpi xxhdpi xxxhdpi
Launcher Icons (App Icons) 48 x 48 72 x 72 96 x 96 144 x 144 192 x 192
Action Bar,Toolbar,Tab Icons 24 x 24 36 x 36 48 x 48 72 x 72 96 x 96
Notification Icons 24 x 24 36 x 36 48 x 48 72 x 72 96 x 96
背景画像の解像度:
ldpi: Portrait: 240 X 320px. Landscape: 320 X 240px.
mdpi: Portrait: 320 X 480px. Landscape: 480 X 320px.
hdpi: Portrait: 480 X 800px. Landscape: 800 X 480px.
xhdpi: Portrait: 640 X 960px. Landscape: 960 X 640px.
xxhdpi: Portrait: 960 X 1600px. Landscape: 1600 X 960px.
xxxhdpi: Portrait: 1280 X 1920px. Landscape: 1920 X 1280px.
Drawable Folder:
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).
ldpi (low) ~120dpi
mdpi (medium) ~160dpi
hdpi (high) ~240dpi
xhdpi (extra-high) ~320dpi
xxhdpi (extra-extra-high) ~480dpi
xxxhdpi (extra-extra-extra-high) ~640dpi
レイアウト:
Portrait:
res/layout/main_activity.xml # For handsets (smaller than 600dp available width)
res/layout-large/main_activity.xml # For small tablets (640dp x 480dp and bigger)
res/layout-xlarge/main_activity.xml # For large tablets (960dp x 720dp and bigger)
res/layout-w600dp/main_activity.xml # For 7” tablets or any screen with 600dp
# available width (possibly landscape handsets)
Landscape:
res/layout-land/main_activity.xml # For handsets in landscape
res/layout-sw600dp-land/main_activity.xml # For 7” tablets in landscape
参照リンク:
https://developer.Android.com/guide/practices/screens_support.html
https://design.google.com/devices/
すべての画面解像度のリストはありますAndroidベースの携帯電話とタブレット?
http://www.emirweb.com/ScreenDeviceStatistics.php
Android携帯電話 で最も人気のある画面サイズ/解像度
はい、私はcureをあなたの問題に持っています、あなたは正しいです、すべての画面解像度のレイアウトを作成するのは時間がかかり、プロジェクトのサイズが大きくなると個人的に思います。
すべての画面解像度に適合するレイアウトを作成するために、私は独自の手法を実装しました-パーセンテージでwidthおよびheightを設定します
問題は、Views/Layouts
に一定の定数widthまたはheightを設定すると、100dp
と言えます。
解決策は、ビューが空のスペースを埋めるようにmatch_parent
を使用するか、weight
を使用して他のView
に関連するすべてのViews
を定義するのは非常に簡単ですほぼすべての画面解像度で見栄えがよく、実行時に一定の定数を持つViews/Layouts
のみのLayoutParams
を設定するレイアウト幅または高さに関してパーセント。
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:Android="http://schemas.Android.com/apk/res/Android"
Android:layout_width="match_parent"
Android:layout_height="match_parent" >
<LinearLayout
Android:id="@+id/mLayout"
Android:layout_width="280px"
Android:layout_height="300px" />
</RelativeLayout>
注意:使用済みpx固定サイズのレイアウトwidth/heightLayoutParams layoutParams = new LayoutParams(int width, int height);
ではwidth
およびheight
値をpixelsとして取ります
ここにコード例があります
final ViewTreeObserver mLayoutObserver = mLayout.getViewTreeObserver();
mLayoutObserver.addOnGlobalLayoutListener(new OnGlobalLayoutListener()
{
@Override
public void onGlobalLayout()
{
DisplayMetrics metrics = getResources().getDisplayMetrics();
int deviceWidth = metrics.widthPixels;
int deviceHeight = metrics.heightPixels;
float widthInPercentage = ( (float) 280 / 320 ) * 100; // 280 is the width of my LinearLayout and 320 is device screen width as i know my current device resolution are 320 x 480 so i'm calculating how much space (in percentage my layout is covering so that it should cover same area (in percentage) on any other device having different resolution
float heightInPercentage = ( (float) 300 / 480 ) * 100; // same procedure 300 is the height of the LinearLayout and i'm converting it into percentage
int mLayoutWidth = (int) ( (widthInPercentage * deviceWidth) / 100 );
int mLayoutHeight = (int) ( (heightInPercentage * deviceHeight) / 100 );
LayoutParams layoutParams = new LayoutParams(mLayoutWidth, mLayoutHeight);
mLayout.setLayoutParams(layoutParams);
}
});
誰かがすぐに尋ねることができる助けがまだ必要な場合、コードはほとんど自明です
結論:何らかの定数を設定する必要がある場合幅/高さViews/Layouts
に対して常に値を設定しますpxレイアウトファイル(つまりxml)プログラムでLayoutParams
を設定します。
提案:思うGoogle Android Guysはdp/dip
ユニットをpercentage
に置き換えることを真剣に考えるべきです。
さまざまな画面サイズをサポートするのがより簡単になりました!新しいサイズの単位[〜#〜] sdp [〜#〜]を使用します。
[〜#〜] sdp [〜#〜]-スケーラブルなサイズの単位
新しいサイズの単位を提供するAndroid SDK-sdp(スケーラブルdp)。このサイズ単位は、画面サイズに合わせて調整されます。 Android開発者が複数の画面をサポートするのに役立ちます。
テキストビューについては、テキストのspサイズの単位に基づく ssp を参照してください。
スケーラブルDP(sdp)は、使用に最適なソリューションです。画面サイズに応じてウィジェットのサイズを変更します。さまざまなテキストサイズのテキストにこれを適用することもできます。
プロジェクトにsdpを追加するには(Android Studio and Gradleを使用):
build.gradle依存関係ブロックに実装 'com.intuit.sdp:sdp-Android:1.0.5'を追加します。
for example:
dependencies {'com.intuit.sdp:sdp-Android:1.0.5' }
これを試して
<Android.support.constraint.ConstraintLayout xmlns:Android="http://schemas.Android.com/apk/res/Android"
xmlns:app="http://schemas.Android.com/apk/res-auto"
xmlns:tools="http://schemas.Android.com/tools"
Android:layout_width="match_parent"
Android:layout_height="match_parent">
<ImageView
Android:layout_width="0dp"
Android:layout_height="0dp"
app:layout_constraintDimensionRatio="1:1"
Android:scaleType="fitXY"
Android:adjustViewBounds="true"
Android:src="@drawable/myimage"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintStart_toStartOf="parent"/>