2013-03-22 3 views
0

Я столкнулся с проблемой, выравнивая текст в нужном форматеКак выровнять выходной текст, чтобы

EX: сказать, что я получить распечатку следующим образом

Name      Phone No. 
Adithya     99999999999 
Ravi      99999999999 
Teja      99999999999 
: 
: 

но как длина струнной Adithya не равна длине Ravi мы не можем дать конкретный интервал, таких как

String s = Name+ " " + Phone + "\n";

здесь, если я дам, так что я буду получать следующим образом

Name    Ph 
Adithya    9999999 
Ravi    9999999 
Tej    9999999 
: 
: 

он будет отображаться на этом пути. Как я могу это решить?

+0

используйте пользовательское listview с именем сверху и номером телефона ниже. Вы можете установить шрифт. – Raghunandan

+0

Возьмите два текстовых элемента вместо их отображения в одном файле. – Pragnani

+0

проблема заключается в получении вывода в сообщении электронной почты или на принтере при показе его в действии – user1785693

ответ

0

Эта проблема является именно тем, для чего предназначен ListView.

Используйте ListView, и вы можете поместить Имя слева и Телефон справа или любую другую ориентацию. Вы можете легко изменять цвета, размер текста, шрифт и т. Д. Найти пример для ListView. Простой в использовании простой адаптер идеально подходит для этой реализации. Вам должно быть хорошо.


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

Это теперь трудная задача по нескольким причинам:

  • Email не слушается вкладки.
  • Вкладки не оптимальны, поскольку длинным и коротким именам потребуется различное количество символов табуляции.

Единственное решение, которое я могу придумать для электронной почты и общего вывода на печати, чтобы вычислить количество пробелов необходимого между числом столбцами имени и телефона * и печатью силы с моно-пространство шрифтом, например, «Courier »и т. д.

(*) Как рассчитать количество пробелов между столбцами: Выберите позицию строки для столбца телефонного номера, то есть 40 символов. Количество пробелов, требуемых между именем и телефоном для любой конкретной строки, равно (40 - name.length()).

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

String text = "Phone List:"; 
for(i = 0; i < n; i++) { 
    String name = names[i]; 
    String phone = phones[i]; 
    int nsp = 40 - name.length(); 
    text += "\n" + name + StringUtils.repeat(" ", nsp) + phone; 
} 
+0

Нехорошо использовать ListView до тех пор, пока это не понадобится. Поскольку ListView имеет множество оптимизаций и переработок. Для маленькой вещи вроде этого. LinearLayout или TableLayout с scrollview - лучший вариант – Pragnani

+0

Хорошая точка @ Прагани. Оба метода могут работать. Но я все же считаю, что ListView лучше. Это связано с тем, что для использования LinearLayout для каждого столбца или TableLayout потребуется два отдельных параллельных списка: один для имен и один для телефонных номеров. Это и плохое программирование, поскольку списки могут выйти из синхронизации и вызовут несоосность, если какой-либо элемент в списке слов-обертываний. Кроме того, накладные расходы и усилия разработчиков для SimpleAdapter ListView не очень высоки, как только вы привыкнете к нему. –

+0

Эта проблема возникает при отправке String на E-Mail или принтер не во время отображения в Activity. – user1785693

0

Вы можете использовать вкладку (\t):

String s = String.format("%s\t\t%s\n", Name, Phone); 

войдет в две вкладки после имени и затем PHONENUMBER. Феноменумы должны быть хорошо выровнены.

+0

К сожалению, это не удастся, так как а) символы табуляции обычно обрабатываются как фиксированное количество пробелов в электронной почте, а б) для более длинных и более коротких имен потребуется различное количество символов табуляции. –

0

Я бы предпочел вам использовать Table Layout (это гарантирует выравнивание) вместо того, чтобы сделать ваш код сложным.

Ниже будет макет для list view ROW Ваше кодирование часть будет так же просто перейти на этот новый формат

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


     <TableRow 
      android:id="@+id/tblRow1" 
      android:layout_width="fill_parent" 
      android:layout_height="wrap_content"   
      android:padding="5dip"> 


     <TextView 
      android:id="@+id/tv_Name" 
      android:layout_width="0dip" 
      android:layout_weight="3" <!--it defines how much space this view should get in row--> 
      android:text="Ravi" 
      android:layout_height="wrap_content" 
      android:paddingLeft="20dip" 
      android:textSize="14sp" 
      android:textColor="@android:color/black"/> 

     <TextView 
      android:id="@+id/tv_PhoneNumber" 
      android:layout_width="0dip" 
      android:layout_weight="3" 
      android:text="9999999999" 
      android:layout_height="wrap_content" 
      android:paddingLeft="20dip" 
      android:textSize="14sp" 
      android:textColor="@android:color/black"/> 

     </TableRow> 

    </TableLayout> 

enter image description here

Затем связать эту схему к адаптеру, как вы делаете с другие макеты.

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