0

さまざまなボタンとテキストビューを備えたAndroidアプリがあります。ボタン、テキストビュー、およびエディットテキストフィールドは、dpの測定を使用して画面上で間隔を空けて配置されます。したがって、たとえば、ボタンには次のようになります。'左からのマージン10dp'

問題は高密度電話の場合です。高密度画面用の新しいレイアウトを作成し、layout-largeまたはlayout-sw600-sw720のいずれかに名前を付けました(問題はGalaxy s3にあるため)。

ただし、電話は引き続き、密度画面480x800に適した通常のレイアウトファイルを呼び出します。

s3がmormalレイアウトファイルを呼び出すことを読みました。したがって、通常のファイルのxmlを高密度のxmlに変更した場合、低密度のレイアウトxmlをどのように処理すればよいですか?どのファイル名を呼び出す必要がありますか?電話はこのファイルまたは通常のファイルを再度呼び出しますか?

XMLレイアウトの抽出:

<?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"
android:background="@drawable/duroodscreen"
android:paddingLeft="5dp"
android:paddingRight="5dp"
android:paddingTop="5dp" >

<Button
android:id="@+id/dmute"
android:layout_width="48dp"
android:layout_height="33dp"
android:layout_alignParentLeft="true"
android:background="@drawable/soundon" />

<Button
android:id="@+id/dreset"
style="?android:attr/buttonStyleSmall"
android:layout_width="48dp"
android:layout_height="33dp" 
android:layout_alignParentRight="true"
android:background="@drawable/customresetbutton" />

<TextView
android:id="@+id/dcount"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:layout_below="@+id/dmute"
android:layout_marginLeft="25dp"
android:layout_marginTop="36dp"
android:gravity="center"
android:singleLine="true"
android:text="Numbers"
android:textSize="25sp" />

マニフェストでの参照:

<supports-screens 
android:resizeable="true"
android:smallScreens="true" 
android:normalScreens="true" 
android:largeScreens="true"
android:anyDensity="true" />
4

4 に答える 4

1

画面サイズと密度を混同しないでください。スマートフォンの画面サイズは通常サイズです。だからあなたが見るものはOKです。sw600また、修飾子は、ピクセルではなく 600 dp の幅を参照することに注意してください。

別の密度にリソースを提供するには、密度修飾子 (mdpi、hdpi、...) を使用します。

于 2013-01-12T17:39:00.693 に答える
1

layout-normalは、密度ではなく、画面のサイズを示します

ファイルを作成する必要がlayout-normal-mdpiありlayout-normal-hdpiます

layout-normal-xhdpiギャラクシーs3に使用

于 2013-01-12T17:39:25.967 に答える
1

この場合、せっかくなので、一メーカーの間違いを正すために全てを書き直すよりも、Galaxy S3専用のレイアウトを作った方がいいのではないでしょうか。

したがって、次のようになります。

電話のモデルを取得する

if "galaxy S3" 
   layout with "my_layout_galaxy_s3"
else -> layout with 
   layout with "my_layout"
于 2013-01-12T17:32:42.437 に答える
0

なぜどこでもこれほど多くのピクセル値を使用しているのですか?ピクセル値は、要素間に数ピクセルをパディングするなどの小さなものにのみ使用する必要があります。その理由は、そもそもこのような問題を回避するためです。

たとえば、なぜボタンの幅と高さを指定するのですか?まず、テキストがないので、ImageButtonを使用してみませんか?次に、画像を必要なサイズにして、wrap_contentを使用します。テキストフィールドと同じです。Androidレイアウトのアイデアは、実際にはすべてのピクセル計算を行わず、代わりにすべてを相対的に実行することです。これにより、デバイスはハードウェアに基づいて、どのように最適に見えるかを独自に決定できます。

本当にシステムと戦いたいのであれば、それをずっとやりたいと思うでしょう。AbsoluteLayoutを使用して、すべてに正確なピクセル座標を指定してください。それ以外の場合は、Androidがどのように動作するかを受け入れるか、苦痛の世界に備えてください。

于 2013-01-12T17:44:09.350 に答える