TextView программно Android

У меня есть некоторые проблемы с программным созданием textView. Я действительно не знаю, как это решить.

введите здесь описание изображения

Проблемы:

-Маржа, я не хочу, чтобы мой TextView прилипал друг к другу.

-Текст не центрирован в рисовании, как в заголовке

-Я хочу, чтобы сообщения пользователя с псевдонимом выровнялись по правому краю, а сообщения от Ника — по левому краю.

Для этого у меня есть две функции:

private void appendSenderText(String message) {

        TextView msg = new TextView(ChatActivity.this);
        msg.setBackgroundResource(R.drawable.rectangle);
        msg.setText(message);
        msg.setPadding(10, 10, 10, 10);
        msg.setTextColor(getResources().getColor(R.color.white));
        FrameLayout.LayoutParams params = new FrameLayout.LayoutParams(LayoutParams.WRAP_CONTENT,LayoutParams.WRAP_CONTENT, Gravity.LEFT);
        params.setMargins(10, 10, 10, 10);
        msg.setLayoutParams(params);
        LinearLayout chat = (LinearLayout) findViewById(R.id.chatLayout);
        chat.addView(msg);  
    }

    private void appendReceiverText(String message) {

        TextView msg = new TextView(ChatActivity.this);
        msg.setBackgroundResource(R.drawable.rectangle);
        msg.setText(message);
        msg.setPadding(10, 10, 10, 10);
        msg.setTextColor(getResources().getColor(R.color.white));
        FrameLayout.LayoutParams params = new FrameLayout.LayoutParams(LayoutParams.WRAP_CONTENT,LayoutParams.WRAP_CONTENT, Gravity.RIGHT);
        params.setMargins(10, 10, 10, 10);
        msg.setLayoutParams(params);
        LinearLayout chat = (LinearLayout) findViewById(R.id.chatLayout);
        chat.addView(msg);  
    }

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

РЕДАКТИРОВАТЬ: я использовал ListView, как вы предложили, все работает нормально, но у меня все еще есть эта проблема с текстом, не центрированным, хотя я использовал msg.setGravity(gravity.CENTER); Возможно, у моего рисунка есть проблема.

Вот файл xml для моего прямоугольника со скругленными углами. Это странно, когда я создаю свой Textview в файле XML, текст центрируется, а когда я хочу создать программно, это не так.

введите здесь описание изображения

Вот код моего рисунка.

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android" 
    android:shape="rectangle">
    <gradient
     android:startColor="@color/drk_button"
     android:endColor="@color/lgt_button"
     android:angle="90">
   </gradient>

   <corners android:radius="7dip" />

   <stroke
     android:width="1px"
     android:color="@color/drk_button" />
</shape>

А вот код, в котором я создаю texView.

Message message = (Message) this.getItem(position);

        ViewHolder holder; 
        if(convertView == null)
        {
            holder = new ViewHolder();
            convertView = LayoutInflater.from(mContext).inflate(R.layout.sms_row, parent, false);
            holder.message = (TextView) convertView.findViewById(R.id.message_text);
            convertView.setTag(holder);
        }
        else
            holder = (ViewHolder) convertView.getTag();

        holder.message.setText(message.getMessage());
        holder.message.setTextSize(17);
        holder.message.setGravity(Gravity.CENTER);
        LayoutParams lp = (LayoutParams) holder.message.getLayoutParams();
        if(message.isMine())
        {
            holder.message.setBackgroundResource(R.drawable.rectangle);
            lp.gravity = Gravity.LEFT;
        }
        else
        {
            holder.message.setBackgroundResource(R.drawable.rectangledest);
            lp.gravity = Gravity.RIGHT;
        }
        holder.message.setLayoutParams(lp);
        holder.message.setTextColor(Color.WHITE);   

        return convertView;
    }

person tonystrawberry    schedule 02.06.2014    source источник
comment
вам определенно следует использовать ListView для вещей, подобных чату   -  person Blackbelt    schedule 02.06.2014
comment
Если вы разрабатываете приложение для чата, лучше используйте ListView и просмотрите несколько примеров кода приложения для чата.   -  person Spring Breaker    schedule 02.06.2014
comment
github.com/AlexBarinov/UIBubbleTableView   -  person Akarsh M    schedule 02.06.2014


Ответы (2)


Я обновил ваши функции, и теперь они работают так, как вы хотите:

private void appendSenderText(String message) {

    TextView msg = new TextView(ButtonsActivity.this);
    msg.setBackgroundResource(R.drawable.rectangle);
    msg.setText(message);
    msg.setPadding(10, 10, 10, 10);
    msg.setTextColor(getResources().getColor(R.color.white));
    LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(LayoutParams.WRAP_CONTENT,LayoutParams.WRAP_CONTENT);
    params.setMargins(5, 15, 0, 0);
    params.gravity = Gravity.LEFT;
    msg.setLayoutParams(params);
    msg.setGravity(Gravity.CENTER);
    LinearLayout chat = (LinearLayout) findViewById(R.id.chatLayout);
    chat.addView(msg);  
}

private void appendReceiverText(String message) {

    TextView msg = new TextView(ButtonsActivity.this);
    msg.setBackgroundResource(R.drawable.rectangle);
    msg.setText(message);
    msg.setPadding(10, 10, 10, 10);
    msg.setTextColor(getResources().getColor(R.color.white));
    LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(LayoutParams.WRAP_CONTENT,LayoutParams.WRAP_CONTENT);
    params.setMargins(0, 15, 5, 0);
    params.gravity = Gravity.RIGHT;
    msg.setLayoutParams(params);
    msg.setGravity(Gravity.CENTER);
    LinearLayout chat = (LinearLayout) findViewById(R.id.chatLayout);
    chat.addView(msg);  
}

Вы должны установить гравитацию TextView, чтобы расположить текст внутри TextView, и установить гравитацию в родительском элементе LinearLayout, чтобы установить положение TextView внутри LinearLayout.

Обратите внимание, что я использую LinearLayout вместо FrameLayout.

person joao2fast4u    schedule 02.06.2014

Используйте настраиваемые списки для заполнения строк чата.

Чтобы сделать текст чата в центре, добавьте эту строку.

msg.setGravity(Gravity.CENTER);

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

Я рекомендую вам использовать ListView с настраиваемым адаптером для заполнения строк чата. Легко добавить строки чата и обновить представление в ListViews. пройдите по этой ссылке . это даст вам основную идею.

person AndEngine    schedule 02.06.2014