5

理由はわかりませんが、Api 11 以降のデバイスではレイアウトが適切に表示されますが、古いものには適していません。

これはxmlです:

    <LinearLayout
        android:id="@+id/workers_linearlayout"
        android:layout_width="50dp"
        android:layout_height="70dp"
        android:layout_weight="1" >

        <RelativeLayout
            android:id="@+id/workers_relative_layout"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:gravity="center" >

            <ImageView
                android:id="@+id/imageView1"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_centerInParent="true"
                android:src="@drawable/workers_small" />

            <ImageView
                android:id="@+id/imageView3"
                android:layout_width="wrap_content"
                android:layout_height="match_parent"
                android:layout_centerInParent="true"
                android:scaleX="0.5"
                android:scaleY="0.5"
                android:src="@drawable/ic_cerchio_rosso"
                android:translationX="25dp"
                android:translationY="-20dp" />

            <TextView
                android:id="@+id/workers_number"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_centerInParent="true"
                android:text="9"
                android:textAppearance="?android:attr/textAppearanceMedium"
                android:translationX="25dp"
                android:translationY="-20dp" />
        </RelativeLayout>
    </LinearLayout>

これは API 11+ での結果です。

API11+

これは API 10-:

API 10-

レイアウトで遊んで修正しようとしましたが、かなり良い結果が得られましたが、最初の結果は決して好きではありませんでした。

誰かが私を助けることができますか?

編集:

デバイス上の写真:

ここに画像の説明を入力

EDIT2

三角形の警告は次のとおりです。

  • 文字列「9」は文字列リソースを使用する必要があります
  • ImageView1 および 3: コンテンツの説明属性がありません
  • RelativeLayout またはその親はおそらく役に立たない
  • ネストされた重みはパフォーマンスに悪い

ちなみに、私の問題を解決するこれらの修正されたものは何もないと思います

4

2 に答える 2

2

Ok。それを私が直した。レイアウトをいじり、「親の中心」機能に関する NikkyD の提案に従って、次のポリシーに従いました。

古い Api では (おそらく) 認識されないため、スケールと変換のプロパティを使用することはできません。そこで、IV3 の固定の高さと幅 (30dpx30dp) を設定して、移動とスケーリングのオプションを削除し、画像をスケーリングしました。これで寸法は正しくなりましたが、IV3 と TextView に対して「親を上に揃える」と「親を右に揃える」を呼び出すと、それらの位置は良好ですが、TextView は IV3 の中央に配置されません。まさにこのように:

番号の位置が間違っている

それを修正するために、「workersRelativeLayout」内に新しい相対レイアウトを追加し、その中に IV3 と TextView を配置して、それぞれ「親の中心」を TRUE に設定しました。次に、新しい相対レイアウト「親を上に揃える」と「親を右に揃える」を設定します。これが最終結果です。

右番号位置

これは新しい xml レイアウトです。

            <LinearLayout
                android:id="@+id/workers_linearlayout"
                android:layout_width="50dp"
                android:layout_height="70dp"
                android:layout_weight="1" >

                <RelativeLayout
                    android:id="@+id/workers_relative_layout"
                    android:layout_width="match_parent"
                    android:layout_height="match_parent"
                    android:gravity="center" >

                    <ImageView
                        android:id="@+id/imageView1"
                        android:layout_width="wrap_content"
                        android:layout_height="wrap_content"
                        android:layout_centerInParent="true"
                        android:src="@drawable/workers_small" />

                    <RelativeLayout
                        android:layout_width="wrap_content"
                        android:layout_height="wrap_content"
                        android:layout_alignParentRight="true"
                        android:layout_alignParentTop="true" >

                        <ImageView
                            android:id="@+id/imageView3"
                            android:layout_width="30dp"
                            android:layout_height="30dp"
                            android:layout_centerInParent="true"
                            android:src="@drawable/ic_cerchio_rosso" />


                        <TextView
                            android:id="@+id/workers_number"
                            android:layout_width="wrap_content"
                            android:layout_height="wrap_content"
                            android:layout_centerInParent="true"
                            android:text="9"
                            android:textAppearance="?android:attr/textAppearanceMedium" />

                    </RelativeLayout>
                </RelativeLayout>
            </LinearLayout>

これが誰かを助けることを願っています:)

編集

親の幅のサイズに注意してください。重みの親を 1 に設定すると、当然サイズは表示サイズに応じて動的になります。画像は常に中央の親に配置され、IV3 と TextView の相対的なレイアウトは常に top|right になります。したがって、親の幅のサイズが大きくなると、画像の中心と新しい相対的なレイアウトの間の距離も大きくなり、次のようになる可能性があります。

ここに画像の説明を入力

于 2012-10-27T14:48:16.307 に答える
0

最初のLinearLayoutには重みがあります。ウェイトがある場合は、1つのディメンションを0dpに設定する必要があります。これは、ウェイトによってスケーリングされるディメンションになります。

相対レイアウトの3つの要素はすべて、「centeredinparent」が真です。親はRelLayoutです。

IV3の高さはmatch_parentであるため、rel-layoutの高さまで引き伸ばされます。これがスケール0.5のオプションを上書きすると確信しています。

よくわかりませんが、rel-layoutcenteredinparentが変換もオーバーライドすると推測します。

レイアウトはオプションで非常に醜いです。一部は他より優れていると見なされ、効果がありません。私は相対的なレイアウトでかなりの時間を遊んでみましたが、私の場合は「下」にしか配置できず、何らかの理由で上記の配置が機能しないため(日食のプレビューでも)「上」には配置できないことがわかりました!!)しかし、xmlにはまったく問題はありませんでした。

したがって、いくつかのオプションを推測すると、他のオプションが無効になります。これは、より制限的な(または、より壊れた、まだandroid;))可能性があるため、より新しいAPIに影響を与えるようになります。

于 2012-10-27T11:11:28.743 に答える