设置宽度以匹配ConstraintLayout

时间:2016-06-02 23:32:14

标签: android android-constraintlayout

我想将View的左侧和右侧约束到它的父视图的边距,并使其填充分配的空间。但是,将宽度设置为match_parentwrap_content似乎会产生相同的结果。

是否有与match_constraints相当的东西(而不是match_parent和wrap_content)? match_parentwrap_content会影响布局,还是会在新约束布局中忽略它们?

为我最喜欢的平台爱好这个新的布局系统!

11 个答案:

答案 0 :(得分:148)

match_parent是不允许的。但实际上您可以将宽度和高度设置为0dp,并将“上”和“下”或“左”和“右”约束设置为“父”。

因此,例如,如果您希望对元素的宽度具有match_parent约束,则可以这样做:

<TextView
    android:layout_width="0dp"
    android:layout_height="wrap_content"
    app:layout_constraintStart_toStartOf="parent"
    app:layout_constraintEnd_toEndOf="parent"/>

答案 1 :(得分:84)

my $date = localtime($epoc); # scalar context print POSIX::strftime( '%a %b %e %Y %H:%M:%S', $date ), "\n"; # doesn't work my @date = localtime($epoc); # list context (notice the "@") print POSIX::strftime( '%a %b %e %Y %H:%M:%S', @date ), "\n"; # works 不受支持。使用match_parent,您可以将您的约束视为可扩展的&#39;而不是“填写什么?”

此外,0dp可以通过一个位置来定义,其中0dp依赖于它的父级位置(x,y和宽度,高度)

答案 2 :(得分:22)

显然match_parent是:

    直接在ConstraintLayout 下的观看次数
  • 不行
  • 确定,用于嵌套在ConstraintLayout
  • 正下方的视图中的视图

