我在以编程方式创建textView时遇到了一些问题。我真的不知道如何解决它。
问题是:
- 边距,我不希望我的TextView相互粘连。
- 文字不在标题
中的drawable中心- 我希望Nickname用户的消息在右边对齐,而Nick的消息在左边对齐。
为此我有这两个功能:
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而不是gravity。
编辑:我按照你的建议使用了ListView,一切正常但我仍然遇到这个问题,文本没有居中,尽管我使用了msg.setGravity(gravity.CENTER);
也许我的drawable有问题。
这是我舍入的rectanngle的xml文件。这很奇怪,当我在XML文件中创建Textview时,文本居中,当我想以编程方式创建时,情况并非如此。
这是我的drawable的代码。
<?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;
}
答案 0 :(得分: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
内,并在父LinearLayout
中设置重力以设置TextView
在LinearLayout
内的位置1}}。
请注意,我使用LinearLayout
代替FrameLayout
。
答案 1 :(得分:1)
使用自定义列表视图填充聊天行。
要使聊天文本位于中心,请添加此行。
msg.setGravity(Gravity.CENTER);
我相信你的框架布局会让文字视图相互靠近。
我建议您使用ListView和自定义适配器来填充聊天行。它很容易添加聊天行并更新ListViews中的视图。 check this link。它会给你一个基本的想法。