如何设置布局的最大宽度

时间:2012-01-15 20:21:58

标签: android android-layout android-linearlayout

经过大量的谷歌搜索后,我无法找到解决此问题的方法。我有这个布局:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
          android:id="@+id/adlayout"
          android:layout_width="fill_parent"
          android:layout_height="fill_parent"
          android:orientation="vertical">
<TableLayout
   xmlns:android="http://schemas.android.com/apk/res/android"
   android:orientation="vertical"
   android:layout_width="fill_parent"
   android:layout_height="wrap_content"
   android:stretchColumns="1"
   android:layout_weight="1"
  >

  <TableRow android:id="@+id/tableRow1" android:layout_width="fill_parent"   android:layout_height="wrap_content">
       <TextView android:padding="6dip" android:text="@string/barcode_format"  android:id="@+id/textView1" android:layout_width="wrap_content"   android:layout_height="wrap_content"></TextView>
       <EditText android:padding="6dip" android:layout_width="fill_parent" android:id="@+id/edit_barcode_format" android:layout_height="wrap_content"></EditText>
  </TableRow>
  <TableRow android:id="@+id/tableRow1" android:layout_width="fill_parent" android:layout_height="wrap_content">
      <TextView android:padding="6dip" android:text="@string/barcode_type" android:id="@+id/textView2" android:layout_width="wrap_content" android:layout_height="wrap_content"></TextView>
      <EditText android:padding="6dip" android:layout_width="fill_parent" android:id="@+id/edit_barcode_type" android:layout_height="wrap_content"></EditText>
  </TableRow>        
 </TableLayout>


</LinearLayout>

表格布局定义了一个表格。在手机上看起来不错,但在平板电脑上,edittext视图看起来太大了。我想为布局设置最大宽度,并将表单绘制为居中。

6 个答案:

答案 0 :(得分:44)

保持不同的布局文件为@Devunwired建议是正确的,但是,它增加了项目的复杂性(如果设计师重新设计视图布局,您必须维护多个文件)。

如果您只需要改变按钮的宽度,我建议如下。将一个xml文件保留在布局文件夹中,并为其指定值

<LinearLayout
    style="@style/width_match_parent_max_200"
    android:layout_height="wrap_content">

values-w600dp / styles.xml包含

<resources>
    <style name="width_match_parent_max_200">
        <item name="android:layout_width">200dp</item>
    </style>
</resources>

values / styles.xml包含

<resources>
    <style name="width_match_parent_max_200">
        <item name="android:layout_width">match_parent</item>
    </style>
</resources>

编辑:注意文件夹是值-w600dp而不是值-600dp

答案 1 :(得分:13)

处理您的情况的适当方法是创建一个单独的布局文件,以便在使用手机的现有文件时优化平板电脑的表单视图。您可以通过创建单独的res / layout目录来实现此目的,其中包含与屏幕大小和/或分辨率相关的限定符。

您可以阅读有关可用资源限定符here的更多信息。这里有很多选择,我会留给您选择最适合您的应用程序,但这是一个简单的例子:

我们假设您当前的布局文件是 form.xml

将现有布局文件放在 res / layout / form.xml 中。这将使其成为默认布局。

创建另一个文件并将其放在 res / layout-large / form.xml 中。该布局文件将用于物理屏幕尺寸> gt的设备上。 〜5“(所有标准平板电脑)。为了解决您的问题,我修改了您的默认布局,以显示水平居中的表格,只占屏幕宽度的60%:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/adlayout"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="horizontal"
    android:gravity="center_horizontal"
    android:weightSum="1" >

    <TableLayout
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_weight="0.6"
        android:stretchColumns="1" >

        <TableRow android:id="@+id/tableRow1">

            <TextView
                android:id="@+id/textView1"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:padding="6dip"
                android:text="Barcode Format" >
            </TextView>

            <EditText
                android:id="@+id/edit_barcode_format"
                android:layout_width="fill_parent"
                android:layout_height="wrap_content"
                android:padding="6dip" >
            </EditText>
        </TableRow>

        <TableRow android:id="@+id/tableRow1">

            <TextView
                android:id="@+id/textView2"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:padding="6dip"
                android:text="Barcode Type" >
            </TextView>

            <EditText
                android:id="@+id/edit_barcode_type"
                android:layout_width="fill_parent"
                android:layout_height="wrap_content"
                android:padding="6dip" >
            </EditText>
        </TableRow>
    </TableLayout>

</LinearLayout>

此更改使用layout_weight的{​​{1}}和weightSum属性,告知表格仅填充其父级的60%(LinearLayout)。这比尝试设置最大宽度更有效,尤其是当设备具有可变分辨率和宽高比时。

仅供参考,我还试图删除你在XML中除了创建混乱(例如多个layout_weight=0.6声明)之外什么也没做的任何不必要的属性。其中一项更改是从xmlns:android子项中删除额外的layout_参数,因为TableLayout无论如何都会忽略所有这些参数,并强制其子项使用某些约束。来自Docs:

  

TableLayout的子节点无法指定layout_width属性。宽度始终为MATCH_PARENT。但是,layout_height属性可以由子项定义;默认值为WRAP_CONTENT。如果孩子是TableRow,那么身高始终是WRAP_CONTENT。

您可以详细了解TableLayout in the SDK docs

HTH

答案 2 :(得分:3)

使用ConstraintLayout。在其中,您可以将以下属性用于最小/最大宽度/高度:

  • app:layout_constraintWidth_min
  • app:layout_constraintWidth_max
  • app:layout_constraintHeight_min
  • app:layout_constraintHeight_max

请不要忘记设置视图的宽度/高度以匹配约束(0dp)。

答案 3 :(得分:2)

您必须创建一个从LinearLayout扩展的新ViewGroup,并将其限制为您想要的宽度。请参阅this answer

答案 4 :(得分:0)

BoundedViews library可帮助您设置maxWidth / maxHeight

的约束

答案 5 :(得分:-17)

查看链接或只设置值

      android:layout_width="fill_parent"
      android:layout_height="fill_parent"

http://developer.android.com/guide/practices/screens_support.html