使用权重的按钮宽度的Android相对布局

标签 android layout button width

我已经使用 layout_weight 参数将按钮的宽度设置为总布局宽度的 70%,但为了使其正常工作,我似乎遗漏了一些重要的细节。

(另一种解决方案是以编程方式使用 display.getWidth(),但它也不起作用,因为我不知道我的 .xml 应该是什么样子 如果我选择使用 button.setWidth())

设置宽度
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout 
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_height="fill_parent" 
    android:layout_width="fill_parent"
    android:layout_weight="1.0">
    <TextView
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:textSize="15px"  
        android:id="@+id/userVersionTextViewNew"
        android:gravity="center"
        android:layout_centerVertical="true"/>
    <TextView
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:textSize="15px"
        android:gravity="center"
        android:layout_above="@id/userVersionTextViewNew"
        android:id="@+id/userSoftSerialNumberTextView"/>
    <ImageView
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:src="@drawable/logo_200"
        android:layout_above="@id/userSoftSerialNumberTextView"
        android:layout_centerHorizontal="true"/>    
    <TextView
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:textSize="15px"
        android:gravity="center"
        android:layout_below="@id/userVersionTextViewNew"
        android:id="@+id/dummyTextView"/>       
    <Button
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:id="@+id/loginButton"
        android:text="Σύνδεση"
        android:layout_centerHorizontal="true"
        android:layout_below="@id/dummyTextView"
        android:layout_weight="0.7"/>
    <Button
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:id="@+id/demoLoginButton"
        android:text="Δοκιμαστική χρήση"
        android:layout_centerHorizontal="true"
        android:layout_below="@id/loginButton"
        android:layout_weight="0.7"/>
</RelativeLayout>

最佳答案

问题

您不能在 RelativeLayout 上使用 layout_weight 参数。这些是来自 LinearLayout 的参数。我将在下面稍后提供有关差异的更多信息。但首先关于这个问题的解决方案

解决方案

使用 LinearLayout,您可以在其中将元素放置在具有权重分布的行中。 不过,在添加 layout_weights 时不要忘记使用 0dp 宽度!下面的示例显示了 70/30 的权重分布。

<LinearLayout
android:id="@+id/wrapper"
android:layout_width="fill_parent" 
android:layout_height="wrap_content"
android:weightSum="1.0" >

    <Button
        android:text="left" 
        android:layout_width="0dp" 
        android:layout_height="wrap_content" 
        android:layout_weight=".70" /> 

    <Button
        android:text="right" 
        android:layout_width="0dp" 
        android:layout_height="wrap_content" 
        android:layout_weight=".30" />

</LinearLayout>

所有这些都在您的代码中已有的 RelativeLayout 中。这个答案的其余部分是背景信息,每个有这些问题的人都应该阅读这些背景信息,以便了解他们在做什么。

相对布局

每当您从一个包含多个元素的布局开始时,我建议您更喜欢 RelativeLayout 而不是 Linear。 RelativeLayout 非常强大,可让您相对于彼此定位元素(leftOf、below、...)。在大多数情况下,这超出了您的需要。

来自 the android development document 的示例(相信我,一切都在那里):

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:paddingLeft="16dp"
    android:paddingRight="16dp" >
    <EditText
        android:id="@+id/name"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:hint="@string/reminder" />
    <Spinner
        android:id="@+id/dates"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_below="@id/name"
        android:layout_alignParentLeft="true"
        android:layout_toLeftOf="@+id/times" />
    <Spinner
        android:id="@id/times"
        android:layout_width="96dp"
        android:layout_height="wrap_content"
        android:layout_below="@id/name"
        android:layout_alignParentRight="true" />
    <Button
        android:layout_width="96dp"
        android:layout_height="wrap_content"
        android:layout_below="@id/times"
        android:layout_alignParentRight="true"
        android:text="@string/done" />
</RelativeLayout>

线性布局

LinearLayout 可能看起来也非常有能力,但为了仅使用 Linears 对所有内容进行排序,您很可能会开始嵌套这些布局。这就是它在性能方面表现不佳的地方。

还是来自 the android development documentation 的示例.

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:paddingLeft="16dp"
    android:paddingRight="16dp"
    android:orientation="vertical" >
    <EditText
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:hint="@string/to" />
    <EditText
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:hint="@string/subject" />
    <EditText
        android:layout_width="fill_parent"
        android:layout_height="0dp"
        android:layout_weight="1"
        android:gravity="top"
        android:hint="@string/message" />
    <Button
        android:layout_width="100dp"
        android:layout_height="wrap_content"
        android:layout_gravity="right"
        android:text="@string/send" />
</LinearLayout>

关于使用权重的按钮宽度的Android相对布局,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7846614/

相关文章:

Android模拟器没有互联网连接

iphone - 如何以flowlayout的方式排列标签?

android - 后退按钮在父级上调用 onDestroy()

javascript - 更改外壳上的键盘类型

android - 协调器布局在 AppbarLayout 的高度移动内容

Flutter 自定义布局,根据其子级决定小部件的大小

c++ - 布局在 Qt 中不起作用

java - 如何从 Android 倒计时器中减去一秒(或更多)?

java - Android 应用程序在单击按钮时崩溃

html - 导航栏按钮在 Chrome 和 IE 上移动