因此,如果您需要将视图用​​作match_parent,那么:

    {li> ConstraintLayout的直接孩子应使用0dp
  1. 嵌套元素 (例如,孙子到ConstraintLayout)可以使用match_parent
  2. 示例:

    <android.support.constraint.ConstraintLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:paddingBottom="16dp">
    
        <android.support.design.widget.TextInputLayout
            android:id="@+id/phoneNumberInputLayout"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            app:layout_constraintLeft_toLeftOf="parent"
            app:layout_constraintRight_toRightOf="parent">
    
            <android.support.design.widget.TextInputEditText
                android:id="@+id/phoneNumber"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"/>
    
        </android.support.design.widget.TextInputLayout>
    

答案 3 :(得分:13)

match_parent不支持

ConstraintLayout。将宽度设置为0dp以使其与约束匹配。

答案 4 :(得分:7)

来自official doc

  

重要提示:不建议将MATCH_PARENT用于a中包含的小部件   ConstraintLayout。可以通过使用来定义类似的行为   MATCH_CONSTRAINT与相应的左/右或上/下   约束被设置为“父”。

因此,如果你想要达到MATCH_PARENT效果,你可以这样做:

<TextView
    android:id="@+id/textView"
    android:layout_width="0dp"
    android:layout_height="wrap_content"
    android:gravity="center"
    android:text="TextView"
    app:layout_constraintEnd_toEndOf="parent"
    app:layout_constraintStart_toStartOf="parent" />

答案 5 :(得分:2)

为了使你的视图成为match_parent是不可能的,但是我们可以用一点点不同的方式来做,但是不要忘记使用Start和End的Left和Right属性,如果你使用RTL支持,那么它将会需要。

    <Button
android:layout_width="0dp"
android:layout_height="wrap_content"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintEnd_toEndOf="parent"/>

答案 6 :(得分:1)

设置宽度或高度(你需要匹配父项)到0dp并设置左,右,上,下的边距作为匹配父项

答案 7 :(得分:1)

在办公室文档中: https://developer.android.com/reference/android/support/constraint/ConstraintLayout

将尺寸设置为MATCH_CONSTRAINT时,默认行为是使生成的尺寸占用所有可用空间。

使用0dp,相当于“ MATCH_CONSTRAINT”

重要提示:不建议对ConstraintLayout中包含的窗口小部件使用MATCH_PARENT。可以通过使用MATCH_CONSTRAINT来定义类似的行为,并将相应的左/右或上/下约束设置为“父”

答案 8 :(得分:0)

您可以检查适配器。

public class Mode
{
    [Key] public int Id { get; set; }

    public ICollection<Plugin> Plugins { get; set; }
    public ICollection<Preset> Presets { get; set; }

    public string Name { get; set; }
}

public class Type
{
    [Key] public int Id { get; set; }

    public ICollection<Plugin> Plugins { get; set; } = new List<Plugin>();
    public ICollection<Preset> Presets { get; set; } = new List<Preset>();

    public string Name { get; set; }
    public string SubTypeName { get; set; }
}

public class Plugin
{
    [Key] public int Id { get; set; }
    public ICollection<Preset> Presets { get; set; } = new List<Preset>();

    public ICollection<Type> DefaultTypes { get; set; } = new List<Type>();
    public ICollection<Mode> DefaultModes { get; set; } = new List<Mode>();
}

public class Preset
{
    [Key] public string PresetId { get; set; } = Guid.NewGuid().ToString();

    [ForeignKey("Plugin")] public int PluginId { get; set; }

    public Plugin Plugin { get; set; }
    public ICollection<Type> Types { get; set; } = new List<Type>();
    public ICollection<Mode> Modes { get; set; } = new List<Mode>();
}

public class ApplicationDatabaseContext : DbContext
{
    // Constructor and further database initialization omitted for clarity

    protected override void OnModelCreating(DbModelBuilder modelBuilder)
    {

        modelBuilder.Entity<Plugin>()
            .HasMany(p => p.DefaultModes)
            .WithMany(q => q.Plugins)
            .Map(mc => mc.MapLeftKey("PluginId").MapRightKey("ModeId").ToTable("PluginModes"));

        modelBuilder.Entity<Plugin>()
            .HasMany(p => p.DefaultTypes)
            .WithMany(q => q.Plugins)
            .Map(mc => mc.MapLeftKey("PluginId").MapRightKey("TypeId").ToTable("PluginTypes"));


        modelBuilder.Entity<Preset>()
            .HasMany(p => p.Types)
            .WithMany(q => q.Presets)
            .Map(mc =>mc.MapLeftKey("PresetId").MapRightKey("TypeId").ToTable("PresetTypes"));

        modelBuilder.Entity<Preset>()
            .HasMany(p => p.Modes)
            .WithMany(q => q.Presets)
            .Map(mc => mc.MapLeftKey("PresetId").MapRightKey("ModeId").ToTable("PresetModes"));
    }

    public DbSet<Plugin> Plugins { get; set; }
    public DbSet<Preset> Presets { get; set; }
    public DbSet<Mode> Modes { get; set; }
    public DbSet<Type> Types { get; set; }
}

使用1时,我遇到了与您相同的问题。 您可以尝试2。

答案 9 :(得分:0)

如果要在父级中心放置TextView。.
您的主要布局是约束布局

<androidx.appcompat.widget.AppCompatTextView
     android:layout_width="0dp"
     android:layout_height="wrap_content"
     android:text="@string/logout"
     app:layout_constraintLeft_toLeftOf="parent"
     app:layout_constraintRight_toRightOf="parent"
     android:gravity="center">
</androidx.appcompat.widget.AppCompatTextView>

答案 10 :(得分:0)

当滚动视图中存在约束布局时,我找到了另一个答案,然后我们需要放置

android:fillViewport="true"

滚动视图

android:layout_height="0dp"

在约束布局中

示例:

<?xml version="1.0" encoding="utf-8"?>
<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:app="http://schemas.android.com/apk/res-auto"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:fillViewport="true">

    <androidx.constraintlayout.widget.ConstraintLayout
            android:layout_width="match_parent"
            android:layout_height="0dp">

// Rest of the views

</androidx.constraintlayout.widget.ConstraintLayout>

</ScrollView>