将宽度调整为半屏

Posted

技术标签:

【中文标题】将宽度调整为半屏【英文标题】:Adjust width to half screen 【发布时间】:2012-06-29 22:54:30 【问题描述】:

我发现了这个链接:

Assign width to half available screen width declaratively

如何在相对布局中做同样的事情? 这是代码:在相对布局中尝试线性布局。但这不起作用。

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_
    android:layout_
    android:background="@drawable/bg" >

    <LinearLayout
        xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_
        android:layout_
        android:orientation="horizontal" >

        <Button
            android:id="@+id/button5"
            android:layout_
            android:layout_
            android:layout_marginTop="14dp"
            android:layout_weight="1"
            android:text="Button" />

        <Button
            android:id="@+id/button6"
            android:layout_
            android:layout_
            android:layout_marginTop="16dp"
            android:layout_weight="1"
            android:text="Button" />

        <Button
            android:id="@+id/button4"
            android:layout_
            android:layout_
            android:layout_alignParentLeft="true"
            android:layout_alignParentTop="true"
            android:layout_weight="1"
            android:text="UID"
            android:textColor="#ffe5f1f1" />

        <EditText
            android:id="@+id/editText1"
            android:layout_
            android:layout_
            android:layout_weight="1"
            android:background="#ffe5f1f1"
            android:hint="Enter UID"
            android:inputType="number"
            android:shadowColor="5"
            android:textColor="#ff009999"
            android:textStyle="bold"
            android:typeface="monospace" >

            <requestFocus />
        </EditText>



    <Button
        android:id="@+id/button7"
        android:layout_
        android:layout_
            android:layout_weight="1"
        android:layout_alignParentLeft="true"
        android:layout_marginTop="18dp"
        android:text="Button" />

    <Button
        android:id="@+id/button8"
        android:layout_
        android:layout_
        android:layout_alignParentLeft="true"
        android:layout_below="@+id/button7"
            android:layout_weight="1"
        android:layout_marginTop="16dp"
        android:text="Button" />

    <Button
        android:id="@+id/button9"
        android:layout_
        android:layout_
            android:layout_weight="1"
        android:layout_alignParentLeft="true"
        android:layout_below="@+id/button8"
        android:layout_marginTop="17dp"
        android:text="Button" />

    <EditText
        android:id="@+id/editText2"
        android:layout_
        android:layout_
        android:layout_alignParentRight="true"
        android:layout_weight="1"
        android:background="#ffe5f1f1"
        android:ems="10"
        android:hint="Enter Name"
        android:inputType="number"
        android:inputType="textPersonName"
        android:textColor="#ff009999"
        android:textStyle="bold"
            android:layout_weight="1"
        android:typeface="monospace" />

    <EditText
        android:id="@+id/editText3"
        android:layout_
        android:layout_
        android:layout_alignParentRight="true"
        android:ems="10"
            android:layout_weight="1"
        android:inputType="number" />

    <EditText
        android:id="@+id/editText4"
        android:layout_
        android:layout_
        android:layout_alignBaseline="@+id/button7"
        android:layout_alignBottom="@+id/button7"
        android:layout_alignParentRight="true"
        android:ems="10"
            android:layout_weight="1"
        android:inputType="phone" />

    <EditText
        android:id="@+id/editText5"
        android:layout_
        android:layout_
        android:layout_alignBaseline="@+id/button8"
        android:layout_alignBottom="@+id/button8"
        android:layout_alignParentRight="true"
        android:ems="10"
            android:layout_weight="1"
        android:inputType="textPersonName" />

    <RadioButton
        android:id="@+id/radioButton2"
        android:layout_
        android:layout_
        android:layout_alignBaseline="@+id/button9"
        android:layout_alignBottom="@+id/button9"
        android:layout_alignLeft="@+id/editText5"
            android:layout_weight="1"
        android:text="Male" />

    <RadioButton
        android:id="@+id/radioButton1"
        android:layout_
        android:layout_
        android:layout_alignBaseline="@+id/radioButton2"
        android:layout_alignBottom="@+id/radioButton2"
        android:layout_alignParentRight="true"
            android:layout_weight="1"
        android:text="Female" />

    <Button
        android:id="@+id/button10"
        android:layout_
        android:layout_
        android:layout_alignParentLeft="true"
        android:layout_below="@+id/button9"
        android:layout_marginTop="31dp"
            android:layout_weight="1"
        android:text="Button" />

    <Spinner
        android:id="@+id/spinDept"
        android:layout_
        android:layout_
        android:layout_alignBaseline="@+id/button10"
        android:layout_alignBottom="@+id/button10"
        android:layout_alignLeft="@+id/radioButton2"
        android:layout_alignParentRight="true"
        android:layout_weight="1"
        android:background="#ff009999" />
   </LinearLayout>
</RelativeLayout>

