2016-10-13 1 views
2

У меня есть TextView рядом с ImageButton в горизонтальном LinearLayout, который затем завернут в вертикальный LinearLayout. Чтобы отобразить кнопку, мне нужно было установить layout_weight на текстовом изображении и кнопке с более сильной кнопкой. Однако, похоже, кнопка определяет высоту обоих из них, даже если текст должен быть выше. Есть ли способ обойти это?Многострочное текстовое изображение, получившее отрезанное высоту

<LinearLayout 
    android:orientation="vertical" 
    android:layout_height="match_parent" 
    android:layout_margin="5dp" 
    android:layout_width="wrap_content"> 


    <LinearLayout 
     android:orientation="horizontal" 
     android:layout_height="wrap_content" 
     android:layout_width="match_parent"> 

     <TextView 
      android:layout_width="0dp" 
      android:layout_height="wrap_content" 
      android:textColor="@color/text_color" 
      android:textSize="@dimen/medium_font" 
      android:layout_gravity="center" 
      android:text="A long text that wraps correctly but then gets cut off" 
      android:layout_weight="1" /> 

     <ImageButton 
      android:contentDescription="@string/share_button" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:id="@+id/share_button" 
      android:padding="5dp" 
      android:layout_weight="0" 
      android:layout_gravity="center" 
      android:scaleType="center" 
      android:background="@android:color/transparent" 
      android:src="@mipmap/ic_menu_share_holo_dark"/> 
    </LinearLayout> 

    <LinearLayout 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:background="@drawable/button_background" 
     android:id="@+id/distances_parent"> 
     <Spinner 
      android:layout_margin="5dp" 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content" 
      android:entries="@array/distance_labels" 
      android:id="@+id/distances" /> 
    </LinearLayout> 

    <Space 
     android:layout_weight="1" 
     android:layout_width="match_parent" 
     android:layout_height="0dp" /> 

    <FrameLayout 
     android:background="@color/back_end" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content"> 

     ... 
    </FrameLayout> 
</LinearLayout> 

Это то, что он выглядит следующим образом:

Cut off text

Как вы можете видеть кнопку определяет высоту, а не текст, как и должно быть.

Это то, что я хочу, чтобы это выглядело как:

Text not cut off

+0

Вместо использования LinearLayout можно использовать RelativeLayout, чтобы сделать это возможным. Укажите ожидаемый результат в виде изображения [рисунок]. –

+0

Я отредактировал сообщение с тем, как я хочу, чтобы он выглядел. – DaedalusAlpha

+0

У вас довольно сложный макет. Я предлагаю снять его и посмотреть, сможете ли вы получить только основную часть - как показано на снимках экрана - для правильной работы. Вы также можете попробовать атрибут XML android: measureWithLargestChild в своем втором LinearLayout. –

ответ

1

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

<RelativeLayout 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content"> 

    <TextView 
     android:id="@+id/text" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_alignParentLeft="true" 
     android:layout_gravity="center" 
     android:layout_toLeftOf="@+id/share_button" 
     android:text="A long text that wraps correctly but then gets cut off" 
     android:textColor="@color/text_color" 
     android:textSize="@dimen/medium_font"" /> 

    <ImageButton 
     android:id="@+id/share_button" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_alignParentRight="true" 
     android:layout_gravity="center" 
     android:layout_weight="0" 
     android:background="@android:color/transparent" 
     android:contentDescription="imagebutton" 
     android:padding="5dp" 
     android:scaleType="center" 
     android:background="@android:color/transparent" 
     android:src="@mipmap/ic_menu_share_holo_dark"/> 

    <Spinner 
     android:id="@+id/distances" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:layout_below="@+id/text" 
     android:layout_margin="5dp" 
     android:entries="@array/distance_labels" /> 
</RelativeLayout> 

Если ваш TextView содержит больше текста. Высота TextView будет увеличиваться в соответствии с тем, что ImageButton будет настраиваться. Попробуйте и проверьте. Надеюсь, это поможет вам. Всего наилучшего.

+0

Я использовал это решение, а не именно письмо, но суть его. Он не только решает проблему, но и упрощает компоновку, которая была немного сложной (как указывалось некоторые). @Abtin Gramian имеет аналогичный ответ, который я мог бы выбрать, но это было первым. – DaedalusAlpha

+0

Спасибо. Всего наилучшего. Счастливое кодирование. –

0
<TextView 
     android:layout_width="0dp" 
     android:layout_height="wrap_content" 
     android:textColor="@color/text_color" 
     android:textSize="@dimen/medium_font" 
     android:layout_gravity="center" 
     android:text="A long text that wraps correctly but then gets cut off" 
     android:layout_weight="1" /> 

Вам просто нужно установить layout_height = "По вашему желанию" Вот и все.

1

Трудно помочь, не зная, как выглядит весь ваш взгляд. Является ли это заполнением всего экрана или он вложен в другой формат? Затем мы можем определить, какая высота соответствует верхнему расположению в этом конкретном макете, поскольку вы используете match_parent, а не конкретное значение.

