我想将View的左侧和右侧约束到它的父视图的边距,并使其填充分配的空间。但是,将宽度设置为match_parent
或wrap_content
似乎会产生相同的结果。
是否有与match_constraints相当的东西(而不是match_parent和wrap_content)? match_parent
和wrap_content
会影响布局,还是会在新约束布局中忽略它们?
为我最喜欢的平台爱好这个新的布局系统!
答案 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
,那么:
ConstraintLayout
的直接孩子应使用0dp
match_parent
示例:
<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>