2015-06-09 3 views
0

Я пытаюсь создать простое приложение для Android-чата. Что мне нужно сделать, так это создать чат-чат вокруг текста чата. Ширина этого пузыря не должна превышать 85% ширины экрана, даже если он содержит больше текста (текст должен перейти к следующей строке). Однако, если количество текста меньше в пузыре, ширина пузыря должна обернуть содержимое.Android: Как установить максимальную ширину TextVIew как отношение размера экрана?

Причина в том, что я показываю время чата справа от пузыря, и если ширина пузыря становится больше, чем 85% экрана, дата не будет видна.

Ниже приведен файл макета:

 <TextView 
      android:id="@+id/chatBody" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:text="Chat Text" 
      android:textColor="#222222" 
      android:textSize="19sp" 
      android:textStyle="bold"/> 

     <TextView 
      android:id="@+id/chatDate" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:layout_marginRight="10dp" 
      android:gravity="right" 
      android:text="Date" 
      android:textColor="#999999" 
      android:textSize="12sp" 
      android:layout_gravity="center_vertical" 
      android:layout_marginLeft="20dp"/> 

    </LinearLayout> 

ответ

0

Если вы уже показываете это в LinearLayout, вы можете воспользоваться layout_weight.

Так что ваш код будет в конечном итоге выглядит так:

<TextView 
     android:id="@+id/chatBody" 
     android:layout_width="0dp" 
     android:layout_height="wrap_content" 
     android:layout_weight="4" 
     android:text="Chat Text" 
     android:textColor="#222222" 
     android:textSize="19sp" 
     android:textStyle="bold"/> 

    <TextView 
     android:id="@+id/chatDate" 
     android:layout_width="0dp" 
     android:layout_height="wrap_content" 
     android:layout_weight="1" 
     android:layout_marginRight="10dp" 
     android:gravity="right" 
     android:text="Date" 
     android:textColor="#999999" 
     android:textSize="12sp" 
     android:layout_gravity="center_vertical" 
     android:layout_marginLeft="20dp"/> 

</LinearLayout> 

Так предполагается, что ваш LinearLayout занимает всю ширину экрана (с помощью fill_parent или match_parent) chatBody теперь будет 80% от ширины таял и chatDate будет составлять 20% от ширины. Если вы хотите, чтобы это было 85%, вы могли бы сделать как вес 17 и 3, или даже 85 и 15, если хотите быть точными.

+0

Эй, спасибо, человек, я просто пришел к этому решению, как 5 минут назад. – Rachit

0

Можно только сделать это в Java коде. В Вашей деятельности:

private TextView yourBubbleTextView; 

В вашем onCreate():

yourBubbleTextView = (TextView) findViewById(R.id.yourBubbleTvId); 
// paddings is the total amount of paddings which surround the bubble 
// i.e. if you lave LinearLayout padding="5" then use 10 (5 left 5 right) 
int totalSize = getWindoManager().getDefaultDisplay().getWidth() - paddings; 
// if you aren't using LinearLayout, replace it with whatever layout manager you are using 
yourBubbleTextView.setLayoutParams(new LinearLayout.LayoutParams(totalSize, ViewGroup.LayoutParams.WRAP_CONTENT)); 

Надежда Я помог!

+0

Спасибо, но я получил решение через сам xml. Но спасибо за ваш ответ, я ценю это. :) – Rachit

0

ОК, Итак, я получил ответ. Для тех, кто может искать тот же ответ.

Все, что я сделал, было установлено шириной для первого TextView's «0dp». Тогда я дал ему layout_weight чего-нибудь более 0.

Вот код, который работал для меня.

<LinearLayout 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_marginTop="5dp" 
     android:gravity="left" 
     android:orientation="horizontal" 
     android:background="@drawable/chat_bubble" 
     android:padding="10dp"> 

     <TextView 
      android:id="@+id/chatBody" 
      android:layout_width="0dp" 
      android:layout_height="wrap_content" 
      android:text="Chat Text is a lot of long text that should ideally move to the next line automatically" 
      android:textColor="#222222" 
      android:layout_weight="0.1" 
      android:textSize="19sp" 
      android:textStyle="bold"/> 

     <TextView 
      android:id="@+id/chatDate" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:layout_marginRight="10dp" 
      android:gravity="right" 
      android:text="Date" 
      android:textColor="#999999" 
      android:textSize="12sp" 
      android:layout_gravity="center_vertical" 
      android:layout_marginLeft="20dp"/> 

    </LinearLayout> 
+0

Ну, я думаю, вы должны использовать это вместо: 'layout_weight =" 85 "и' layout_weight = 15' для текстовых просмотров и 'weightSum =" 100 "для LinearLayout. – Chaoz

+0

По какой-то причине это не работает для меня. Когда я это делаю, ширина, выделенная для поля «Дата», составляет менее 15%. И поскольку я увеличиваю значение с 15 до 25 (и от 85 до 75), область для Даты становится еще меньше. – Rachit

+0

Также добавьте 'layout_width =" 0dp "' для обоих TextViews – Chaoz

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