4

プログラムで textView を作成する際に問題があります。私はそれを解決する方法を本当に知りません。

ここに画像の説明を入力

問題は次のとおりです。

-マージン、TextViewが互いにくっつきたくありません。

- タイトルのようにテキストがドローアブルの中央に配置されていない

- Nickname ユーザーのメッセージを右に、Nick のメッセージを左に配置したい。

このために、次の 2 つの関数があります。

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 ファイルで、gravity ではなく layout_gravity を指定していることに気付きました。

編集:あなたが提案したようにListViewを使用しましたが、すべて正常に動作していますが、テキストが中央に配置されていないという問題がまだありますmsg.setGravity(gravity.CENTER);

これが私の丸みを帯びた四角形のxmlファイルです。XMLファイルでTextviewを作成するとテキストが中央に配置され、プログラムで作成したい場合はそうではありません。

ここに画像の説明を入力

これが私のドローアブルのコードです。

<?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;
    }
4

2 に答える 2

12

私はあなたの機能を更新しました、そしてそれは今あなたが望むように働いています:

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には親に重力を設定する必要があります。LinearLayoutTextViewLinearLayout

LinearLayoutの代わりに aを使用していることに注意してくださいFrameLayout

于 2014-06-02T10:02:04.547 に答える
1

カスタム リストビューを使用して、チャット ラインに入力します。

チャット テキストを中央に配置するには、次の行を追加します。

msg.setGravity(Gravity.CENTER);

あなたのフレーム レイアウトは、テキストビューを互いに近づけると思います。

ListView とカスタム アダプターを使用して、チャット ラインに入力することをお勧めします。チャット ラインを追加し、ListViews でビューを更新するのは簡単です。このリンクをチェックしてください。それはあなたに基本的な考えを与えるでしょう。

于 2014-06-02T09:31:02.243 に答える