Androidの携帯電話のスクリーンは解決方法に適合します。
4623 ワード
0.はじめに
Androidのスクリーンは適しています。Androidのサイズが違っていても、解像度が異なる携帯電話に同じ表示効果があります。この問題はずっと私たちAndroidの開発者が直面している問題です。この文章は多くの前人のブログを参考にして、この問題をまとめて、簡潔明瞭にするように努めます。
転載は出典を明記してください。http://blog.csdn.net/seu_calvin/articale/detail/526904098
1.基礎概念
(1)画面サイズ、すなわち携帯電話の対角線の物理サイズ
1インチ=2.54 cm 携帯のサイズは5インチ、5.5インチ、6インチなどがあります。
(2)画面解像度、すなわち、携帯電話の横方向、縦方向の画素数の合計(一般的には画面として説明される「ワイドx高」)
例えば1080 dpx 1920 dp、つまり幅方向に1080ピクセルの点があり、高さ方向に1920ピクセルの点、1 px=1ピクセルの点があります。
Android携帯のよくある解像度:320 x 480、480 x 800、720 x 1280、1080 x 1920
(3)画面のピクセル密度、すなわち1インチあたりのピクセル数、単位dpi
例えば、ある装置は240 x 320で、スクリーンサイズは3.3インチで、この装置の画面の画素密度は400/3.3=120 dpiであり、400は幅の高い画素によって固定されている。
Android携帯はピクセル密度によって、以下のいくつかのスクリーン密度のタイプに分けられます。
(4)密度無関係ピクセル、単位はdpで、Android特有の単位です。
Android開発時は、px単位ではなくdpを使用して、画像サイズを設定します。これは、異なる画面のピクセル密度のデバイスに同じ効果を表示することを保証します。
フォントサイズの優先項目に応じてスケーリングができます。フォントサイズとしては12/14/18/22 spがオススメです。
上記の基礎概念を紹介しました。これからレイアウト適合、画像適応、コード適応の三つの角度からそれぞれスクリーン適応の解決策を紹介します。
2.配置が適切である
(1)相対レイアウトの使用を推奨し、絶対レイアウトを無効にします。スクリーンの大きさが相対レイアウトによって変わるため、ビュー間の相対位置は変わりません。
(2)dpとsp(なるべくpxを使わない)、wrap_を使用するcontent、match_parentとweightはレイアウトを制御します。重み付けweightを使用すると、どのデバイスにも完璧にフィットします。
(3)異なる画面サイズのデバイスに対して異なるレイアウトを設計し、プログラムを実行時に現在のデバイスのサイズに応じて自動的に適切なレイアウトリソースをロードするように規定子を配置する。
例えば、まず二つのレイアウトファイルを書きます。それぞれ:
携帯電話のレイアウトに合う(デフォルト):res/layout/main.xml
7インチタブレットのレイアウト:res/layout/main_pb.xml
次の2つのファイルを追加します。システムはAndroidバージョンに従って、どのレイアウトプロファイルを使用するかを自動的に選択します。
そうしないと、main_pb.xmlレイアウトファイルの内容は、res/layout-large/main.xmlとres/layout-sw 600 dp/main.xmlを2つにコピーして、3.2の前と後を適応させる必要があります。これは明らかに冗長です。
3.写真が似合う
(1)例えば、ボタンの背景画像はボタンの大きさによって変更できる必要がある。通常の画像を使用すると、上記の機能は実行時には均一に引張りまたは圧縮されます。
この場合はNine-Patch図(特殊に処理されたPNG画像を使用します。9 png拡張子)を使用して、9 Patch図は画像の引張り領域と非引張り領域を指定できます。引張り画像が必要な場合は、自動的に引張りたい部分をシステムが引き伸ばします。9図は複数の解像度の画像を必要とせず、drawableフォルダに置いても良いです。
赤い枠の領域:縦に伸ばす領域、つまり、画像を縦に伸ばす必要がある場合は、赤い領域だけを指定します。
緑の枠の領域:横に伸ばす領域、つまり横に伸ばす必要があるときは緑の領域だけを指定します。
(2)写真は、下図のhdpi、mdpiなどのディレクトリに対応する解像度の画像を入れる必要がないので、APKを大きくします。一般的には1280*720のセットの図を作って、hdpiまたはxhdpiの下に置いて、問題があればまた画面に対して問題の写真を交換すればいいです。また、APKサイズをいかに小さくするかについては、Android開発を参照することができる。
3.コード適応
(1)例えば需要があります。スペースの幅を実現する必要があります。スクリーンの3分の1です。この時にコードで実現できます。
(2)コード適応の別の使用シーンは、ロードレイアウトによって異なる流れを決定する。
Androidのスクリーンは適しています。Androidのサイズが違っていても、解像度が異なる携帯電話に同じ表示効果があります。この問題はずっと私たちAndroidの開発者が直面している問題です。この文章は多くの前人のブログを参考にして、この問題をまとめて、簡潔明瞭にするように努めます。
転載は出典を明記してください。http://blog.csdn.net/seu_calvin/articale/detail/526904098
1.基礎概念
(1)画面サイズ、すなわち携帯電話の対角線の物理サイズ
1インチ=2.54 cm 携帯のサイズは5インチ、5.5インチ、6インチなどがあります。
(2)画面解像度、すなわち、携帯電話の横方向、縦方向の画素数の合計(一般的には画面として説明される「ワイドx高」)
例えば1080 dpx 1920 dp、つまり幅方向に1080ピクセルの点があり、高さ方向に1920ピクセルの点、1 px=1ピクセルの点があります。
Android携帯のよくある解像度:320 x 480、480 x 800、720 x 1280、1080 x 1920
(3)画面のピクセル密度、すなわち1インチあたりのピクセル数、単位dpi
例えば、ある装置は240 x 320で、スクリーンサイズは3.3インチで、この装置の画面の画素密度は400/3.3=120 dpiであり、400は幅の高い画素によって固定されている。
Android携帯はピクセル密度によって、以下のいくつかのスクリーン密度のタイプに分けられます。
(4)密度無関係ピクセル、単位はdpで、Android特有の単位です。
Android開発時は、px単位ではなくdpを使用して、画像サイズを設定します。これは、異なる画面のピクセル密度のデバイスに同じ効果を表示することを保証します。
/**
* dp px
* Created by SEU_Calvin on 2016/09/28
*/
public class DensityUtils {
public static int dp2px(float dp , Context context){
float density = context.getResources().getDisplayMetrics().density;// 0.75/1/1.5/2/3
//context.getResources().getDisplayMetrics().densityDpi // 120/160/240/320/480
return (int)(dp * density + 0.5f);
}
public static float px2dp(int px , Context context){
float density = context.getResources().getDisplayMetrics().density;
return px/density;
}
}
(5)独立比例ピクセル、単位はsp、Android開発時は文字サイズを設定する単位フォントサイズの優先項目に応じてスケーリングができます。フォントサイズとしては12/14/18/22 spがオススメです。
上記の基礎概念を紹介しました。これからレイアウト適合、画像適応、コード適応の三つの角度からそれぞれスクリーン適応の解決策を紹介します。
2.配置が適切である
(1)相対レイアウトの使用を推奨し、絶対レイアウトを無効にします。スクリーンの大きさが相対レイアウトによって変わるため、ビュー間の相対位置は変わりません。
(2)dpとsp(なるべくpxを使わない)、wrap_を使用するcontent、match_parentとweightはレイアウトを制御します。重み付けweightを使用すると、どのデバイスにも完璧にフィットします。
(3)異なる画面サイズのデバイスに対して異なるレイアウトを設計し、プログラムを実行時に現在のデバイスのサイズに応じて自動的に適切なレイアウトリソースをロードするように規定子を配置する。
例えば、まず二つのレイアウトファイルを書きます。それぞれ:
携帯電話のレイアウトに合う(デフォルト):res/layout/main.xml
7インチタブレットのレイアウト:res/layout/main_pb.xml
次の2つのファイルを追加します。システムはAndroidバージョンに従って、どのレイアウトプロファイルを使用するかを自動的に選択します。
// Android 3.2
res/values-large/layout.xml
<resources>
<item name="main" type="layout">@layout/main_pb</item>
</resources>
// Android 3.2
res/values-sw600dp/layout.xml
<resources>
<item name="main" type="layout">@layout/main_pb</item>
</resources>
上記の二つの構成ファイルは、レイアウトを本当に定義していません。それらはメールを@layout/main_に設定しただけです。pbの別名そうしないと、main_pb.xmlレイアウトファイルの内容は、res/layout-large/main.xmlとres/layout-sw 600 dp/main.xmlを2つにコピーして、3.2の前と後を適応させる必要があります。これは明らかに冗長です。
3.写真が似合う
(1)例えば、ボタンの背景画像はボタンの大きさによって変更できる必要がある。通常の画像を使用すると、上記の機能は実行時には均一に引張りまたは圧縮されます。
この場合はNine-Patch図(特殊に処理されたPNG画像を使用します。9 png拡張子)を使用して、9 Patch図は画像の引張り領域と非引張り領域を指定できます。引張り画像が必要な場合は、自動的に引張りたい部分をシステムが引き伸ばします。9図は複数の解像度の画像を必要とせず、drawableフォルダに置いても良いです。
赤い枠の領域:縦に伸ばす領域、つまり、画像を縦に伸ばす必要がある場合は、赤い領域だけを指定します。
緑の枠の領域:横に伸ばす領域、つまり横に伸ばす必要があるときは緑の領域だけを指定します。
(2)写真は、下図のhdpi、mdpiなどのディレクトリに対応する解像度の画像を入れる必要がないので、APKを大きくします。一般的には1280*720のセットの図を作って、hdpiまたはxhdpiの下に置いて、問題があればまた画面に対して問題の写真を交換すればいいです。また、APKサイズをいかに小さくするかについては、Android開発を参照することができる。
3.コード適応
(1)例えば需要があります。スペースの幅を実現する必要があります。スクリーンの3分の1です。この時にコードで実現できます。
/**
*
* Created by SEU_Calvin on 2016/09/28
*/
WindowManager wm = getWindowManager();
int width = wm.getDefaultDisplay().getWidth();
LinearLayout.LayoutParams params = (LayoutParams)tv.getLayoutParams();
params.width = width/3;
tv.setLayoutParams(params);
コード内のパラメータは一般的にpx値が必要であり、異なるデバイスのスクリーン密度によってdp 2 pxを実現する必要があるので、一般的なコード適応はツールクラス(上述したように貼り付けられている)を書く必要があることに注意してください。(2)コード適応の別の使用シーンは、ロードレイアウトによって異なる流れを決定する。
setContentView(R.layout.main_layout);//
Button btn = (Button)findViewById(R.id.btn);//
if(btn == null){
// 1...
}else{
// 2...
}
読んでくれてありがとうございます。みなさんのご協力をお願いします。ありがとうございます。