ConstraintLayout子项未在父视图中正确对齐

时间:2017-07-25 00:55:51

标签: java android

我想在父视图中有两个文本框,一个在左边有静态文本,另一个包含信息。我希望信息文本在水平方向上占用尽可能多的空间,但不要与ConstraintLayout可能的标题重叠。标题显示正常,但我无法将信息文本框与屏幕右侧对齐,不确定问题是什么。我正在使用ConstraintLayout 1.0.2,我认为它是最新版本。

这是ConstraintLayout的xml文件。

<?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"
    android:id="@+id/information"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:minHeight="40dp"
    android:paddingStart="20dp"
    android:paddingEnd="20dp">

    <TextView
        android:id="@+id/title"
        android:layout_width="wrap_content"
        android:layout_height="match_parent"
        android:gravity="center"
        android:text="@string/error_layout"
        android:textSize="16sp"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintLeft_toLeftOf="parent"
        app:layout_constraintTop_toTopOf="parent" />

    <TextView
        android:id="@+id/summary"
        android:layout_width="wrap_content"
        android:layout_height="match_parent"
        android:gravity="center|end"
        android:text="@string/error_layout"
        android:textSize="16sp"
        android:ellipsize="end"
        android:maxLines="1"
        android:background="@color/accent"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintRight_toRightOf="parent"
        app:layout_constraintTop_toTopOf="parent" />

</android.support.constraint.ConstraintLayout>

这是我用来创建新视图的类。

public class InformationView extends RelativeLayout {
    public InformationView(Context context, String title, String summary, int color) {
        super(context);

        LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        View view = inflater.inflate(R.layout.view_information, null);
        addView(view);

        setBackgroundColor(color);

        TextView titleView = (TextView) view.findViewById(R.id.title);
        TextView summaryView = (TextView) view.findViewById(R.id.summary);

        titleView.setText(title);
        summaryView.setText(summary);
    }
}

这是我添加视图的地方。

    LinearLayout information = (LinearLayout) findViewById(R.id.information);
    InformationView packageView = new InformationView(context, getString(R.string.package_layout), appInfo.getAPK(), getResources().getColor(R.color.grey));
    InformationView versionView = new InformationView(context, getString(R.string.version_layout), appInfo.getVersion(), getResources().getColor(R.color.grey_dark));
    InformationView appSizeView = new InformationView(context, getString(R.string.size_layout), getString(R.string.development_layout), getResources().getColor(R.color.grey));
    InformationView cacheSizeView = new InformationView(context, getString(R.string.cache_size_layout), getString(R.string.development_layout), getResources().getColor(R.color.grey_dark));
    InformationView dataFolderView = new InformationView(context, getString(R.string.data_layout), appInfo.getData(), getResources().getColor(R.color.grey));
    InformationView sourceFolderView = new InformationView(context, getString(R.string.source_layout), appInfo.getSource(), getResources().getColor(R.color.grey_dark));
    informations.addView(packageView);
    informations.addView(versionView);
    informations.addView(appSizeView);
    informations.addView(cacheSizeView);
    informations.addView(dataFolderView);
    informations.addView(sourceFolderView);

这就是视图的样子。第二个文本框似乎与第一个文本框对齐,即使它应该在右边。

alignment issue

1 个答案:

答案 0 :(得分:0)

summary视图中,将宽度更改为0dp并添加constraintLeft。你最终会这样:

<TextView
    android:id="@+id/summary"
    android:layout_width="0dp"
    android:layout_height="match_parent"
    android:gravity="center|end"
    android:text="@string/error_layout"
    android:textSize="16sp"
    android:ellipsize="end"
    android:maxLines="1"
    android:background="@color/accent"
    app:layout_constraintBottom_toBottomOf="parent"
    app:layout_constraintRight_toRightOf="parent"
    app:layout_constraintLeft_toRightOf="@+id/title"
    app:layout_constraintTop_toTopOf="parent" />