Ширина виджета Android - соответствует родительский на всех устройствах - PullRequest
3 голосов
/ 24 октября 2019

У меня есть виджет со следующей информацией:

<appwidget-provider
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:minWidth="328dp"
    android:minHeight="56dp"
    android:updatePeriodMillis="1000000"
    android:initialLayout="@layout/home_widget"
    android:previewImage="@drawable/widget_preview"
    android:resizeMode="horizontal"
    android:widgetCategory="home_screen">
</appwidget-provider>

Макет (его не нужно указывать здесь) выглядит хорошо на моем устройстве, но я обнаружил, что виджет не подходит для меньшего экрана. Может кто-нибудь помочь мне решить эту проблему? Вместо того, чтобы не отображать этот виджет на небольших устройствах, я хотел бы изменить макет (возможно, создать для него другой макет xml). Я попытался поместить minWidth в измерения, но, поскольку у меня все элементы виджета расположены и точно измерены, такой подход обрезает виджет. Спасибо за любую помощь.

Ответы [ 4 ]

4 голосов
/ 24 октября 2019

Плотность экрана не одинакова для всех устройств, поэтому лучшее решение - ввести ssp и sdp вместо dp, который фиксирован для всех устройств ssp используется для установки размера текста и sdp используется для макетов.

https://github.com/intuit/sdp

1 голос
/ 24 октября 2019

, потому что мы используем разные размеры экрана и разную плотность экрана, чтобы решить эту проблему, не используйте dp или sp вместо sdp или ssp, которые есть в этой библиотеке https://github.com/intuit/sdp

И это делает ваше пространствоЭкран отзывчивого преамтера

0 голосов
/ 24 октября 2019

Как упомянуто выше, разные телефоны получили экран разных размеров , поэтому при использовании фиксированного размера (например, 328dp) ваш макет может не реагировать на все устройства.


ответ Намана будет работать для вас, вы можете использовать что-то вроде этого:

<view
    android:layout_height="@dimen/_100sdp"
    android:width="@dimen/_100sdp" />

Но вы также можете использовать ConstraintLayout , чтобы рассказать своим взглядам, как распространятьна вашем экране с процентами, например:

 <view
    android:layout_height="0dp"
    android:layout_width="0dp"
    app:layout_constraintHeight_percent="0.2"
    app:layout_constraintWidth_percent="0.3"
    app:layout_constraintBottom_toBottomOf="parent"
    app:layout_constraintEnd_toEndOf="parent"
    app:layout_constraintStart_toStartOf="parent"
    app:layout_constraintTop_toTopOf="parent" />

При таком решении ваш вид будет равен 30% ширины экрана, 20% его высоты и будет реагировать на все размеры экрана.

0 голосов
/ 24 октября 2019

Если вы хотите, чтобы ширина виджета соответствовала родительскому, то вы можете использовать android:layout_width="match_parent"

match_parent, определяющий ширину / высоту как родительский, нет необходимости определять статический размер. Это настроить ширину в соответствии с шириной родителя.

Я надеюсь, что это сработает для вас.

...