【发布时间】:2020-06-25 15:11:30
【问题描述】:
我自己和几个朋友正在为 Android 制作一款具有可玩性的游戏。在比赛场地的一部分前面,我想放置按钮。像这样:
为了将一组xml放在另一组前面,我相信我们需要使用Relative Layout。到目前为止,我们一直在内联(以编程方式)执行此操作,但现在我想使用 XML 执行此操作。我想我对权重的工作原理非常了解。我正在使用彼此内部的线性布局来做到这一点。预期的结果是让按钮只覆盖屏幕的一小部分。
不幸的是,当我将线性布局添加到相对布局时,加权功能似乎不再起作用。
为清楚起见,我添加了两行按钮,并将第二行的权重设置为大于第一行。这是布局应该是什么样子的 Android Studio 预览:
它实际上是这样出来的:
两行显示为相同大小。我希望有人可以回答我为什么会发生这种情况,如果可能的话,提供解决问题的方法。
这是我将线性布局添加到相对布局的代码:
RelativeLayout relativeLayout = (RelativeLayout)this.findViewById(R.id.testLayout);
View view = LayoutInflater.from(this).inflate(R.layout.testgameplay_wrapper, null);
relativeLayout.addView(view);
这里是相关的 XML。我创建了一个包装类来简化事情:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
android:id="@+id/testScreenLinearWrapper"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
xmlns:android="http://schemas.android.com/apk/res/android">
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/linearLayout1"
android:layout_weight=".25"
android:layout_width="match_parent"
android:layout_height="0dp"
android:orientation="horizontal">
<include layout="@layout/testgameplay_buttondisplay"></include>
</LinearLayout>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/linearLayout2"
android:layout_weight="1"
android:layout_width="match_parent"
android:layout_height="0dp"
android:orientation="horizontal">
<include layout="@layout/testgameplay_buttondisplay"></include>
</LinearLayout>
编辑:
按要求测试gamplaybutton_buttondisplay.xml:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
android:id="@+id/testScreenButtonDisplay"
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="horizontal">
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/linearLayoutInnermost1"
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="1"
android:orientation="horizontal">
<include
layout="@layout/defend_screen_buttons"></include>
</LinearLayout>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/linearLayoutInnermost2"
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="1"
android:orientation="horizontal">
<include
layout="@layout/test_screen_buttons"></include>
</LinearLayout>
test_screen_buttons.xml 可能会被请求:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/testScreenButtons"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:orientation="horizontal">
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/linearLayout1"
android:layout_weight=".25"
android:layout_height="match_parent"
android:layout_width="0dp"
android:orientation="horizontal">
<Button
android:id="@+id/spawnCreepButton"
android:textColor="@android:color/white"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentTop="true"
android:layout_centerInParent="true"
android:background="@drawable/basic_button"
android:text="Spawn Creep"
android:onClick="RunProjectileTest"/>
</LinearLayout>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/linearLayout2"
android:layout_weight=".25"
android:layout_height="match_parent"
android:layout_width="0dp"
android:orientation="horizontal">
<Button
android:id="@+id/sendCreepsButton"
android:gravity="center"
android:textColor="@android:color/white"
android:layout_height="wrap_content"
android:layout_width="wrap_content"
android:layout_alignParentBottom="true"
android:layout_centerHorizontal="true"
android:layout_centerVertical="true"
android:background="@drawable/basic_button"
android:text="Send Creeps"
android:onClick="StartSendCreepsScreen"/>
</LinearLayout>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/linearLayout3"
android:layout_weight=".25"
android:layout_height="match_parent"
android:layout_width="0dp"
android:orientation="horizontal">
<Button
android:id="@+id/replayButton"
android:gravity="center"
android:textColor="@android:color/white"
android:layout_height="wrap_content"
android:layout_width="wrap_content"
android:layout_alignParentBottom="true"
android:layout_centerHorizontal="true"
android:layout_centerVertical="true"
android:background="@drawable/basic_button"
android:text="Replay"
android:onClick="StartReplayScreen"/>
</LinearLayout>
defend_screen_buttons.xml 可能会被请求:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/buttonViewGroup"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:orientation="horizontal">
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/linearLayout1"
android:layout_weight=".25"
android:layout_height="match_parent"
android:layout_width="0dp"
android:orientation="horizontal">
<Button
android:id="@+id/startButton"
android:textColor="@android:color/white"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentTop="true"
android:layout_centerInParent="true"
android:textSize="20sp"
android:background="@drawable/basic_button"
android:text="Start" />
</LinearLayout>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/linearLayout2"
android:layout_weight=".25"
android:layout_height="match_parent"
android:layout_width="0dp"
android:orientation="horizontal">
<Button
android:id="@+id/sendButton"
android:gravity="center"
android:textColor="@android:color/white"
android:layout_height="wrap_content"
android:layout_width="wrap_content"
android:layout_alignParentBottom="true"
android:layout_centerHorizontal="true"
android:layout_centerVertical="true"
android:background="@drawable/basic_button"
android:text="Prepare Attack!" />
</LinearLayout>
现在你明白我为什么要简化它了 XD
感谢您的时间和专业知识!
【问题讨论】:
-
发布您的
testgameplay_buttondisplay -
我想你忘了给 android:weightSum 给 android:id="@+id/testScreenLinearWrapper" 的布局
-
请发布您的 testgameplay_buttondisplay.xml 文件。
标签: android android-linearlayout android-relativelayout android-layout-weight