Android应用屏幕尺寸不适合设备

时间:2012-05-16 19:33:13

标签: android xml android-layout layout crash

我是新手,所以我不知道我是否做得对 我刚刚从市场上下载了一个应用程序,它不适合我的屏幕(ldpi 240x320)高度...底部的一些按钮不会出现。 所以我搜索了一些信息并尝试了一切...... 这是layout / Main.xml

  <?xml version="1.0" encoding="utf-8"?>
<LinearLayout android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent"
  xmlns:android="http://schemas.android.com/apk/res/android"
  xmlns:launcher="http://schemas.android.com/apk/res/com.android.launcher">
    <LinearLayout android:orientation="vertical" android:id="@id/LLImage" android:layout_width="fill_parent" android:layout_height="wrap_content" android:adjustViewBounds="true" android:minHeight="100.0dip"
      xmlns:android="http://schemas.android.com/apk/res/android"
      xmlns:launcher="http://schemas.android.com/apk/res/com.android.launcher">
        <RelativeLayout android:id="@id/drag_layer" android:layout_width="fill_parent" android:layout_height="370.0dip" android:adjustViewBounds="true" android:minHeight="100.0dip">
            <ImageView android:id="@id/imageViewContainer" android:layout_width="fill_parent" android:layout_height="370.0dip" android:src="@drawable/backgsammi" android:scaleType="matrix" android:adjustViewBounds="true" android:minHeight="100.0dip" />
            <ImageView android:id="@id/imageWatermark" android:visibility="invisible" android:layout_width="wrap_content" android:layout_height="wrap_content" android:src="@drawable/watermark" android:layout_alignParentRight="true" />
        </RelativeLayout>
    </LinearLayout>
    <LinearLayout android:orientation="vertical" android:id="@id/mainLLauout" android:layout_width="fill_parent" android:layout_height="fill_parent"
      xmlns:android="http://schemas.android.com/apk/res/android"
      xmlns:launcher="http://schemas.android.com/apk/res/com.android.launcher">
        <LinearLayout android:gravity="center_horizontal" android:orientation="horizontal" android:background="@drawable/background" android:layout_width="fill_parent" android:layout_height="50.0dip"
          xmlns:android="http://schemas.android.com/apk/res/android">
            <ImageButton android:padding="0.0px" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_margin="3.0dip" android:src="@drawable/open" android:text="Select Picture" android:onClick="openGallery" />
            <ImageButton android:padding="0.0px" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_margin="3.0dip" android:src="@drawable/cat" android:text="Choose Cat" android:onClick="chooseCat" />
            <ImageButton android:id="@id/btnFlip" android:padding="0.0px" android:longClickable="true" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_margin="3.0dip" android:src="@drawable/rotate" android:onClick="rotateImage" />
            <ImageButton android:padding="0.0px" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_margin="3.0dip" android:src="@drawable/eraser" android:onClick="eraseImage" />
            <ImageButton android:id="@id/btnSave" android:padding="0.0dip" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_margin="3.0dip" android:src="@drawable/save" android:text="Save" android:onClick="saveToGallery" />
            <ImageButton android:padding="0.0dip" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_margin="3.0dip" android:src="@drawable/help" android:text="Save" android:onClick="openHelp" />
        </LinearLayout>
    </LinearLayout>
</LinearLayout>

我想这是因为“android:layout_height =”370.0dip“” - 它应该更小。但是当我尝试在eclipse上将其更改为“360”或“fill_parent”时,请登录apk,安装在手机上并尝试打开应用程序,它会崩溃。我错过了什么吗?我只是想让app适合我的手机屏幕

抱歉英语不好和那个愚蠢的问题

    05-16 18:21:30.796: W/dalvikvm(11715): threadid=1: thread exiting with uncaught exception (group=0x40018560)
05-16 18:21:31.306: E/AndroidRuntime(11715): FATAL EXCEPTION: main
05-16 18:21:31.306: E/AndroidRuntime(11715): java.lang.RuntimeException: Unable to instantiate activity ComponentInfo{com.addacat.addacat/com.addacat.addacat.AddaCatActivity}: java.lang.ClassNotFoundException: com.addacat.addacat.AddaCatActivity in loader dalvik.system.PathClassLoader[/data/app/com.addacat.addacat-2.apk]
05-16 18:21:31.306: E/AndroidRuntime(11715):    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1680)
05-16 18:21:31.306: E/AndroidRuntime(11715):    at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1784)
05-16 18:21:31.306: E/AndroidRuntime(11715):    at android.app.ActivityThread.access$1500(ActivityThread.java:123)
05-16 18:21:31.306: E/AndroidRuntime(11715):    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:939)
05-16 18:21:31.306: E/AndroidRuntime(11715):    at android.os.Handler.dispatchMessage(Handler.java:99)
05-16 18:21:31.306: E/AndroidRuntime(11715):    at android.os.Looper.loop(Looper.java:130)
05-16 18:21:31.306: E/AndroidRuntime(11715):    at android.app.ActivityThread.main(ActivityThread.java:3835)
05-16 18:21:31.306: E/AndroidRuntime(11715):    at java.lang.reflect.Method.invokeNative(Native Method)
05-16 18:21:31.306: E/AndroidRuntime(11715):    at java.lang.reflect.Method.invoke(Method.java:507)
05-16 18:21:31.306: E/AndroidRuntime(11715):    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:858)
05-16 18:21:31.306: E/AndroidRuntime(11715):    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)
05-16 18:21:31.306: E/AndroidRuntime(11715):    at dalvik.system.NativeStart.main(Native Method)
05-16 18:21:31.306: E/AndroidRuntime(11715): Caused by: java.lang.ClassNotFoundException: com.addacat.addacat.AddaCatActivity in loader dalvik.system.PathClassLoader[/data/app/com.addacat.addacat-2.apk]
05-16 18:21:31.306: E/AndroidRuntime(11715):    at dalvik.system.PathClassLoader.findClass(PathClassLoader.java:240)
05-16 18:21:31.306: E/AndroidRuntime(11715):    at java.lang.ClassLoader.loadClass(ClassLoader.java:551)
05-16 18:21:31.306: E/AndroidRuntime(11715):    at java.lang.ClassLoader.loadClass(ClassLoader.java:511)
05-16 18:21:31.306: E/AndroidRuntime(11715):    at android.app.Instrumentation.newActivity(Instrumentation.java:1021)
05-16 18:21:31.306: E/AndroidRuntime(11715):    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1672)
05-16 18:21:31.306: E/AndroidRuntime(11715):    ... 11 more

