假设我有一个动态 HTML 元素(aspan或div其他),里面有一个句子或一段文本,如下所示:

现在,如果我把句子稍微长一点,可能需要额外一行,如下所示:

请注意最后一个单词是如何在单独的一行上的。所以前两行已满。从某种意义上说,它们占据了该元素中的全部可用空间。第三行仅包含一个单词,并且大部分内容为空。
我发现这相当令人不安,我想知道是否有一个技巧可以在所有行之间更均匀地分配可用空间。我的意思是这样的:(请注意,这是完全相同的句子)

它应该根据字体和浏览器视图大小以及元素的宽度(可能取决于屏幕分辨率)自动重新流动。
有一些聪明的 HTML5 或 CSS3 方法来实现这一点吗?
在搜索和查找与此问题类似的主题时,我确实找到了text-align: justify我熟悉的属性,但并不是我真正想要的。
text-align: justify倾向于通过增加单词之间的空白来将所有行扩展到包含元素的完整位置。
相反,我真正想要的是重新分配单词的东西,以便所有行都更窄,即不占用所有水平元素空间。以某种方式导致所有线都等宽(或尽可能接近)。
所以我的意思不是这样:(就是这样text-align:justify)

将此与上面的前面的示例进行比较。
Unity 版本: 5.6.5f1 个人版
TextMesh 专业版: 1.0.56.0b3
我有一个 TextMesh Pro UI Text 对象,其区域与 UI 图像的区域相交。文字是动态的,但图像永远不会改变。有没有办法让 TextMesh Pro UI 文本在图像周围流动,类似于文本在 HTML/CSS 中环绕到一侧的方式?
下图显示了 Unity 中对象的两个副本。一个对象,用图像所在的红色空间表示,是我目前得到的。文本进入图像的空间。另一个对象,由图像所在的蓝色空间表示,显示文本正确环绕的所需结果。
当前与预期结果:

