Как сделать независимость плотности приложений Android?

Я занимаюсь разработкой фоторедактора в Android Studio. У меня есть изображения и значки на моем экране, которые не подходят для других экранов (разных размеров). Я включил следующий код экрана поддержки в мой файл manifest.xml

<supports-screens

    android:anyDensity="true"

    android:largeScreens="true"

    android:normalScreens="true"

    android:resizeable="true"

    android:smallScreens="true"

    android:xlargeScreens="true" />

Я узнал, что независимость от плотности - это способ избавиться от этого. Я не знаю, как поступить дальше. Пожалуйста, помогите мне, как сделать независимость плотности моего приложения? activity_main.xml

android:layout_width="match_parent" android:layout_height="match_parent"

android:orientation="vertical"

android:gravity="center_vertical|center"

android:background="#403E3E">

<LinearLayout

    android:layout_marginTop="30px"

    android:layout_width="fill_parent"

    android:layout_height="wrap_content"

    android:orientation="vertical"

    android:gravity="center">


    <SeekBar

        android:layout_width="300dp"

        android:layout_height="wrap_content"

        android:layout_gravity="center"

        android:max="200"

        android:progress="100"

        android:id="@+id/seekBar1" />

</LinearLayout>

<LinearLayout

    android:id="@+id/middle_layout3"

    android:layout_width="match_parent"

    android:layout_height="wrap_content"

    android:orientation="horizontal"

    android:gravity="center"

    android:layout_gravity="center_horizontal">

    <ImageView

    android:layout_width="wrap_content"

    android:layout_height="wrap_content"

    android:layout_marginLeft="10px"

    android:id="@+id/imageView2"

    android:scaleType="fitCenter"

    android:adjustViewBounds="true"

    android:src="@drawable/ic_launcher"

    android:layout_gravity="center_vertical"

    android:background="#ff0e0e0e" />

<SlidingDrawer

    android:layout_width="wrap_content"

    android:layout_height="wrap_content"

    android:content="@+id/content"

    android:handle="@+id/handle"

    android:id="@+id/slidingDrawer"

    android:orientation="horizontal"

    android:alpha="0.5"

    android:layout_gravity="right|top">

    <LinearLayout

        android:id="@+id/content"

        android:layout_width="fill_parent"

        android:layout_height="fill_parent"

        android:orientation="vertical"

        android:background="#11111111"

        android:gravity="center">

        <ImageView

            android:layout_width="wrap_content"

            android:layout_height="wrap_content"

            android:id="@+id/brighticn"

            android:scaleType="fitCenter"

            android:adjustViewBounds="true"

            android:background="@drawable/brighticon"

            android:layout_gravity="center_vertical" />


        <ImageView

            android:layout_width="wrap_content"

            android:layout_height="wrap_content"

            android:id="@+id/filtericn"

            android:background="@drawable/filters" />

    </LinearLayout>

    <ImageView

        android:layout_width="wrap_content"

        android:layout_height="wrap_content"

        android:id="@+id/handle"

        android:background="@drawable/move" />

</SlidingDrawer>

</LinearLayout>

<LinearLayout

    android:layout_width="fill_parent"

    android:layout_height="wrap_content"

    android:orientation="horizontal"

    android:gravity="bottom"

    android:layout_gravity="bottom">

<HorizontalScrollView

    android:layout_width="fill_parent"

    android:layout_height="wrap_content"

    android:id="@+id/scrollView"

    android:layout_gravity="bottom"

    android:background="#ff030101">


    <LinearLayout

        android:id="@+id/sublayout"

        android:layout_width="fill_parent"

        android:layout_height="wrap_content"

        android:orientation="horizontal"

        android:background="#ff030101">

        <Button
            android:id="@+id/buttonhide"

            android:text="txt"

            android:layout_width="wrap_content"

            android:layout_height="wrap_content" />



    </LinearLayout>

</HorizontalScrollView>

</LinearLayout>

1 ответ

Чтобы действительно иметь независимое от плотности приложение, вам нужно предоставлять свои ресурсы в разных разрешениях. Android действительно умный в обращении с ними.

При добавлении изображений вы должны создавать меньшие или большие изображения в зависимости от формата экрана, который вы хотите поддерживать, и помещать их в определенную папку для этого формата. Что-то вроде этого:

  • Рез /
    • рисуем /
      • icon.png
      • background.png
    • рисуем-ИПЧР /
      • icon.png
      • background.png

Это заставило бы Android использовать drawable/icon.png когда у вас есть другая плотность экрана, чем hdpi, Но буду использовать drawable-hdpi/icon.png для этого конкретного типа экрана.

Чтобы лучше это понять, вы можете прочитать это очень подробное руководство из документации для Android: http://developer.android.com/guide/topics/resources/providing-resources.html