我需要一些关于Android布局的帮助。 我有以下代码:
<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<android.support.constraint.Guideline
android:id="@+id/guideline"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="vertical"
app:layout_constraintGuide_percent="0.5" />
<android.support.constraint.Guideline
android:id="@+id/guideline2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="vertical"
app:layout_constraintGuide_percent="0.725" />
<TextView
android:id="@+id/data_field_1_name"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginEnd="10dip"
android:layout_marginTop="10dip"
app:layout_constraintLeft_toLeftOf="@id/guideline"
app:layout_constraintRight_toLeftOf="@id/guideline2"
app:layout_constraintTop_toTopOf="parent"
tools:text="ACTIVE" />
<TextView
android:id="@+id/data_field_1_value"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginEnd="15dip"
android:layout_toEndOf="@id/data_field_1_name"
app:layout_constraintBaseline_toBaselineOf="@id/data_field_1_name"
app:layout_constraintLeft_toLeftOf="@id/guideline2"
app:layout_constraintRight_toRightOf="parent"
tools:text="1750" />
<TextView
android:id="@+id/data_field_2_name"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginEnd="10dip"
android:layout_marginTop="8dip"
app:layout_constraintLeft_toLeftOf="@id/guideline"
app:layout_constraintRight_toLeftOf="@id/guideline2"
app:layout_constraintTop_toBottomOf="@id/data_field_1_name"
tools:text="ACTIVE" />
<TextView
android:id="@+id/data_field_2_value"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginEnd="15dip"
android:layout_toEndOf="@id/data_field_2_name"
app:layout_constraintBaseline_toBaselineOf="@id/data_field_2_name"
app:layout_constraintLeft_toLeftOf="@id/guideline2"
app:layout_constraintRight_toRightOf="parent"
tools:text="1750" />
<TextView
android:id="@+id/data_field_3_name"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginEnd="10dip"
android:layout_marginTop="8dip"
app:layout_constraintLeft_toLeftOf="@id/guideline"
app:layout_constraintRight_toLeftOf="@id/guideline2"
app:layout_constraintTop_toBottomOf="@id/data_field_2_name"
tools:text="ACTIVE" />
<TextView
android:id="@+id/data_field_3_value"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginEnd="15dip"
android:layout_toEndOf="@id/data_field_3_name"
app:layout_constraintBaseline_toBaselineOf="@id/data_field_3_name"
app:layout_constraintLeft_toLeftOf="@id/guideline2"
app:layout_constraintRight_toRightOf="parent"
tools:text="1750" />
<TextView
android:id="@+id/value"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginEnd="15dip"
android:layout_marginStart="15dip"
android:textSize="25sp"
app:layout_constraintBaseline_toBaselineOf="@id/data_field_2_name"
app:layout_constraintHorizontal_bias="0.0"
app:layout_constraintLeft_toLeftOf="parent"
tools:text="17.40" />
<ImageView
android:id="@+id/flag"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginEnd="0dp"
android:layout_marginTop="2dp"
android:src="@drawable/ic_launcher_background"
app:layout_constraintEnd_toEndOf="@+id/unit"
app:layout_constraintStart_toStartOf="@+id/unit"
app:layout_constraintTop_toTopOf="parent" />
<android.support.v7.widget.AppCompatTextView
android:id="@+id/unit"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginStart="2dp"
android:gravity="center_horizontal"
app:layout_constraintBaseline_toBaselineOf="@id/value"
app:layout_constraintStart_toEndOf="@+id/value"
tools:text="KG" />
<TextView
android:id="@+id/label"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginStart="15dip"
app:layout_constraintBaseline_toBaselineOf="@id/data_field_3_name"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toLeftOf="@id/guideline"
tools:text="TOTAL" />
</android.support.constraint.ConstraintLayout>
输出为:configuration
我的问题是:如果主值(17.40)太大,那么该值应该“ellipsized”结束,但它会超过“活动”文本。
PS:单位和标志应始终显示在主值的末尾。
你能帮我提一下建议吗?我尝试了很多想法,但没有找到解决方案。
答案 0 :(得分:14)
0dp
<强>机器人:layout_width = “0dp”强>
Set Right_toRightOf
和Left_toRightOf
应用:layout_constraintLeft_toRightOf = “@ + ID / listingImageView”强> 应用:layout_constraintRight_toRightOf = “父”强> 应用:layout_constraintTop_toTopOf = “父”强>
答案 1 :(得分:2)
为此
1)你必须为此指定固定长度,textview width 0dp不会起作用。
2)你需要将ellipsize属性设置为&#34; end&#34;到textview。
3)以及maxlines属性设置为1。
经过测试并且工作正常。
您可以随意保留固定宽度。
<?php
header('Content-Type: text/csv; charset=utf-8');
header('Content-Disposition: attachment; filename=data.csv');
$output = fopen('php://output', 'w');
$rows = mysqli_query($db_conx, 'SELECT u.email as referrer, ref.email as referred from users u INNER JOIN users ref on u.ref_code=ref.ref_code_used');
$headers = "referrer, referred";
fputcsv($output, explode(', ', $headers));
while ($row = mysqli_fetch_assoc($rows)) {
fputcsv($output, $row);
}
fclose($output);
mysqli_close($db_conx);
exit();
?>
答案 2 :(得分:0)
假设您已将value
TextView
设置为ellipsize本身,您可以通过在TextView
完成布局后以编程方式设置ConstraintLayout
的最大宽度来解决此问题所有观点。
我创建了一个小应用程序,只是夸大了你在问题中发布的布局(尽管我必须将标志更改为我拥有的图像)。我将这些attrs添加到value
视图中:
android:maxLines="1"
android:ellipsize="end"
这是我的Java代码:
public class MainActivity extends AppCompatActivity {
private TextView value;
private TextView data2;
private TextView unit;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
value = (TextView) findViewById(R.id.value);
data2 = (TextView) findViewById(R.id.data_field_2_name);
unit = (TextView) findViewById(R.id.unit);
value.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {
@Override
public void onGlobalLayout() {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN) {
value.getViewTreeObserver().removeOnGlobalLayoutListener(this);
}
else {
value.getViewTreeObserver().removeGlobalOnLayoutListener(this);
}
setMaxWidth();
}
});
}
private void setMaxWidth() {
ViewGroup.MarginLayoutParams params = (ViewGroup.MarginLayoutParams) value.getLayoutParams();
int maxWidth = data2.getLeft() - value.getLeft();
int maxWidthConsideringUnits = maxWidth - unit.getWidth();
int maxWidthIncludingMargin = maxWidthConsideringUnits - params.getMarginEnd();
value.setMaxWidth(maxWidthIncludingMargin);
}
}
以下是一些截图:
答案 3 :(得分:0)
首先,您需要将android:ellipsize="end"
和android:maxLines="1"
添加到TextView android:id="@+id/value"
中。然后,您需要将 value 和 unit 添加到水平链中。将链的起点连接到父链的起点和终点,以达到准则android:id="@+id/guideline"
的起点/终点。
之后,值和单位将具有相同的宽度,并填充父起点和准则android:id="@+id/guideline"
之间的整个空间。要使宽度不同,您可以将android:layout_width="wrap_content"
设置为 unit ,也可以同时使用app:layout_constraintHorizontal_weight
代码可以像这样:
<TextView
android:id="@+id/value"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginEnd="15dip"
android:layout_marginStart="15dip"
android:textSize="25sp"
android:ellipsize="end"
android:maxLines="1"
app:layout_constraintBaseline_toBaselineOf="@id/data_field_2_name"
app:layout_constraintHorizontal_bias="0.0"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintHorizontal_chainStyle="packed"
app:layout_constraintEnd_toStartOf="@+id/unit"
tools:text="17.40000000" />
<android.support.v7.widget.AppCompatTextView
android:id="@+id/unit"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="2dp"
android:gravity="center_horizontal"
android:maxLines="1"
android:layout_marginEnd="8dp"
app:layout_constraintBaseline_toBaselineOf="@id/value"
app:layout_constraintStart_toEndOf="@+id/value"
app:layout_constraintEnd_toStartOf="@+id/guideline"
tools:text="KG" />
它看起来像这样: