Android 带40+的嵌套线性布局;安卓测试设备的按钮崩溃
使用Android Studio,我为游戏创建了一个10x10的网格,每行使用嵌套的线性布局和图像按钮。我正在模拟器和安卓设备上进行测试。网格在模拟器中显示良好,但在设备上崩溃 作为故障排除的一部分,我决定一次实现一行以查看崩溃点。在5行时,设备将安装但不显示网格(屏幕变黑,然后返回到桌面),LogCat变得疯狂。然而,我在日志中没有看到任何指示原因的东西。我在网上找不到任何可以解释这一点的东西。我知道嵌套权重可能会引起问题,但我不知道有什么其他方法可以得到我想要的布局——我在这里找到了解决方案 下面是我的XML文件。目前,我还没有对自动生成的MainActivity.java文件执行任何操作。我只是在做布局Android 带40+的嵌套线性布局;安卓测试设备的按钮崩溃,android,Android,使用Android Studio,我为游戏创建了一个10x10的网格,每行使用嵌套的线性布局和图像按钮。我正在模拟器和安卓设备上进行测试。网格在模拟器中显示良好,但在设备上崩溃 作为故障排除的一部分,我决定一次实现一行以查看崩溃点。在5行时,设备将安装但不显示网格(屏幕变黑,然后返回到桌面),LogCat变得疯狂。然而,我在日志中没有看到任何指示原因的东西。我在网上找不到任何可以解释这一点的东西。我知道嵌套权重可能会引起问题,但我不知道有什么其他方法可以得到我想要的布局——我在这里找到了解决方案
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
tools:context=".MainActivity"
>
<!-- App Name -->
<ImageView
android:id="@+id/logoImageView"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:adjustViewBounds="true"
android:scaleType="fitXY"
android:src="@drawable/logo"/>
<!-- End App Name -->
<!-- Grid -->
<LinearLayout
android:id="@+id/grid"
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1"
android:background="#06d7ff"
android:orientation="vertical"
android:weightSum="10">
<!-- Row 0 -->
<LinearLayout
android:id="@+id/row0"
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1"
android:orientation="horizontal">
<ImageButton
android:id="@+id/r0c0"
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_margin="0.5dp"
android:layout_weight="1"
android:background="@drawable/ocean"
android:scaleType="fitXY"/>
<ImageButton
android:id="@+id/r0c1"
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_margin="0.5dp"
android:layout_weight="1"
android:background="@drawable/ocean"
android:scaleType="fitXY"/>
<ImageButton
android:id="@+id/r0c2"
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_margin="0.5dp"
android:layout_weight="1"
android:background="@drawable/ocean"
android:scaleType="fitXY"/>
<ImageButton
android:id="@+id/r0c3"
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_margin="0.5dp"
android:layout_weight="1"
android:background="@drawable/ocean"
android:scaleType="fitXY"/>
<ImageButton
android:id="@+id/r0c4"
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_margin="0.5dp"
android:layout_weight="1"
android:background="@drawable/ocean"
android:scaleType="fitXY"/>
<ImageButton
android:id="@+id/r0c5"
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_margin="0.5dp"
android:layout_weight="1"
android:background="@drawable/ocean"
android:scaleType="fitXY"/>
<ImageButton
android:id="@+id/r0c6"
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_margin="0.5dp"
android:layout_weight="1"
android:background="@drawable/ocean"
android:scaleType="fitXY"/>
<ImageButton
android:id="@+id/r0c7"
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_margin="0.5dp"
android:layout_weight="1"
android:background="@drawable/ocean"
android:scaleType="fitXY"/>
<ImageButton
android:id="@+id/r0c8"
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_margin="0.5dp"
android:layout_weight="1"
android:background="@drawable/ocean"
android:scaleType="fitXY"/>
<ImageButton
android:id="@+id/r0c9"
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_margin="0.5dp"
android:layout_weight="1"
android:background="@drawable/ocean"
android:scaleType="fitXY"/>
</LinearLayout>
<!-- End Row 0 -->
<!-- Row 1 -->
<LinearLayout
android:id="@+id/row1"
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1"
android:orientation="horizontal"
>
<ImageButton
android:id="@+id/r1c0"
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_margin="0.5dp"
android:layout_weight="1"
android:background="@drawable/ocean"
android:scaleType="fitXY"/>
<ImageButton
android:id="@+id/r1c1"
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_margin="0.5dp"
android:layout_weight="1"
android:background="@drawable/ocean"
android:scaleType="fitXY"/>
<ImageButton
android:id="@+id/r1c2"
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_margin="0.5dp"
android:layout_weight="1"
android:background="@drawable/ocean"
android:scaleType="fitXY"/>
<ImageButton
android:id="@+id/r1c3"
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_margin="0.5dp"
android:layout_weight="1"
android:background="@drawable/ocean"
android:scaleType="fitXY"/>
<ImageButton
android:id="@+id/r1c4"
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_margin="0.5dp"
android:layout_weight="1"
android:background="@drawable/ocean"
android:scaleType="fitXY"/>
<ImageButton
android:id="@+id/r1c5"
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_margin="0.5dp"
android:layout_weight="1"
android:background="@drawable/ocean"
android:scaleType="fitXY"/>
<ImageButton
android:id="@+id/r1c6"
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_margin="0.5dp"
android:layout_weight="1"
android:background="@drawable/ocean"
android:scaleType="fitXY"/>
<ImageButton
android:id="@+id/r1c7"
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_margin="0.5dp"
android:layout_weight="1"
android:background="@drawable/ocean"
android:scaleType="fitXY"/>
<ImageButton
android:id="@+id/r1c8"
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="1"
android:background="@drawable/ocean"
android:scaleType="fitXY"/>
<ImageButton
android:id="@+id/r1c9"
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_margin="0.5dp"
android:layout_weight="1"
android:background="@drawable/ocean"
android:scaleType="fitXY"/>
</LinearLayout>
<!-- End Row 1 -->
<!-- Row 2 -->
<LinearLayout
android:id="@+id/row2"
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1"
android:orientation="horizontal"
>
<ImageButton
android:id="@+id/r2c0"
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_margin="0.5dp"
android:layout_weight="1"
android:background="@drawable/ocean"
android:scaleType="fitXY"/>
<ImageButton
android:id="@+id/r2c1"
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_margin="0.5dp"
android:layout_weight="1"
android:background="@drawable/ocean"
android:scaleType="fitXY"/>
<ImageButton
android:id="@+id/r2c2"
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_margin="0.5dp"
android:layout_weight="1"
android:background="@drawable/ocean"
android:scaleType="fitXY"/>
<ImageButton
android:id="@+id/r2c3"
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_margin="0.5dp"
android:layout_weight="1"
android:background="@drawable/ocean"
android:scaleType="fitXY"/>
<ImageButton
android:id="@+id/r2c4"
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_margin="0.5dp"
android:layout_weight="1"
android:background="@drawable/ocean"
android:scaleType="fitXY"/>
<ImageButton
android:id="@+id/r2c5"
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_margin="0.5dp"
android:layout_weight="1"
android:background="@drawable/ocean"
android:scaleType="fitXY"/>
<ImageButton
android:id="@+id/r2c6"
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_margin="0.5dp"
android:layout_weight="1"
android:background="@drawable/ocean"
android:scaleType="fitXY"/>
<ImageButton
android:id="@+id/r2c7"
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_margin="0.5dp"
android:layout_weight="1"
android:background="@drawable/ocean"
android:scaleType="fitXY"/>
<ImageButton
android:id="@+id/r2c8"
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_margin="0.5dp"
android:layout_weight="1"
android:background="@drawable/ocean"
android:scaleType="fitXY"/>
<ImageButton
android:id="@+id/r2c9"
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_margin="0.5dp"
android:layout_weight="1"
android:background="@drawable/ocean"
android:scaleType="fitXY"/>
</LinearLayout>
<!-- End Row 2 -->
<!-- Row 3 -->
<LinearLayout
android:orientation="horizontal"
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1"
android:id="@+id/row3">
<ImageButton
android:layout_width="0dp"
android:layout_height="match_parent"
android:id="@+id/r3c0"
android:background="@drawable/ocean"
android:layout_weight="1"
android:scaleType="fitXY"
android:layout_margin="0.5dp"/>
<ImageButton
android:layout_width="0dp"
android:layout_height="match_parent"
android:id="@+id/r3c1"
android:background="@drawable/ocean"
android:layout_weight="1"
android:scaleType="fitXY"
android:layout_margin="0.5dp"/>
<ImageButton
android:layout_width="0dp"
android:layout_height="match_parent"
android:id="@+id/r3c2"
android:background="@drawable/ocean"
android:layout_weight="1"
android:scaleType="fitXY"
android:layout_margin="0.5dp"/>
<ImageButton
android:layout_width="0dp"
android:layout_height="match_parent"
android:id="@+id/r3c3"
android:background="@drawable/ocean"
android:layout_weight="1"
android:scaleType="fitXY"
android:layout_margin="0.5dp"/>
<ImageButton
android:layout_width="0dp"
android:layout_height="match_parent"
android:id="@+id/r3c4"
android:background="@drawable/ocean"
android:layout_weight="1"
android:scaleType="fitXY"
android:layout_margin="0.5dp"/>
<ImageButton
android:layout_width="0dp"
android:layout_height="match_parent"
android:id="@+id/r3c5"
android:background="@drawable/ocean"
android:layout_weight="1"
android:scaleType="fitXY"
android:layout_margin="0.5dp"/>
<ImageButton
android:layout_width="0dp"
android:layout_height="match_parent"
android:id="@+id/r3c6"
android:background="@drawable/ocean"
android:layout_weight="1"
android:scaleType="fitXY"
android:layout_margin="0.5dp"/>
<ImageButton
android:layout_width="0dp"
android:layout_height="match_parent"
android:id="@+id/r3c7"
android:background="@drawable/ocean"
android:layout_weight="1"
android:scaleType="fitXY"
android:layout_margin="0.5dp"/>
<ImageButton
android:layout_width="0dp"
android:layout_height="match_parent"
android:id="@+id/r3c8"
android:background="@drawable/ocean"
android:layout_weight="1"
android:scaleType="fitXY"
android:layout_margin="0.5dp"/>
<ImageButton
android:layout_width="0dp"
android:layout_height="match_parent"
android:id="@+id/r3c9"
android:background="@drawable/ocean"
android:layout_weight="1"
android:scaleType="fitXY"
android:layout_margin="0.5dp"/>
</LinearLayout>
<!-- End Row 3 -->
<!-- THIS IS WHERE THE CRASH OCCURS -->
<!-- Row 4 -->
<LinearLayout
android:orientation="horizontal"
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1"
android:id="@+id/row4">
<ImageButton
android:layout_width="0dp"
android:layout_height="match_parent"
android:id="@+id/r4c0"
android:layout_weight="1"
android:layout_margin="0.5dp"
android:background="@drawable/ocean"
android:scaleType="fitXY"/>
<ImageButton
android:layout_width="0dp"
android:layout_height="match_parent"
android:id="@+id/r4c1"
android:layout_weight="1"
android:layout_margin="0.5dp"
android:background="@drawable/ocean"
android:scaleType="fitXY"/>
<ImageButton
android:layout_width="0dp"
android:layout_height="match_parent"
android:id="@+id/r4c2"
android:layout_weight="1"
android:layout_margin="0.5dp"
android:background="@drawable/ocean"
android:scaleType="fitXY"/>
<ImageButton
android:layout_width="0dp"
android:layout_height="match_parent"
android:id="@+id/r4c3"
android:layout_weight="1"
android:layout_margin="0.5dp"
android:background="@drawable/ocean"
android:scaleType="fitXY"/>
<ImageButton
android:layout_width="0dp"
android:layout_height="match_parent"
android:id="@+id/r4c4"
android:layout_weight="1"
android:layout_margin="0.5dp"
android:background="@drawable/ocean"
android:scaleType="fitXY"/>
<ImageButton
android:layout_width="0dp"
android:layout_height="match_parent"
android:id="@+id/r4c5"
android:layout_weight="1"
android:layout_margin="0.5dp"
android:background="@drawable/ocean"
android:scaleType="fitXY"/>
<ImageButton
android:layout_width="0dp"
android:layout_height="match_parent"
android:id="@+id/r4c6"
android:layout_weight="1"
android:layout_margin="0.5dp"
android:background="@drawable/ocean"
android:scaleType="fitXY"/>
<ImageButton
android:layout_width="0dp"
android:layout_height="match_parent"
android:id="@+id/r4c7"
android:layout_weight="1"
android:layout_margin="0.5dp"
android:background="@drawable/ocean"
android:scaleType="fitXY"/>
<ImageButton
android:layout_width="0dp"
android:layout_height="match_parent"
android:id="@+id/r4c8"
android:layout_weight="1"
android:layout_margin="0.5dp"
android:background="@drawable/ocean"
android:scaleType="fitXY"/>
<ImageButton
android:layout_width="0dp"
android:layout_height="match_parent"
android:id="@+id/r4c9"
android:layout_weight="1"
android:layout_margin="0.5dp"
android:background="@drawable/ocean"
android:scaleType="fitXY"/>
</LinearLayout>
<!-- End Row 4 -->
</LinearLayout>
<!-- End Grid -->
<!-- Footer -->
<TextView
android:id="@+id/footerTextView"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="#000000"
android:gravity="center"
android:text="@string/score"
android:textColor="#ffffff"
android:textSize="48sp"/>
<!-- End Footer -->
</LinearLayout>
我解决了我的问题!我在正确的轨道上,图形导致了内存不足错误。文件太大,尤其是PNG。我调整了所有内容的大小并转换为JPG。还为背景创建了多个分辨率。每样东西都装得很快。现在我需要以编程方式创建按钮。您需要发布来自crashI的stacktrace,建议您使用代码创建此布局,而不是使用一个巨大的布局文件。如果您使用的是“网格”,则使用
GridLayout
。更易于管理,且无嵌套。尝试改用TableLayout。我对我的应用程序进行了一些更改,并在上面发布了新的详细信息@codeMagic,我包括了stacktrace的一部分。
***
07-10 15:19:52.103 18524-18524/com.android.battleships I/dalvikvm﹕ [ 07-10 15:19:52.103 18524:18524 D/skia ]
--- allocation failed for scaled bitmap
07-10 15:19:52.103 18524-18524/com.android.battleships D/AndroidRuntime﹕ Shutting down VM
07-10 15:19:52.103 18524-18524/com.android.battleships W/dalvikvm﹕ threadid=1: thread exiting with uncaught exception (group=0xb2d13b20)
07-10 15:19:52.103 18524-18524/com.android.battleships E/AndroidRuntime﹕ FATAL EXCEPTION: main
Process: com.android.battleships, PID: 18524
java.lang.RuntimeException: Unable to start activity ComponentInfo{com.android.battleships/com.android.battleships.Game}: android.view.InflateException: Binary XML file line #35: Error inflating class android.widget.ImageButton
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2184)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2233)
at android.app.ActivityThread.access$800(ActivityThread.java:135)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1196)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:136)
at android.app.ActivityThread.main(ActivityThread.java:5001)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:515)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:785)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:601)
at dalvik.system.NativeStart.main(Native Method)
Caused by: android.view.InflateException: Binary XML file line #35: Error inflating class android.widget.ImageButton
***
at com.android.battleships.Game.onCreate(Game.java:13)
***
Caused by: java.lang.reflect.InvocationTargetException
***
at com.android.battleships.Game.onCreate(Game.java:13)
***
Caused by: java.lang.OutOfMemoryError
***
at com.android.battleships.Game.onCreate(Game.java:13)
***