经过大量的谷歌搜索后,我无法找到解决此问题的方法。我有这个布局:
<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视图看起来太大了。我想为布局设置最大宽度,并将表单绘制为居中。
答案 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