1

ランダムレシピ集アプリを作って遊んでいます。ここで問題に遭遇しました。現時点では、携帯電話の解像度を念頭に置いて設計しています。しかし、アプリがより大きな解像度のデバイスで使用されている場合はどうでしょうか。タブレット。

私が達成したいのは、解像度に応じてボタンを縮小することです。たとえば、スマートフォンを縦に持つと、2 列のボタンがあります。横持ちだとまだ2列ですが、視野が広がります。次に、できるだけ多くの空白を埋めるために 4 つの列が必要です。

私の考えを説明する2つの写真:

垂直 垂直

水平 横に 2 列追加

私のコード:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="#ffcc33"
android:orientation="vertical"
android:paddingTop="10dp"
android:paddingLeft="10dp"
android:paddingRight="10dp" >

<LinearLayout android:orientation="horizontal"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:weightSum="1000" >

    <EditText
        android:id="@+id/search_box"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="left"
        android:layout_weight="1000"
        android:ems="5"
        android:hint="@string/search_hint" />

    <Button
        android:id="@+id/search_button"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="right"
        android:text="@string/search_button" />

</LinearLayout>

<ScrollView android:layout_width="fill_parent"
    android:layout_height="wrap_content" >

<LinearLayout
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:gravity="center" >

    <RelativeLayout
        android:layout_width="225dp"
        android:layout_height="wrap_content"
        android:layout_below="@+id/search_box"
        android:layout_gravity="center"
        android:layout_marginTop="15dp" >

        <Button
            android:id="@+id/btn_lihatoidud"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:background="@android:color/transparent"
            android:drawableTop="@drawable/lihatoidud"
            android:layout_alignParentTop="true"
            android:text="Lihatoidud"
            android:textSize="18sp" />

        <Button
            android:id="@+id/btn_kypsetised"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_below="@+id/btn_lihatoidud"
            android:layout_marginTop="15dp"
            android:background="@android:color/transparent"
            android:drawableTop="@drawable/kypsetised"
            android:text="Küpsetised"
            android:textSize="18sp" />

        <Button
            android:id="@+id/btn_seenetoidud"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_below="@+id/btn_kypsetised"
            android:layout_marginTop="15dp"
            android:background="@android:color/transparent"
            android:drawableTop="@drawable/seenetoidud"
            android:text="Seenetoidud"
            android:textSize="18sp" />

        <Button
            android:id="@+id/btn_juustutoidud"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_below="@+id/btn_seenetoidud"
            android:layout_marginTop="15dp"
            android:background="@android:color/transparent"
            android:drawableTop="@drawable/juustutoidud"
            android:text="Juustutoidud"
            android:textSize="18sp" />

        <Button
            android:id="@+id/btn_lisandid"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_below="@+id/btn_juustutoidud"
            android:layout_marginTop="15dp"
            android:background="@android:color/transparent"
            android:drawableTop="@drawable/lisandid"
            android:text="Lisandid"
            android:textSize="18sp" />

        <Button
            android:id="@+id/btn_supid"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignParentRight="true"
            android:background="@android:color/transparent"
            android:drawableTop="@drawable/supid"
            android:text="Supid"
            android:textSize="18sp" />

        <Button
            android:id="@+id/btn_voileivad"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignParentRight="true"
            android:layout_below="@+id/btn_supid"
            android:layout_marginTop="15dp"
            android:background="@android:color/transparent"
            android:drawableTop="@drawable/voileivad"
            android:text="Võileivad"
            android:textSize="18sp" />

        <Button
            android:id="@+id/btn_pudrud"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignParentRight="true"
            android:layout_below="@+id/btn_voileivad"
            android:layout_marginTop="15dp"
            android:background="@android:color/transparent"
            android:drawableTop="@drawable/pudrud"
            android:text="Pudrud"
            android:textSize="18sp" />

        <Button
            android:id="@+id/btn_joogid"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignParentRight="true"
            android:layout_below="@+id/btn_pudrud"
            android:layout_marginTop="15dp"
            android:background="@android:color/transparent"
            android:drawableTop="@drawable/joogid"
            android:text="Joogid"
            android:textSize="18sp" />

    </RelativeLayout>
</LinearLayout>
</ScrollView>
</LinearLayout>
4

3 に答える 3

2

Android には、この種のことを処理するためのメカニズムがいくつかあります。ほとんどの人にとっては、デバイスのクラスごとに異なるレイアウトを使用するだけで十分です。すなわち:

res/
  layout/
    my_layout.xml
  layout-land/        # landscape
    my_layout.xml
  layout-sw600dp      # bigger devices
    my_layout.xml
  layout-sw600dp-land # Big and landscape

Android は、アプリが読み込まれるデバイスで適切なレイアウトを自動的に選択します。詳細については、開発者ガイドを参照してください。または、使用可能なサイズに基づいてグリッドのサイズを変更する独自のカスタム ビューを定義する必要がある場合があります。この例はCellLayout、Launcher のアプリのグリッド用に作成されたクラスです。

于 2013-07-01T22:28:02.683 に答える
1

画面サイズごとにxmlファイルを作成する必要があります

http://developer.android.com/guide/practices/screens_support.html

ハードコーディングされた文字列の代わりに参照を使用するように XML ファイルを設計します。次に、画面サイズに応じて異なる値を持つレイアウト、ボタンなどへの参照を割り当てることができます。(android:padding="@dimen/pagepadding"代わりに使用android:padding="16dp"して、次のように values/dimens.xml で dp を定義します: <dimen name="pagepadding">16dp</dimen>)

values-sw600dpこれを行うには、最小幅が 600dp のデバイス(Nexus 7 など) やvalues-sw720dp-land、最小幅が 720dp (10 インチのタブレット) のデバイスのように、プロジェクトに新しいフォルダーを作成する必要があります。

そのために、開発者ページとインターネットを読んでください。難しすぎない

于 2013-07-01T22:20:27.680 に答える