如何使用 android:maxWidth?

Posted

技术标签:

【中文标题】如何使用 android:maxWidth?【英文标题】:How to use android:maxWidth? 【发布时间】:2012-11-24 22:44:28 【问题描述】:

我想设置编辑框的最大宽度。所以我创建了这个小布局:

<LinearLayout 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_ 
    android:layout_ 
    android:maxWidth="150dp" > 

    <EditText 
        android:layout_ 
        android:layout_ 
        android:ems="10" /> 
</LinearLayout> 

但它不起作用,盒子无论如何可能超过 150 dp。 android:maxWidth="150dp" 中的 EditText 将给出相同的结果。我已阅读 (maxWidth doesn't work with fill_parent) 将最大和最小宽度设置为相同大小应该可以解决它:

<EditText
        android:layout_
        android:layout_
        android:ems="10"
        android:maxWidth="50dp"
        android:minWidth="50dp" />

但事实并非如此。

我在这里找到了解决问题的方法: Setting a maximum width on a ViewGroup 这很好用。但我想maxWidth 属性在这里是出于我的原因。应该如何使用?或者有这方面的任何文件吗?我在这个问题上花了几个小时,仍然不明白如何使用这个简单的属性。

【问题讨论】:

提示:android:width 是设置android:maxWidthandroid:minWidth 的快捷方式 【参考方案1】:

我想设置编辑框的最大宽度。

在你的例子中:

<EditText 
    android:layout_ 
    android:layout_ 
    android:ems="10" /> 

layout_widthems 属性试图设置相同的值。 Android 似乎选择了较大的fill_parent 值而忽略了另一个。当你使用这个时:

<EditText
    android:layout_
    android:layout_
    android:ems="10"
    android:maxWidth="50dp"
    android:minWidth="50dp" />

这里emsmaxWidth 试图设置相同的值,再次使用更大的值。因此,根据您的实际需要,您可以使用:

<EditText 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_ 
    android:layout_ 
    android:ems="10" /> 

如果您更喜欢使用 dp,请将 android:ems="10" 替换为 android:maxWidth="50dp"

最后,您的 LinearLayout 只有一个子元素 EditText。通常,发生这种情况时,您可以删除 LinearLayout 标签并单独使用 EditText。

【讨论】:

谢谢,这或多或少是预期的 :-)。但它没有:-(。如果我将我的 LinearLayout 标签更改为你的标签,我仍然会在编辑框上获得宽度,无论我在 maxWidth 属性上放置哪个值:-(。我真的很困惑。 我看错了你的问题,所以我重新回答了。您使用的设备有多大? 坦率地说,我不知道 ems 属性是干什么用的,我希望在我问问题之前检查一下 :-)。为了解决我的问题,我应该:删除 ems-tag,将 android:layout_width 设置为“wrap_content”,并将 minWidth 和 maxWidth 设置为最大宽度。这就提出了另一个问题:minWidth 的目的是什么?如果我没有为 minWidth 设置值,maxWidth 属性似乎被忽略了。如果我将一个小于 maxWidth 的值设置为 minWidth,则使用 minWidth。我的问题解决了,我有点聪明了,但对所有这些属性还是有点困惑:-)。 从我看到的minWidthlayout_width="wrap_content"(和ems)都设置了基本值,它类似于maxWidth,但Android选择最小的 其中的价值。这就是为什么如果您设置 layout_width="wrap_content"maxWidth="500dp"minWidth="500dp" 布局将是 500dp 宽,除非屏幕小于 500dp。【参考方案2】:

对于近年来看到这个问题的人,我们现在有app:layout_constraintWidth_max="225dp"。将您的布​​局放在约束布局中,并在您想要最大宽度的视图上使用它。

【讨论】:

以上是关于如何使用 android:maxWidth?的主要内容,如果未能解决你的问题,请参考以下文章

ImageView最大高度和宽度失效解决方案

在 ViewGroup 上设置最大宽度

ImageView

控件ImageView

Android中ImageView的最大宽度和高度

android textview 设置单行最大宽度和ellipsize省略号时整体变短的问题