迄今为止的研究:
如何将图像放入文本中?- 我使用的图像是 UI 图像,而不是文本资产。图像将只充当好像它是内联与文本。
你如何在矩形周围环绕文本?, Unity UI 的流体布局- 这些是我正在寻找的。但是,没有在其中发布任何建议。
我探索了使用多个 TextMesh Pro UI 文本对象的想法,每个对象都充当完整文本区域的一个片段。但是,这与在图像周围环绕文本不同。对于动态文本,如果我从一个文本区域拉取内容并将其推入下一个区域,这将与自动调整大小功能冲突并导致字体大小不等。
另一种可能性是我可以一次插入一个字符,检查添加另一个字符是否会导致与图像发生冲突,然后添加System.Environment.Newline以防止这种情况发生。但是,我担心处理大量文本会带来潜在的性能问题。
TextMesh Pro 文档- TextMesh Pro 文档有一些用于查找自动换行点的工具,但我还没有想出如何实现将其与另一个对象的锚点位置进行比较的方法。
我正在使用 TextFlow 和一些文本项目来显示样式文本,但我找不到为文本项目设置简单背景颜色的方法。
我可以设置填充颜色和字体,但它没有设置其背景颜色的 java 方法或 css 属性。
我目前正在使用 JavaFX'Text和TextFlow布局,我需要弄清楚如何将Text节点放在TextFlow. 如下图所示,我添加了一些ImageView's 来模拟我想要添加的表情符号。
问题是,它们的对齐方式不同。当表情符号居中时,文本保持在底部。
绿色边框线代表TextFlow的边框,蓝色边框线代表的边框Text。
我已经尝试将 Text 的textOrigin属性设置为CENTER,但在我的情况下它不会改变任何东西。设置textAlignment为CENTER也不起作用。
这是我的代码摘录:
public CChatMessage(String senderName, String messageText)
{
this.sender = new Label(senderName);
this.sender.setTextAlignment(TextAlignment.CENTER);
this.sender.setFont(Font.font("Verdana", FontWeight.EXTRA_BOLD, 14));
this.message = new Text(messageText);
this.message.setTextAlignment(TextAlignment.CENTER);
this.message.setTextOrigin(VPos.CENTER);
this.setEffect(new DropShadow());
this.setAlignment(Pos.CENTER);
this.setPadding(new Insets(0, 10, 10, 10));
TextFlow messagePane = new TextFlow();
messagePane.setStyle("-fx-border-color: green");
messagePane.setTextAlignment(TextAlignment.CENTER);
Image smileyImage = new Image("/resources/smiley.png");
messagePane.getChildren().addAll(this.message, new ImageView(smileyImage), new ImageView(smileyImage), new ImageView(smileyImage), …Run Code Online (Sandbox Code Playgroud) 我想使用 TextFlow 显示一些格式化文本。以前,我使用了一个简单的 Label(将 wrapText 设置为 true)来显示该文本(未格式化),但想要使用一个库来提供我想使用 TextFlow 显示的文本列表。
我的问题是我要显示的文本大于可用区域。当空间不足时,标签会切断文本。这很好用。不幸的是 TextFlow 没有。当文本变得太长时,它会溢出 TextFlow 所在的区域。相邻的 TextFlow 会相互重叠。我怎样才能模仿标签的行为?
可以在此处和下方找到 MWE 。我使用带有两列的 GridPane。左侧三个 TextFlow,右侧三个标签。所有六个元素的显示文本都相同。它产生这个窗口:
如您所见,左侧(在 TextFlows 中)的文本重叠。
我试过了,没有成功:
爪哇:
package sample;
import javafx.application.Application;
import javafx.fxml.FXML;
import javafx.fxml.FXMLLoader;
import javafx.scene.Parent;
import javafx.scene.Scene;
import javafx.scene.control.Label;
import javafx.scene.text.Text;
import javafx.scene.text.TextFlow;
import javafx.stage.Stage;
public class Main extends Application {
@FXML
private TextFlow textFlow0;
@FXML
private TextFlow textFlow1;
@FXML
private TextFlow textFlow2;
@FXML
private Label label0;
@FXML
private Label label1;
@FXML
private Label label2; …Run Code Online (Sandbox Code Playgroud) 我使用TextFlow对象作为CheckBoxTextItem的图形节点(来自controlsFX).如果TextFlow对象的长度超过树视图的宽度,则会被包装.我怎么能停止包装?或设置类似于省略号的字符串 - 就像你可以用标签做的那样?
文本流对象由Text对象组成.
我做了一个TextFlow,因为我需要使用多个字体姿势(我已将特定的"文本"设置为斜体或正常).一旦我显示TextFlow,它就不可选择/可复制.我需要的是TextFlow一旦在场景中显示就可以选择,因此它可以复制/粘贴.
带有font-posture的文本示例(仅举例一个例子):
Text volumeText = new Text(volume.getText());
volumeText.setFill(Color.WHITE);
volumeText.setFont(Font.font("arial", FontPosture.ITALIC, 13));
TextFlow reference = new TextFlow(
lastNameText, miscelanous1, firstNameText, miscelanous2);
reference.setLayoutX(115);
reference.setLayoutY(480);
reference.setMaxWidth(500);
control.getChildren().add(reference);
Run Code Online (Sandbox Code Playgroud) 我从JavaFX 8开始阅读,您可以使用TextFlow来突出显示文本.但我不知道如何将它用于我的TableView.在我的控制器类中,我有这个:
TableView<Person> tvPerson;
TableColumn<Person, String> tcName;
ObservableList<Person> personList;
tcName.setCellValueFactory(new PropertyValueFactory<Person, String>("name"));
tvPerson.setItems(personList);
Run Code Online (Sandbox Code Playgroud)
这是内容类:
public class Person {
private final SimpleStringProperty name = new SimpleStringProperty("");
public Person(String name) {
setName(name);
}
public String getName() {
return name.getValue();
}
public void setName(String t) {
name.set(t);
}
}
Run Code Online (Sandbox Code Playgroud)
感谢帮助!
我使用“JavaFX Scene Builder”为我的应用程序创建了一个 UI。
我需要在 TextFlow 对象中显示文本,所以在我的类中(实现 javafx.fxml.Initializable )我写了这个
public void initialize(URL location, ResourceBundle resources)
{
Text t1 = new Text("My name is Josh!");
tofl = new TextFlow(t1);
}
Run Code Online (Sandbox Code Playgroud)
这样我的 TextFlow 对象根本不显示文本。我要呼吁的方法tofl一样tofl.apply(),让文字显示?
TextFlow 被初始化为方法上方的一个字段,它也都与 fxlm 文件相关联。使用 TextArea 一切正常。
使用下面的代码将 javafx 阿拉伯语文本流文本写入屏幕会产生奇怪的字符,单词之间的空格字符似乎变得混乱。请参阅下面的屏幕截图。
\n\n这个问题只发生在我的 OS X sierra MacBook 上,而不是 debian 操作系统上。\n用英文空格替换空格不会执行任何操作。
\n\n\n\n代码:
\n\nshort_hadith = " \xe2\x80\x8f.\xe2\x80\x8f \xd9\x82\xd9\x8e\xd8\xa7\xd9\x84\xd9\x8e \xd9\x81\xd9\x8e\xd8\xb5\xd9\x90\xd8\xb1\xd9\x92\xd8\xaa\xd9\x8f \xd8\xa5 \xd9\x90\xd9\x84\xd9\x8e\xd9\x89 \xd8\xa7\xd9\x84\xd9\x8e\xd9\x91\xd8\xb0\xd9\x90\xd9\x8a \xd9\x82\xd9\x8e \xd8\xb5\xd9\x84\xd9\x89 \xd8\xa7\xd9\x84\xd9\x84\xd9\x87 \xd8\xb9\xd9\x84\xd9\x8a\xd9\x87 \xd9\x88\xd8\xb3\xd9\x84\xd9\x85 \xe2\x80\x8f.\xe2\x80\x8f";\ntext1=new Text(sanad_0);\ntext1.setStyle("-fx-font-size: 59; -fx-fill: white; ");\ntext2=new Text( short_hadith + "\\n");\ntext2.setStyle("-fx-font-size: 59; -fx-fill: goldenrod ; ");\ntext3=new Text(hadith_reference + "\\n");\ntext3.setStyle("-fx-font-size: 25; -fx-fill: white; ");\ntext4 = new Text(ar_moon_notification + "\\n");\ntext4.setStyle("-fx-font-size: 40; -fx-fill: white; ");\ntext5 = new Text("\xd9\x8a\xd8\xb1\xd8\xac\xd9\x89 \xd9\x85\xd9\x84\xd8\xa7\xd8\xad\xd8\xb8\xd8\xa9 \xd8\xa3\xd9\x86 \xd9\x87\xd8\xb0\xd8\xa7 \xd9\x8a\xd9\x82\xd9\x88\xd9\x85 \xd8\xb9\xd9\x84\xd9\x89 \xd8\xad\xd8\xb3\xd8\xa7\xd8\xa8\xd8\xa7\xd8\xaa \xd8\xa7\xd9\x84\xd8\xaa\xd9\x82\xd9\x88\xd9\x8a\xd9\x85");\ntext5.setStyle("-fx-font-size: 25; -fx-fill: white; "); \nhadith_flow.setTextAlignment(TextAlignment.RIGHT);\nhadith_flow.setStyle("-fx-line-spacing: 20px; fitToWidth: true;"); …Run Code Online (Sandbox Code Playgroud) 我正在尝试在我的应用程序中创建一个记事本屏幕。创建注释后,它们将被锁定且无法编辑,但是可以将新页面添加到注释中。
我认为使用 TextFlow 可以很好地控制这一点。我想做的是:
**Note Taker Name**
**Date of Note**
Line of Note Text
Line of Note Text
Line of Note Text
Line of Note Text
------------------------------------------
**Note Taker Name**
**Date of Note**
Line of Note Text
Line of Note Text
Line of Note Text
Line of Note Text
Run Code Online (Sandbox Code Playgroud)
我已经尝试过这种方式:
String s1 = "line of text";
textFlow.getChildren().add(new Text(s1));
textFlow.getChildren().add(new Text(System.lineSeparator()));
textFlow.getChildren().add(new Separator(Orientation.HORIZONTAL));
textFlow.getChildren().add(new Text(System.lineSeparator()));
textFlow.getChildren().add(new Text(s1));
scrollPane.setFitToWidth(true);
Run Code Online (Sandbox Code Playgroud)
这几乎为我提供了我想要的东西,除了分隔符只是一条细线。我希望该线穿过整个 TextFlow,但我不太确定如何去做。
谢谢。