Повернутый текст в AppWidget - PullRequest
0 голосов
/ 12 апреля 2020

У меня есть макет для Виджета приложения , который имеет сетку 3x3 повернутых TextView:

<LinearLayout
    style="@style/WidgetButtonLayout"
    android:id="@+id/widget_buttons_text_port" >

    <LinearLayout style="@style/WidgetButtonRow">
        <TextView
            style="@style/WidgetButton.Text"
            android:rotation="-90"
            android:id="@+id/upperLeft_text_port" />
        <TextView
            style="@style/WidgetButton.Text"
            android:rotation="-90"
            android:id="@+id/upperMiddle_text_port" />
        <TextView
            style="@style/WidgetButton.Text"
            android:rotation="-90"
            android:id="@+id/upperRight_text_port" />
    </LinearLayout>

    <LinearLayout style="@style/WidgetButtonRow">
        <TextView
            style="@style/WidgetButton.Text"
            android:rotation="-90"
            android:id="@+id/middleLeft_text_port" />
        <TextView
            style="@style/WidgetButton.Text"
            android:rotation="-90"
            android:id="@+id/middleMiddle_text_port" />
        <TextView
            style="@style/WidgetButton.Text"
            android:rotation="-90"
            android:id="@+id/middleRight_text_port" />
    </LinearLayout>

    <LinearLayout style="@style/WidgetButtonRow">
        <TextView
            style="@style/WidgetButton.Text"
            android:rotation="-90"
            android:id="@+id/lowerLeft_text_port" />
        <TextView
            style="@style/WidgetButton.Text"
            android:rotation="-90"
            android:id="@+id/lowerMiddle_text_port" />
        <TextView
            style="@style/WidgetButton.Text"
            android:rotation="-90"
            android:id="@+id/lowerRight_text_port" />
    </LinearLayout>

</LinearLayout>

Где стили:

<style name="WidgetButtonLayout">
    <item name="android:layout_width">match_parent</item>
    <item name="android:layout_height">match_parent</item>
    <item name="android:orientation">vertical</item>
    <item name="android:weightSum">3</item>
</style>

<style name="WidgetButtonRow">
    <item name="android:layout_width">match_parent</item>
    <item name="android:layout_height">wrap_content</item>
    <item name="android:orientation">horizontal</item>
    <item name="android:layout_weight">1</item>
    <item name="android:weightSum">3</item>
</style>

<style name="WidgetButton">
    <item name="android:layout_weight">1</item>
    <item name="android:layout_width">0dp</item>
    <item name="android:layout_height">match_parent</item>
    <item name="android:layout_margin">1dp</item>
    <item name="android:gravity">center</item>
</style>

<style name="WidgetButton.Text">
    <item name="android:textSize">15sp</item>
    <item name="android:text">@string/button_settings</item>
    <item name="android:textColor">@color/widgetButtonText</item>
    <item name="android:background">@color/transparent</item>
</style>

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

enter image description here

Есть идеи, как это исправить? Я думал только об использовании фиксированного и более широкого, чем нужно, TextView, но проблема здесь в том, что TextView динамически измеряется на основе компоновки сетки.

РЕДАКТИРОВАТЬ, отметьте, что, поскольку это установлено в контексте Виджет приложения, этот макет предназначен для RemoteViews, и я не могу использовать setRotation() для программной установки поворота в TextView (см. здесь ), а другие аналогичные параметры также ограничены.

1 Ответ

1 голос
/ 17 апреля 2020

Если бы это не было конкретным c случаем AppWidget, я бы порекомендовал вам использовать пользовательское представление, такое как , которое предлагает этот ответ.

Хотя это Widget, поэтому мы не можем использовать пользовательские виды. Мы можем использовать грязные хаки.

Попробуйте этот хак:

  • Жесткий код layout_width и layout_height TextView больше ожидаемого текста размер - например, 1024dp x 1024dp.

  • Поместите TextView в FrameLayout

  • Используйте атрибут gravity для позиционирования текст в пределах TextView границы.

  • Используйте атрибут layout_gravity для позиционирования TextView внутри FrameLayout

