我有一个垂直线性布局,有许多线性布局(水平),占据了平板电脑的左侧
如果我在嵌套布局上使用权重
,我会收到有关嵌套权重的警告我似乎无法让事情看起来一致 - 我希望它们占据屏幕尺寸的100%
但是在一个小的5英寸屏幕上并没有显示所有项目,而在10英寸的大屏幕上,它们只占据了屏幕的30%
我想做什么?
这是小型平板电脑的样子(请注意底部物品被切断)
以下是10英寸平板电脑的样子(注意它不再占据整面)
<LinearLayout
android:id="@+id/sidebar_linlay1"
android:layout_width="0dp"
android:layout_weight=".2"
android:layout_height="match_parent"
android:orientation="vertical" >
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal" >
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Name" />
<EditText
android:id="@+id/text_name"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:ems="10"
android:inputType="text" />
</LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal" >
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Address" />
<EditText
android:id="@+id/text_streetnum_2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:ems="10"
android:inputType="number" />
<EditText
android:id="@+id/text_streetname_2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:ems="10"
android:inputType="text" >
<requestFocus />
</EditText>
</LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal" >
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="City" />
<EditText
android:id="@+id/text_city"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:ems="10"
android:inputType="textPostalAddress" />
</LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal" >
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Zip" />
<EditText
android:id="@+id/text_zip"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:ems="10"
android:inputType="number" />
</LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal" >
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Email" />
<EditText
android:id="@+id/edittext_email"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:ems="10"
android:imeOptions="actionDone"
android:inputType="textEmailAddress" />
</LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal" >
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Type" />
<Spinner
android:id="@+id/spin_status"
android:layout_width="wrap_content"
android:padding="0dip"
android:layout_height="10dp" />
</LinearLayout>
<EditText
android:id="@+id/map_notes"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:ems="10"
android:inputType="textMultiLine"
android:text="notes" />
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal" >
<Button
android:id="@+id/but_ClientForm"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Open Contract" />
<Button
android:id="@+id/but_saveData"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Save Changes" />
</LinearLayout>
</LinearLayout>
答案 0 :(得分:0)
以下是一些建议:
您可以使用配置限定符执行此操作。下面是一个示例:/res/layout
文件夹中的小屏幕有默认布局。现在,如果您想为更大的屏幕设置不同的布局,可以创建布局的变体并将其放在不同的文件夹中;例如/res/layout-w600dp
包含最小宽度为600dp的设备的布局。
请参阅Android开发者的此页面:
Supporting Multiple Screens | Android Developers
ScrollView
然后,至少您的用户可以滚动查看布局中的所有视图。
Space
视图。这是我用来在大型设备上垂直传播视图的技巧。例如:
<LinearLayout
android:id="@+id/sidebar_linlay1"
android:layout_width="0dp"
android:layout_weight=".2"
android:layout_height="match_parent"
android:orientation="vertical" >
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal" >
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Name" />
<EditText
android:id="@+id/text_name"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:ems="10"
android:inputType="text" />
</LinearLayout>
<Space
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1" />
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal" >
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Address" />
<EditText
android:id="@+id/text_streetnum_2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:ems="10"
android:inputType="number" />
<EditText
android:id="@+id/text_streetname_2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:ems="10"
android:inputType="text" >
<requestFocus />
</EditText>
</LinearLayout>
<Space
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1" />
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal" >
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="City" />
<EditText
android:id="@+id/text_city"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:ems="10"
android:inputType="textPostalAddress" />
</LinearLayout>
<Space
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1" />
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal" >
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Zip" />
<EditText
android:id="@+id/text_zip"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:ems="10"
android:inputType="number" />
</LinearLayout>
<Space
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1" />
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal" >
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Email" />
<EditText
android:id="@+id/edittext_email"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:ems="10"
android:imeOptions="actionDone"
android:inputType="textEmailAddress" />
</LinearLayout>
<Space
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1" />
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal" >
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Type" />
<Spinner
android:id="@+id/spin_status"
android:layout_width="wrap_content"
android:padding="0dip"
android:layout_height="10dp" />
</LinearLayout>
<Space
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1" />
<EditText
android:id="@+id/map_notes"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:ems="10"
android:inputType="textMultiLine"
android:text="notes" />
<Space
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1" />
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal" >
<Button
android:id="@+id/but_ClientForm"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Open Contract" />
<Button
android:id="@+id/but_saveData"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Save Changes" />
</LinearLayout>
</LinearLayout>
空间视图将展开,以便视图在设备上均匀分布。这不是一个神奇的子弹;你仍然需要看看视图如何在更大的屏幕上呈现,并找出它是否分散得太多。有时我会使用权重为1的Space
s,在最底部放置一个重量为2或3的Space
。在较大的屏幕上,这会在底部留下一些边距以便视图不要太过分散。
嵌套权重警告只是为了让您知道具有水平和垂直权重的布局可能需要更长时间才能呈现。同样,你必须确定什么对你有用。我不得不在我的一些布局上使用嵌套权重,并且我没有任何不可接受的渲染延迟。但YMMV一如既往。