我在以编程方式创建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);
Maybe我的drawable有问题.
这是我的圆形rectanngle的xml文件.这很奇怪,当我在XML文件中创建Textview时,文本居中,当我想以编程方式创建时,情况并非如此.
这是我的drawable的代码.
这里是我创建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; }
joao2fast4u.. 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
.
请注意,我使用的是a LinearLayout
而不是a FrameLayout
.
我更新了您的功能,它现在可以正常工作:
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
.
请注意,我使用的是a LinearLayout
而不是a FrameLayout
.