В вашем Если это будет выглядеть примерно так:

<LinearLayout
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical">
    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="0dp"
        android:layout_weight="1"
        android:orientation="horizontal">

        <FrameLayout
            android:layout_width="0dp"
            android:layout_height="match_parent"
            android:layout_weight="1"
            android:padding="8dp">
            <TextView
                android:layout_width="1024dp"
                android:layout_height="1024dp"
                android:layout_gravity="center"
                android:gravity="center"
                android:rotation="-90"
                android:text="Some text smaller than container" />
        </FrameLayout>
        <FrameLayout
            android:layout_width="0dp"
            android:layout_height="match_parent"
            android:layout_weight="1"
            android:padding="8dp">
            <TextView
                android:layout_width="1024dp"
                android:layout_height="1024dp"
                android:layout_gravity="center"
                android:gravity="center"
                android:rotation="-90"
                android:text="Some text smaller than container" />
        </FrameLayout>
        <FrameLayout
            android:layout_width="0dp"
            android:layout_height="match_parent"
            android:layout_weight="1"
            android:padding="8dp">
            <TextView
                android:layout_width="1024dp"
                android:layout_height="1024dp"
                android:layout_gravity="center"
                android:gravity="center"
                android:rotation="-90"
                android:text="Some text smaller than container" />
        </FrameLayout>

    </LinearLayout>

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="0dp"
        android:layout_weight="1"
        android:orientation="horizontal">

        <FrameLayout
            android:layout_width="0dp"
            android:layout_height="match_parent"
            android:layout_weight="1"
            android:padding="8dp">
            <TextView
                android:layout_width="1024dp"
                android:layout_height="1024dp"
                android:layout_gravity="center"
                android:gravity="center"
                android:rotation="-90"
                android:text="Some text smaller than container" />
        </FrameLayout>
        <FrameLayout
            android:layout_width="0dp"
            android:layout_height="match_parent"
            android:layout_weight="1"
            android:padding="8dp">
            <TextView
                android:layout_width="1024dp"
                android:layout_height="1024dp"
                android:layout_gravity="center"
                android:gravity="center"
                android:rotation="-90"
                android:text="Some text smaller than container" />
        </FrameLayout>
        <FrameLayout
            android:layout_width="0dp"
            android:layout_height="match_parent"
            android:layout_weight="1"
            android:padding="8dp">
            <TextView
                android:layout_width="1024dp"
                android:layout_height="1024dp"
                android:layout_gravity="center"
                android:gravity="center"
                android:rotation="-90"
                android:text="Some text smaller than container" />
        </FrameLayout>

    </LinearLayout>

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="0dp"
        android:layout_weight="1"
        android:orientation="horizontal">

        <FrameLayout
            android:layout_width="0dp"
            android:layout_height="match_parent"
            android:layout_weight="1"
            android:padding="8dp">
            <TextView
                android:layout_width="1024dp"
                android:layout_height="1024dp"
                android:layout_gravity="center"
                android:gravity="center"
                android:rotation="-90"
                android:text="Some text smaller than container" />
        </FrameLayout>
        <FrameLayout
            android:layout_width="0dp"
            android:layout_height="match_parent"
            android:layout_weight="1"
            android:padding="8dp">
            <TextView
                android:layout_width="1024dp"
                android:layout_height="1024dp"
                android:layout_gravity="center"
                android:gravity="center"
                android:rotation="-90"
                android:text="Some text smaller than container" />
        </FrameLayout>
        <FrameLayout
            android:layout_width="0dp"
            android:layout_height="match_parent"
            android:layout_weight="1"
            android:padding="8dp">
            <TextView
                android:layout_width="1024dp"
                android:layout_height="1024dp"
                android:layout_gravity="center"
                android:gravity="center"
                android:rotation="-90"
                android:text="Some text smaller than container" />
        </FrameLayout>

    </LinearLayout>

</LinearLayout>

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...