package com.addacat.addacat;

import android.app.Activity;
import android.os.Bundle;

public class AddaCatActivity extends Activity {

    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        // TODO Auto-generated method stub
    }

}

所有内容都在AddaCatActivity.java

2 个答案:

答案 0 :(得分:0)

我使用20px x 20px图像代替您的图像在虚拟应用中测试了您的布局。当我将这些高度从370dip更改为fill_parent时,它不会崩溃。

当它连接到Eclipse时,您确实需要在模拟器上或手机上运行应用程序。您需要能够看到LogCat。它可能会让你很好地了解原因可能是什么。


编辑:

现在您已修复了应用崩溃问题,您应该查看this页面。它提供了许多如何构建布局的示例。

现在,你有:

<LinearLayout>
  <LinearLayout>  // Unused
    <RelativeLayout>
      <ImageView />
      <ImageView />
    </RelativeLayout>
  </LinearLayout>

  <LinearLayout>  // Unused
    <LinearLayout>
      <ImageButton />
      <ImageButton />
      <ImageButton />
      <ImageButton />
      <ImageButton />
      <ImageButton />
    </LinearLayout>
  </LinearLayout>
</LinearLayout>

此时,至少有两个LinearLayout块看起来未使用。这是一个我认为你想要的布局:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
  xmlns:android="http://schemas.android.com/apk/res/android"
  android:orientation="vertical"
  android:layout_width="fill_parent"
  android:layout_height="fill_parent" >

  <RelativeLayout 
    android:id="@+id/drag_layer"
    android:layout_width="fill_parent"
    android:layout_height="0dip"
    android:layout_weight="1"
    android:adjustViewBounds="true"
    android:minHeight="100.0dip" >

    <ImageView
      android:id="@+id/imageViewContainer"
      android:layout_width="fill_parent"
      android:layout_height="fill_parent"
      android:src="@drawable/backgsammi"
      android:scaleType="fitCenter"
      android:adjustViewBounds="true" />

    <ImageView
      android:id="@+id/imageWatermark"
      android:visibility="invisible"
      android:layout_width="wrap_content"
      android:layout_height="wrap_content"
      android:src="@drawable/watermark"
      android:layout_alignParentRight="true" />

  </RelativeLayout>

  <LinearLayout
    android:orientation="horizontal"
    android:id="@+id/mainLLauout"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:layout_weight="0" >

    <ImageButton
      android:layout_width="wrap_content"
      android:layout_height="wrap_content"
      android:layout_weight="1"
      android:src="@drawable/open" />

    <ImageButton
      android:layout_width="wrap_content"
      android:layout_height="wrap_content"
      android:layout_weight="1"
      android:src="@drawable/cat" />

    <ImageButton
      android:layout_width="wrap_content"
      android:layout_height="wrap_content"
      android:layout_weight="1"
      android:src="@drawable/rotate" />

    <ImageButton
      android:layout_width="wrap_content"
      android:layout_height="wrap_content"
      android:layout_weight="1"
      android:src="@drawable/eraser" />

    <ImageButton
      android:layout_width="wrap_content"
      android:layout_height="wrap_content"
      android:layout_weight="1"
      android:src="@drawable/save" />

    <ImageButton
      android:layout_width="wrap_content"
      android:layout_height="wrap_content"
      android:layout_weight="1"
      android:src="@drawable/help" />

  </LinearLayout>
</LinearLayout>

答案 1 :(得分:0)

关于像素大小: 1dp仅在mdpi上等于1px。 在ldpi上,1dp =(1 + 1/3)px。 那是因为:mdpi是160dpi,ldpi是120dpi。

这意味着如果您的屏幕是240x320并且您在“layout”文件夹中使用了dp的尺寸(如果没有专门编写,则用于mdpi),370dp~493像素。这超过了您的屏幕宽度或高度。

阅读此内容以获取更多信息: http://developer.android.com/guide/practices/screens_support.html

关于错误本身:,似乎该应用无法找到您要启动的活动,可能是因为您重命名了它或者您已将其放在其他位置。

您需要确保您的活动位于带有正确路径的清单上。要完全确定路径是否正常,请在清单上放置活动的完整路径,而不是以“。”开头。然后是活动的名称。例如:

<activity android:name="com.my_awesome_app.MyAwesomeActivity" ...