基本上我在mysql db中插入文本和新行字符,如下所示:
$message = 'Hello World' . "\n";
$message .= 'This is a test' . "\n";
$message .= 'Thanks;
在db中保存邮件时,我尝试将新行的值设置为\n
,\\n
,\\\n
,\\\\n
甚至是<br>
,而不是\n
然后在Android应用上使用了fromHtml
,但没有任何效果。
在db中,我可以看到有新行。
在Android应用程序上我希望有新的行字符,如果在TextView中显示,我尝试了各种各样的东西,但没有任何工作,我已经尝试过这样的事情:
String message = m.getMessage().toString();
message = message.replaceAll("\\n",
System.getProperty("line.separator"));
此处代替"\\n"
,我还尝试了"\\\n"
,"\n"
甚至"\\\\n"
和
Spanned html = Html.fromHtml(m.getMessage());
和
message.replaceAll("\n","<br />");
message.replaceAll("\r\n","<br />");
message.replaceAll("\r","<br />");
和
android:singleLine="false"
尝试了各种各样的事情,在TextView中我得到了这些排列的文本:
Hello WorldThis is a testThanks
Hello World\This is a test\Thanks
Hello World\nThis is a test\nThanks
这是我的完整代码:
public class MessageListAdapter extends BaseAdapter {
private Context context;
private List<ListMessage> messagesItems;
public MessageListAdapter(Context context, List<ListMessage> navDrawerItems) {
this.context = context;
this.messagesItems = navDrawerItems;
}
@Override
public int getCount() {
return messagesItems.size();
}
@Override
public Object getItem(int position) {
return messagesItems.get(position);
}
@Override
public long getItemId(int position) {
return position;
}
@SuppressLint("InflateParams")
@Override
public View getView(int position, View convertView, ViewGroup parent) {
/**
* The following list not implemented reusable list items as list items
* are showing incorrect data Add the solution if you have one
* */
ListMessage m = messagesItems.get(position);
LayoutInflater mInflater = (LayoutInflater) context
.getSystemService(Activity.LAYOUT_INFLATER_SERVICE);
// Identifying the message owner
if (messagesItems.get(position).isSelf()) {
// message belongs to you, so load the right aligned layout
convertView = mInflater.inflate(R.layout.list_item_message_right,
null);
} else {
// message belongs to other person, load the left aligned layout
convertView = mInflater.inflate(R.layout.list_item_message_left,
null);
}
TextView lblFrom = (TextView) convertView
.findViewById(R.id.lblMsgFromListMessage);
TextView lblTo = (TextView) convertView
.findViewById(R.id.lblMsgToListMessage);
lblFrom.setText(m.getFromName());
// Spanned html = Html.fromHtml(m.getMessage());
// String message = html.toString();
String message = m.getMessage().toString();
message = message.replaceAll("\\n",
System.getProperty("line.separator"));
try {
lblTo.setText(message);
} catch (Exception e) {
lblTo.setText(message);
}
return convertView;
}
}
布局中的TextView:
<TextView
android:id="@+id/lblMsgToListMessage"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginRight="50dp"
android:background="@drawable/chat_bg_msg_from"
android:paddingBottom="@dimen/five_dp"
android:paddingLeft="@dimen/ten_dp"
android:paddingRight="@dimen/ten_dp"
android:paddingTop="@dimen/five_dp"
android:textColor="@color/chat_title_gray"
android:textSize="@dimen/eighteen_sp" />
baseAdaptor
出了什么问题?在某个地方,我看到this link,它建议SimpleAdapter
设置问题html,但就我而言,由于我使用的是BaseAdapter
,因此无法提供帮助。
我真的非常感谢你的帮助,因为我已经浪费了五个小时来解决这个问题:(
答案 0 :(得分:1)
尝试:
message = message.replaceAll("\\n", " ");
或(仅当输入中确实存在双反斜杠时)
message = message.replaceAll("\\n", " ");
更新:由于sql数据库已删除(转义)搜索字符串(\n
),因此替换无法正常工作。 This answer提供了一种解决方法,其中包括在unescape
上设置字符串之前运行TextView
。