2010-06-29 2 views
3

Я хочу создать страницу на весь экран, который выглядит следующим образом:Наиболее эффективный способ создать пропорциональные взгляды

--------------------------------------- 
| -------- --------------------------- | 
||  ||   TextView   || 
||  | --------------------------- | 
|| Image | ----------------- -------- | 
|| View ||     ||  || 
||  || TextView  ||  || 
||  ||     || Image || 
||  ||     || View || 
| -------- ----------------- |  || 
| --------------------------- |  || 
||   TextView   ||  || 
| --------------------------- -------- | 
--------------------------------------- 

где каждый ImageView занимает не более 20% от ширины родительского компоновщика.

Основной вопрос: Действительно ... что это лучший способ сделать это? После нескольких часов поиска лучшая идея, которую я могу придумать, состоит в том, чтобы получить ширину экрана и просто установить ширину представлений в размере не более 20% от этого. Однако это интуитивно не похоже на лучшее решение. (Например, если приложение не работает в полноэкранном режиме, это решение не будет работать.) LinearLayout не будет работать с тем, как выкладывается страница (появляется, что я должен использовать RelativeLayout). И я думаю, было бы предпочтительнее установить ширину представлений на основе ширины родительского представления (в отличие от ширины экрана), но я не знаю, как это сделать, потому что в то время, когда я пытаюсь чтобы настроить ширину представлений моих детей, parentView.getWidth() возвращает 0. Есть ли у кого-нибудь хорошие, чистые решения для создания страницы, как показано выше?

Второй вопрос: Кто-нибудь знает, как обернуть текст вокруг изображений, как показано выше? После еще нескольких часов поиска я не смог найти решение для этого; похоже, вам нужно сшить пару текстовых элементов. Есть ли лучший способ, который мне не хватает?

Спасибо за любую информацию, которую любой может предоставить.

+0

Изображения статические или динамические? Можно ли разместить изображения разных размеров на одном и том же месте, и это должно соответствовать им? И тексты? – Maragues

+0

Изображения являются динамическими. Они будут поддерживать их соотношение сторон и могут быть любого размера до макс. 20% от ширины экрана. Изображения всегда будут находиться в одном и том же месте (т. Е. Их верхний левый угол всегда находится в одном и том же месте). Текст также динамичен; он займет оставшееся пространство. Чтобы уточнить, я смог создать этот макет, как я упоминал выше (то есть, установив ImageView.setMaxWidth() на 20% ширины экрана), но опять же, это не сработает, если приложение не работает в полноэкранном режиме. Ищете что-то правильное, менее хакерское, если у кого-то есть что-то. –

ответ

0

Я не уверен, что это возможно. Даже если это так, вы уверены, что это лучший макет для экрана размером менее 4 дюймов? Возможно, вместо того, чтобы пытаться выяснить, как это сделать, придумайте те, которые больше подходят для небольшого экрана.

андроид SDK делает это трудно сделать, то это, вероятно, не то, что вы должны делать.

0

на второй вопрос, вы можете поместить изображения в верхней, нижней, правой или левой из TextView с помощью

android:drawableTop 
android:drawableBottom 
android:drawableLeft 
android:drawableRight 

Вы также можете установить прокладку

android:drawablePadding 

check the API

Я попытаюсь ответить на первый вопрос, когда вы укажете более подробную информацию о проекте. Во всяком случае, я предлагаю использовать RelativeLayout.

+0

Нет кубиков. Три TextViews выше, я пытаюсь заставить их быть одной единицей, которая обтекает оба изображения, но тег android: drawable не дал мне такого рода обертывание. Например. Я использовал drawableLeft, и изображение появилось слева, но текст, который шел ниже нижней части изображения, фактически не обернулся под изображение. –

1

Для достижения этой цели вы можете использовать свойство android: layout_weight внутри XML-макета.

+0

Полностью согласен с вами. –

+0

Можете ли вы предоставить код для этого. Мне интересно посмотреть, как это будет работать. Легко понять, как это будет работать, если искатель не хочет, чтобы верх правильного изображения был посередине левой. Я не говорю, что вы ошибаетесь, просто интересуетесь, как это будет сделано. – matto1990

0

Эй, спасибо за ответы. Некоторые дополнительные разъяснения:

a) layout_weight не работает с RelativeLayouts; похоже, что это тег LinearLayout. Как указывал выше матото, я не вижу возможности создать свою конкретную настройку с помощью LinearLayouts, так как правильное изображение не выравнивается с левым. (Если есть способ сделать это, хотя, можете ли вы сообщить мне ..)

б) Ах, спасибо. Как-то я пропустил теги drawableLeft и т. Д. Я попробую их и посмотрю, так ли это.

c) Что касается размера экрана, я делаю это с планшетами Android. Никто из них не имеет каких-либо крупных имен, но, вероятно, некоторые из них будут спускаться вниз. Я согласен, хотя на небольшом 4-дюймовом экране этот макет, вероятно, не имеет смысла.

Я не уверен, какие другие детали дизайна необходимы для моего вопроса здесь; Я думал, что макета, нарисованного выше, будет достаточно. Было ли еще что-то конкретное, что я мог сказать, чтобы прояснить вопрос?

1

Вы можете добиться этого с помощью 3 линейных макетов в разрезе.

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" > 

    <LinearLayout 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:orientation="vertical" 
     android:weightSum="1" > 

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

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

       <ImageView .... /> 

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

</RelativeLayout> 

другие разделы должны быть выровнены с разной степенью тяжести.

Я знаю, что много макетов и весов, это решение определенно не лучшее для производительности. Может быть, кто-то еще может его улучшить

Смежные вопросы