Для отображения текста вам необходимо установить layout_weight, так как у вас есть ширина 0dp, а не wrap_content. Те идут рука об руку. Атрибуты 0dp, weightSum и layout_weight используются для разделения оставшегося пустого пространства между набором элементов в пределах LinearLayout.

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

Я также не знаю, почему вы используете виджет Space, а не устанавливаете прописку, маржу или атрибуты выравнивания.

Если ты хочешь, чтобы справиться с разделив пустое пространство, то используйте:

<LinearLayout 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_height="match_parent" 
    android:layout_margin="5dp" 
    android:layout_width="match_parent" 
    android:orientation="vertical"> 

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

     <TextView 
      android:id="@+id/text_view" 
      android:layout_width="0dp" 
      android:layout_height="wrap_content" 
      android:layout_gravity="center" 
      android:layout_weight="1" 
      android:text="A long text that wraps correctly but then gets cut off"/> 

     <ImageButton 
      android:id="@+id/share_button" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:layout_toRightOf="@+id/text_view" 
      android:layout_toEndOf="@+id/text_view" 
      android:padding="5dp" 
      android:layout_gravity="center" 
      android:scaleType="center" 
      android:background="@android:color/transparent" 
      android:src="@mipmap/ic_menu_share_holo_dark"/> 


    </LinearLayout> 

    <Spinner 
     android:id="@+id/distances" 
     android:layout_margin="5dp" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:layout_below="@id/text_view"/> 

</LinearLayout> 

Но, похоже, вы можете использовать RelativeLayout здесь.

<RelativeLayout 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_height="match_parent" 
    android:layout_margin="5dp" 
    android:layout_width="match_parent"> 

    <TextView 
     android:id="@+id/text_view" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_gravity="center" 
     android:text="A long text that wraps correctly but then gets cut off"/> 

    <ImageButton 
     android:id="@+id/share_button" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_toRightOf="@+id/text_view" 
     android:layout_toEndOf="@+id/text_view" 
     android:padding="5dp" 
     android:layout_gravity="center" 
     android:scaleType="center" 
     android:background="@android:color/transparent" 
     android:src="@mipmap/ic_menu_share_holo_dark"/> 

    <Spinner 
     android:id="@+id/distances" 
     android:layout_margin="5dp" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:layout_below="@id/text_view"/> 

</RelativeLayout> 
+0

Просто хотел добавить, что причина, по которой у меня была прядильщик внутри линейного макета, была настолько, что я мог бы добавить фон, который мне захотел. Если вы добавите фон непосредственно в прядильщик, по какой-то причине исчезает маленькая стрелка вниз. Хотя линейный макет, вероятно, не самый лучший, поэтому я изменил его на макет фрейма. – DaedalusAlpha

0

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

, но я буду sugest использовать Relative макета для этой цели , потому что вся работа может быть сделана в едином hirarchy уровень Чем больше вы будете ставить более глубокие уровни hirarchi верстки больше экранного времени потребуется, чтобы загрузить представление это хорошая практика, если мы можем сделать это в минимальных уровней

<LinearLayout 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    android:orientation="vertical" 
    android:layout_height="match_parent" 
    android:layout_margin="5dp" 
    android:layout_width="wrap_content"> 


    <LinearLayout 
     android:orientation="horizontal" 
     android:layout_height="wrap_content" 
     android:layout_width="match_parent"> 

     <TextView 
      android:layout_width="0dp" 
      android:layout_height="wrap_content" 
      android:textColor="#000000" 
      android:layout_gravity="center" 
      android:text="A long text that wrapdasdsd dff f df df sdf asdf sdf sadf dsf sdf sdaf adsf adsf sdf sdaf sdf sdf sadf sadf sdf sd fsdf sadf asdf sdaf sdaf sf saf asf dsf sadf sdf sdaf sdf as df dfs correctly but then gets cut off" 
      android:layout_weight="1" /> 

     <ImageButton 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:id="@+id/share_button" 
      android:padding="5dp" 
      android:layout_weight="0" 
      android:layout_gravity="center" 
      android:scaleType="center" 
      android:background="@android:color/transparent" 
      android:src="@mipmap/ic_launcher"/> 
    </LinearLayout> 

    <LinearLayout 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content"> 
    </LinearLayout> 

    <Space 
     android:layout_weight="1" 
     android:layout_width="match_parent" 
     android:layout_height="0dp" /> 

    <FrameLayout 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content"> 

    </FrameLayout> 
</LinearLayout> 
0

вы делаете все это неправильно. если вы используете layout_weight, тогда вам нужно установить layout_width of textV МЭН и ImageButton оба они равны нулю dp.Assign их согласно ур requirement.like это:

<TextView 
    android:layout_width="0dp" 
    android:layout_height="wrap_content" 
    android:text="A long text that wraps correctly but then gets cut off" 
    android:textSize="@dimen/medium_font" 
    android:layout_weight="9"/> 

<ImageButton 
    android:layout_width="0dp" 
    android:layout_height="wrap_content" 
    android:layout_weight="1" 
    android:background="@android:color/transparent" 
    android:src="@mipmap/ic_menu_share_holo_dark"> 

вы можете выбрать watever размер для размещения height.But не делают каких-либо изменений в макет width.If это работает сообщите мне в разделе комментариев