【问题讨论】:

您真正想要深入了解屏幕布局或它的小部件 制作一种与所有屏幕尺寸兼容的表单布局。 我不明白你的问题。链接的问题是将视图分成两半。您的线性布局中有十几个视图。你想做什么? 【参考方案1】:

如果您在使用RelativeLayout 时恰好需要一半,这是一个很好的解决方法。你要做的是,制作一个以父级为中心的假不可见视图,并将左按钮设置为 alignParentLeft 和 alignRight 到该假视图,右按钮反之亦然

<RelativeLayout 
   android:layout_
   android:layout_>

   <View android:id="@+id/fakeView"
       android:layout_
       android:layout_ 
       android:layout_centerInParent="true"/>
   <Button
       android:layout_
       android:layout_
       android:layout_alignRight="@id/fakeView"
       android:layout_alignParentLeft="true"
       android:text="Left"/>

   <Button 
      android:layout_
      android:layout_
      android:layout_alignLeft="@id/fakeView"
      android:layout_alignParentRight="true"
      android:text="Right"/>

</RelativeLayout>

真的很聪明。

【讨论】:

我同意,非常聪明。我很想知道这是否真的比使用 LinearLayout 更快。 Idk,可能不是,但从更一般的角度来看,但如果您使用相对布局开始,这会更快,因为您消除了嵌套布局【参考方案2】:

用适合你的相对布局包装同样的东西。

<LinearLayout android:layout_
    android:layout_
    android:orientation="horizontal">
    <Button android:layout_
            android:layout_
            android:layout_weight="1"
            android:text="somebutton">

    <TextView android:layout_
            android:layout_
            android:layout_weight="1">
</LinearLayout>

【讨论】:

所以我必须多次使用线性布局?在相对布局中,我几乎有超过 5 行与它相似。 有一个相对布局,你可以在其中拥有包含所有行的线性布局,让它成为一、二或 100。【参考方案3】:

除了urSus的回答,最好使用Space类而不是View

   <Space android:id="@+id/fakeView"
       android:layout_
       android:layout_ 
       android:layout_centerInParent="true"/>

【讨论】:

我不同意。空间仅适用于 api14+,如果您想针对各种设备,它几乎毫无用处。 好吧,api14+ 是 4.0+,根据最新的平台分布图(goo.gl/fmFDJw),现在 api 如果您发现 15% 微不足道,对您有好处。此外,此图表仅衡量可访问 google play 商店的设备,远非所有设备。【参考方案4】:
    Display display = getWindowManager().getDefaultDisplay();
    int width = display.getWidth();
    int height = display.getHeight();
    plannerEditLayout = (RelativeLayout) findViewById(R.id.plannerLayoutEdit);
    plannerEditLayout.setGravity(Gravity.CENTER_VERTICAL);
    plannerEditLayout.setLayoutParams(new RelativeLayout.LayoutParams(
            (width / 2), height));

我对 LinearLayout 使用相同的代码。 Havent 为RelativeLayout 尝试了myslef。试一试。如果不起作用,请发表评论。

【讨论】:

【参考方案5】:

尝试layout_weight 到 1 和 layout_width 像这样填充_parent,

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_
    android:layout_
    android:id="@+id/main_layout"
    android:orientation="vertical"
    android:padding="10dp">
    <LinearLayout
        android:layout_
        android:layout_
        android:orientation="horizontal">
        <LinearLayout
            android:layout_
            android:layout_
            android:layout_weight="1">
           
        </LinearLayout>
        <LinearLayout
            android:layout_
            android:layout_
            android:layout_weight="1">
            
        </LinearLayout>
    </LinearLayout>
</LinearLayout> 

【讨论】:

【参考方案6】:
<LinearLayout android:layout_
    android:layout_
    android:orientation="horizontal">
    <Button android:layout_
             android:id="@+id/button"
            android:layout_
            android:layout_weight="1"
            android:text="somebutton">

    <TextView android:layout_
             android:id="@+id/textview"
            android:layout_
            android:layout_weight="1">
</LinearLayout>

在上面的例子中使用了LinearLayout,将widget layout_width设置为“match_parent”并提供权重(指定要占用的区域)。

这解决了你的问题。

【讨论】:

不。每个元素都有 id 定义。没关系。

以上是关于将宽度调整为半屏的主要内容,如果未能解决你的问题,请参考以下文章

将图像重新调整为新的高度和宽度,但不要超过原始高度和宽度

将 LinearLayout 调整为 ImageView 的宽度

如何使用 CSS `resize` 将元素的高度/宽度调整为小于 Chrome 上的初始高度/宽度?

使用“Vstack”将图像大小调整为屏幕宽度,同时保持纵横比

Flutter: IntrinsicWidth类,将孩子的宽度调整为孩子的最大内在宽度

将 UIButton 字体大小调整为宽度