【问题标题】:Android: Binary XML "You must supply a layout_height attribute."Android:二进制 XML“您必须提供 layout_height 属性。”
【发布时间】:2013-12-13 23:24:38
【问题描述】:

我有一个现有的 Android 应用程序,我正在尝试通过 Urban Airship API 添加丰富的推送通知。启动活动后,我收到以下错误消息:

java.lang.RuntimeException:二进制 XML 文件第 20 行:您必须提供 一个 layout_height 属性。

堆栈跟踪没有提到哪个 XML 文件有问题,所以我有点卡住了。我查看了所有 XML 布局,它们都指定了 layout_height 属性。当然,我用谷歌搜索了这个问题,我发现了这个问题:What causes "RuntimeException: Binary XML file line #20: You must supply a layout_height attribute." (ActionBarScherlock is suspected)?

上面的问题与我的问题很相似,但我似乎仍然无法解决。我一步一步在调试模式下运行了代码,但我仍然不明白如何修复它......

这是我的清单文件:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="edu.sandiego.futuretorero"
android:versionCode="100"
android:versionName="1.0.0.0" >

<uses-sdk
    android:minSdkVersion="15"
    android:targetSdkVersion="18" />

<uses-permission android:name="android.permission.GET_ACCOUNTS" />
<uses-permission android:name="android.permission.WAKE_LOCK" />
<uses-permission android:name="com.google.android.c2dm.permission.RECEIVE" />
<permission android:name="edu.sandiego.futuretorero.permission.C2D_MESSAGE" android:protectionLevel="signature" />
<uses-permission android:name="edu.sandiego.futuretorero.permission.C2D_MESSAGE" />

<uses-permission android:name="android.permission.INTERNET" />
<uses-permission
    android:name="android.permission.ACCESS_FINE_LOCATION"
    android:required="false" />
<uses-permission
    android:name="android.permission.ACCESS_COARSE_LOCATION"
    android:required="false" />
<uses-permission
    android:name="android.permission.ACCESS_MOCK_LOCATION"
    android:required="false" />
<uses-permission
    android:name="android.permission.VIBRATE"
    android:required="false" />
<uses-permission
    android:name="android.permission.ACCESS_NETWORK_STATE"
    android:required="false" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<uses-permission android:name="com.google.android.providers.gsf.permission.READ_GSERVICES"/>
<uses-feature android:glEsVersion="0x00020000" android:required="true"/>

<permission
      android:name="com.ellucian.elluciango.permission.MAPS_RECEIVE"
      android:protectionLevel="signature"/>
<uses-permission android:name="com.ellucian.elluciango.permission.MAPS_RECEIVE"/>

<application
    android:name="com.ellucian.mobile.android.EllucianApplication"
    android:icon="@drawable/ic_launcher"
    android:label="@string/app_name"
    android:theme="@style/Theme.Ellucian" 
    android:allowBackup="false"
    android:supportsRtl="true" >
    <meta-data
        android:name="com.google.android.maps.v2.API_KEY"
        android:value="KEY"/>

    <provider
        android:name="com.ellucian.mobile.android.provider.EllucianProvider"
        android:authorities="edu.sandiego.futuretorero.contentprovider"
        android:exported="false" />

    <!-- OPTIONAL (for the inbox widget) -->
    <receiver android:name=".urbanairship.RichPushWidgetProvider">
        <intent-filter>
            <action android:name="android.appwidget.action.APPWIDGET_UPDATE" />
        </intent-filter>
        <!-- This specifies the widget provider info -->
        <meta-data android:name="android.appwidget.provider"
                android:resource="@xml/widgetinfo" />
    </receiver>

    <!-- The service serving the RemoteViews to the collection widget -->
    <service android:name=".urbanairship.RichPushWidgetService"
        android:permission="android.permission.BIND_REMOTEVIEWS"
        android:exported="false" />

<!-- ACTIVITIES -->

    <!-- Main and Configuration -->
    <activity
        android:name="com.ellucian.mobile.android.MainActivity"
        android:configChanges="keyboard|keyboardHidden|orientation|screenSize"
        android:label="@string/title_activity_main" >
        <intent-filter android:label="@string/app_name">
            <action android:name="android.intent.action.MAIN" />

            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>

    <activity android:name="edu.sandiego.futuretorero.urbanairship.InboxActivity" />
    <activity android:name="edu.sandiego.futuretorero.urbanairship.PushPreferencesActivity" />
    <activity android:name="edu.sandiego.futuretorero.urbanairship.MessageActivity" />

    <!-- REQUIRED for Urban Airship GCM-->
    <receiver android:name="com.urbanairship.CoreReceiver" />

    <receiver android:name="com.urbanairship.push.GCMPushReceiver" android:permission="com.google.android.c2dm.permission.SEND">        
      <intent-filter>
          <action android:name="com.google.android.c2dm.intent.RECEIVE" />
          <action android:name="com.google.android.c2dm.intent.REGISTRATION" />

          <!-- MODIFICATION REQUIRED - Use your package name as the category -->
          <category android:name="edu.sandiego.futuretorero" />
      </intent-filter>
    </receiver>

    <!-- OPTIONAL, if you want to receive push, push opened and registration completed intents -->
    <!-- Replace the receiver below with your package and class name -->
    <receiver android:name="edu.sandiego.futuretorero.urbanairship.PushReceiver">
    </receiver>

    <!-- REQUIRED for Rich Push -->
    <service android:name="com.urbanairship.richpush.RichPushUpdateService"/>
    <service android:name="com.urbanairship.push.PushService" android:label="Push Notification Service"/>
    <service android:name="com.urbanairship.analytics.EventService" android:label="Event Service"/>

    <!-- This is required for persisting preferences related to push and location -->
    <provider android:name="com.urbanairship.UrbanAirshipProvider"
        android:authorities="edu.sandiego.futuretorero.urbanairship.provider"
        android:exported="false"
        android:multiprocess="true" />

    <!-- OPTIONAL (for segments support) -->
    <service android:name="com.urbanairship.location.LocationService" android:label="Segments Service"/>

    <receiver android:name="edu.sandiego.futuretorero.IntentReceiver" />

    <activity
        android:name="com.ellucian.mobile.android.schoolselector.ConfigurationLoadingActivity"
        android:label="@string/title_activity_configuration_loading"
        android:configChanges="keyboard|keyboardHidden|orientation|screenSize"
        android:noHistory="true" >            
        <intent-filter android:label="@string/app_name">
            <action android:name="android.intent.action.VIEW" />
            <category android:name="android.intent.category.DEFAULT" />
            <category android:name="android.intent.category.BROWSABLE" />
            <data android:scheme="https" android:host="mobile.elluciancloud.com" android:pathPrefix="/mobilecloud/configuration" />
        </intent-filter> 
    </activity>

    <activity
        android:name="com.ellucian.mobile.android.app.SendToSelectionReceiverActivity"
        android:noHistory="true" >
        <meta-data
            android:name="android.support.PARENT_ACTIVITY"
            android:value="com.ellucian.mobile.android.MainActivity"/>
    </activity>

    <activity
        android:name="com.ellucian.mobile.android.app.ConfigurationUpdateReceiverActivity"
        android:noHistory="true" >
        <meta-data
            android:name="android.support.PARENT_ACTIVITY"
            android:value="com.ellucian.mobile.android.MainActivity"/>
    </activity>

    <activity
        android:name="com.ellucian.mobile.android.app.OutdatedReceiverActivity"
        android:noHistory="true" >
        <meta-data
            android:name="android.support.PARENT_ACTIVITY"
            android:value="com.ellucian.mobile.android.MainActivity"/>
    </activity>

    <activity
        android:name="com.ellucian.mobile.android.schoolselector.SchoolSelectionActivity"
        android:configChanges="keyboard|keyboardHidden|orientation|screenSize"
        android:label="@string/title_activity_school_selection"
        android:noHistory="true" >
        <intent-filter android:label="@string/app_name">
            <action android:name="android.intent.action.VIEW" />
            <category android:name="android.intent.category.DEFAULT" />
            <category android:name="android.intent.category.BROWSABLE" />
            <data android:scheme="https" android:host="mobile.elluciancloud.com" android:pathPrefix="/mobilecloud/cloud" />
        </intent-filter>
    </activity>

    <!-- Default -->
    <activity
        android:name="com.ellucian.mobile.android.app.EllucianDefaultDetailActivity"
        android:label="@string/title_activity_default_detail" >
        <meta-data
            android:name="android.support.PARENT_ACTIVITY"
            android:value="com.ellucian.mobile.android.MainActivity"/>
    </activity>


    <!-- About -->
    <activity
        android:name="com.ellucian.mobile.android.about.AboutActivity"
        android:label="@string/title_activity_about" >
        <meta-data
            android:name="android.support.PARENT_ACTIVITY"
            android:value="com.ellucian.mobile.android.MainActivity"/>
    </activity>


    <!-- Courses -->
    <activity
        android:name="com.ellucian.mobile.android.courses.overview.CourseOverviewActivity"
        android:label="@string/title_activity_course_overview" >
        <meta-data
            android:name="android.support.PARENT_ACTIVITY"
            android:value="com.ellucian.mobile.android.MainActivity"/>  
    </activity>

    <activity
        android:name="com.ellucian.mobile.android.courses.assignments.CourseAssignmentsActivity"
        android:label="@string/title_activity_course_assignments" >
        <meta-data
            android:name="android.support.PARENT_ACTIVITY"
            android:value="com.ellucian.mobile.android.MainActivity"/>  
    </activity>

    <activity
        android:name="com.ellucian.mobile.android.courses.assignments.CourseAssignmentsDetailActivity"
        android:label="@string/title_activity_course_assignments_detail" >
        <meta-data
            android:name="android.support.PARENT_ACTIVITY"
            android:value="com.ellucian.mobile.android.MainActivity"/>  
    </activity>

    <activity
        android:name="com.ellucian.mobile.android.courses.announcements.CourseAnnouncementsActivity"
        android:label="@string/title_activity_course_announcements" >
        <meta-data
            android:name="android.support.PARENT_ACTIVITY"
            android:value="com.ellucian.mobile.android.MainActivity"/>  
    </activity>

    <activity
        android:name="com.ellucian.mobile.android.courses.announcements.CourseAnnouncementsDetailActivity"
        android:label="@string/title_activity_course_announcements_detail" >
        <meta-data
            android:name="android.support.PARENT_ACTIVITY"
            android:value="com.ellucian.mobile.android.MainActivity"/>  
    </activity>

    <activity
        android:name="com.ellucian.mobile.android.courses.events.CourseEventsActivity"
        android:label="@string/title_activity_course_events" >
        <meta-data
            android:name="android.support.PARENT_ACTIVITY"
            android:value="com.ellucian.mobile.android.MainActivity"/>  
    </activity>

    <activity
        android:name="com.ellucian.mobile.android.courses.events.CourseEventsDetailActivity"
        android:label="@string/title_activity_course_events_detail" >
        <meta-data
            android:name="android.support.PARENT_ACTIVITY"
            android:value="com.ellucian.mobile.android.MainActivity"/>  
    </activity>


    <activity
        android:name="com.ellucian.mobile.android.courses.daily.CoursesDailyScheduleActivity"
        android:label="@string/title_activity_courses_daily_schedule" >
        <meta-data
            android:name="android.support.PARENT_ACTIVITY"
            android:value="com.ellucian.mobile.android.MainActivity"/>  
    </activity>

    <activity
        android:name="com.ellucian.mobile.android.courses.full.CoursesFullScheduleActivity"
        android:label="@string/title_activity_courses_full_schedule" >
        <meta-data
            android:name="android.support.PARENT_ACTIVITY"
            android:value="com.ellucian.mobile.android.MainActivity"/>  
    </activity>

    <!-- Directory -->
    <activity
        android:name="com.ellucian.mobile.android.directory.DirectoryActivity"
        android:label="@string/title_activity_directory" >
        <meta-data
            android:name="android.support.PARENT_ACTIVITY"
            android:value="com.ellucian.mobile.android.MainActivity"/>  
    </activity>

    <activity
        android:name="com.ellucian.mobile.android.directory.DirectoryListActivity"
        android:label="@string/title_activity_directory_list_all" 
        android:launchMode="singleTop" android:exported="false" >
        <intent-filter>
            <action android:name="android.intent.action.SEARCH" />
        </intent-filter>
        <meta-data android:name="android.app.searchable"
               android:resource="@xml/searchable_directory"/>
        <meta-data
            android:name="android.support.PARENT_ACTIVITY"
            android:value="com.ellucian.mobile.android.MainActivity"/>  
    </activity>

    <activity
        android:name="com.ellucian.mobile.android.directory.DirectoryDetailActivity"
        android:label="@string/title_activity_directory_detail" >
        <meta-data
            android:name="android.support.PARENT_ACTIVITY"
            android:value="com.ellucian.mobile.android.MainActivity"/>  
    </activity>

    <!-- Events -->
    <activity
        android:name="com.ellucian.mobile.android.events.EventsActivity"
        android:label="@string/title_activity_events"
        android:configChanges="keyboard|keyboardHidden|screenSize"
        android:launchMode="singleTop" android:exported="false" >
        <intent-filter>
            <action android:name="android.intent.action.SEARCH" />
        </intent-filter>
        <meta-data android:name="android.app.searchable"
               android:resource="@xml/searchable_events"/>
        <meta-data
            android:name="android.support.PARENT_ACTIVITY"
            android:value="com.ellucian.mobile.android.MainActivity"/>  
    </activity>

    <activity
        android:name="com.ellucian.mobile.android.events.EventsDetailActivity"
        android:label="@string/title_activity_events_detail" >
        <meta-data
            android:name="android.support.PARENT_ACTIVITY"
            android:value="com.ellucian.mobile.android.MainActivity"/>  
    </activity>


    <!-- Grades -->
    <activity
        android:name="com.ellucian.mobile.android.grades.GradesActivity"
        android:label="@string/title_activity_grades" >
        <meta-data
            android:name="android.support.PARENT_ACTIVITY"
            android:value="com.ellucian.mobile.android.MainActivity"/>            
    </activity>


    <!-- Maps -->
    <activity
        android:name="com.ellucian.mobile.android.maps.MapsActivity"
        android:configChanges="orientation|keyboardHidden"
        android:label="@string/title_activity_maps" >
        <meta-data
            android:name="android.app.default_searchable"
            android:value="com.ellucian.mobile.android.maps.BuildingListActivity" />
        <meta-data
            android:name="android.support.PARENT_ACTIVITY"
            android:value="com.ellucian.mobile.android.MainActivity"/>            
    </activity>
    <activity
        android:name="com.ellucian.mobile.android.maps.LegalNoticesActivity"
        android:label="@string/title_activity_maps" >
        <meta-data
            android:name="android.support.PARENT_ACTIVITY"
            android:value="com.ellucian.mobile.android.MainActivity"/>
    </activity>

    <activity 
        android:name="com.ellucian.mobile.android.maps.BuildingDetailActivity" >
        <meta-data
            android:name="android.support.PARENT_ACTIVITY"
            android:value="com.ellucian.mobile.android.MainActivity"/>  
    </activity>

    <activity 
        android:name="com.ellucian.mobile.android.maps.BuildingInfoDetailActivity" >
        <meta-data
            android:name="android.support.PARENT_ACTIVITY"
            android:value="com.ellucian.mobile.android.MainActivity"/>  
    </activity>

    <activity
        android:name="com.ellucian.mobile.android.maps.MapsSingleLocationActivity"
         >
        <meta-data
            android:name="android.support.PARENT_ACTIVITY"
            android:value="com.ellucian.mobile.android.MainActivity"/>
    </activity>

    <activity
        android:label="@string/maps_building_list_label"
        android:name="com.ellucian.mobile.android.maps.BuildingListActivity"
        android:configChanges="orientation|keyboardHidden"
        android:launchMode="singleTop"
        android:exported="false" >
        <intent-filter>
            <action android:name="android.intent.action.SEARCH" />
        </intent-filter>

        <meta-data
            android:name="android.app.searchable"
            android:resource="@xml/searchable_buildings" />
        <meta-data
            android:name="android.support.PARENT_ACTIVITY"
            android:value="com.ellucian.mobile.android.MainActivity"/>  
    </activity>

    <!-- Multimedia -->

    <activity
        android:name="com.ellucian.mobile.android.multimedia.VideoActivity"
        android:label="@string/title_activity_video">
        <meta-data
            android:name="android.support.PARENT_ACTIVITY"
            android:value="com.ellucian.mobile.android.MainActivity"/>  
    </activity>

    <activity
        android:name="com.ellucian.mobile.android.multimedia.AudioActivity"
        android:label="@string/title_activity_audio">
        <meta-data
            android:name="android.support.PARENT_ACTIVITY"
            android:value="com.ellucian.mobile.android.MainActivity"/>  
    </activity>

    <!-- News -->
    <activity
        android:name="com.ellucian.mobile.android.news.NewsActivity"
        android:label="@string/title_activity_news"
        android:configChanges="keyboard|keyboardHidden|screenSize"
        android:launchMode="singleTop" android:exported="false" >
        <intent-filter>
            <action android:name="android.intent.action.SEARCH" />
        </intent-filter>
        <meta-data android:name="android.app.searchable"
               android:resource="@xml/searchable_news"/>
        <meta-data
            android:name="android.support.PARENT_ACTIVITY"
            android:value="com.ellucian.mobile.android.MainActivity"/>  
    </activity>

    <activity
        android:name="com.ellucian.mobile.android.news.NewsDetailActivity"
        android:label="@string/title_activity_news_detail" >
        <meta-data
            android:name="android.support.PARENT_ACTIVITY"
            android:value="com.ellucian.mobile.android.MainActivity"/>  
    </activity>

    <!-- About -->
    <activity
        android:name="edu.sandiego.futuretorero.urbanairship.MessagesActivity"
        android:label="@string/title_activity_messages" >
        <meta-data
            android:name="android.support.PARENT_ACTIVITY"
            android:value="com.ellucian.mobile.android.MainActivity"/>
    </activity>

    <!-- Notifications -->
    <activity
        android:name="com.ellucian.mobile.android.notifications.NotificationsActivity"
        android:label="@string/title_activity_notifications" >
        <meta-data
            android:name="android.support.PARENT_ACTIVITY"
            android:value="com.ellucian.mobile.android.MainActivity"/>  
    </activity>

    <activity 
        android:name="com.ellucian.mobile.android.notifications.NotificationsDetailActivity" >
        <meta-data
            android:name="android.support.PARENT_ACTIVITY"
            android:value="com.ellucian.mobile.android.MainActivity"/>  
    </activity>


    <!-- Numbers -->
    <activity
        android:name="com.ellucian.mobile.android.numbers.NumberListActivity"
        android:label="@string/title_number_list" 
        android:configChanges="keyboard|keyboardHidden|screenSize"
        android:launchMode="singleTop" android:exported="false" >
        <intent-filter>
            <action android:name="android.intent.action.SEARCH" />
        </intent-filter>
        <meta-data android:name="android.app.searchable"
               android:resource="@xml/searchable_numbers"/>
        <meta-data
    android:name="android.support.PARENT_ACTIVITY"
    android:value="com.ellucian.mobile.android.MainActivity"/>  
    </activity>
    <activity 
        android:name="com.ellucian.mobile.android.numbers.NumbersDetailActivity" 
        android:label="@string/title_number_detail" >
        <meta-data
            android:name="android.support.PARENT_ACTIVITY"
            android:value="com.ellucian.mobile.android.MainActivity"/>  
    </activity>

    <!-- Webframe -->
    <activity
        android:name="com.ellucian.mobile.android.webframe.WebframeActivity"
        android:label="Webframe" >
        <meta-data
            android:name="android.support.PARENT_ACTIVITY"
            android:value="com.ellucian.mobile.android.MainActivity"/>  
    </activity>


<!-- SERVICES -->
    <service android:name="com.ellucian.mobile.android.client.services.AuthenticateUserIntentService" ></service>
    <service android:name="com.ellucian.mobile.android.client.services.ConfigurationUpdateService" ></service>
    <service android:name="com.ellucian.mobile.android.client.services.CourseDetailsIntentService" ></service>
    <service android:name="com.ellucian.mobile.android.client.services.CourseGradesIntentService" ></service>
    <service android:name="com.ellucian.mobile.android.client.services.CourseRosterIntentService" ></service>
    <service android:name="com.ellucian.mobile.android.client.services.CourseAssignmentsIntentService" ></service>
    <service android:name="com.ellucian.mobile.android.client.services.CourseAnnouncementsIntentService" ></service>
    <service android:name="com.ellucian.mobile.android.client.services.CourseEventsIntentService" ></service>
    <service android:name="com.ellucian.mobile.android.client.services.CoursesFullScheduleIntentService" ></service>
    <service android:name="com.ellucian.mobile.android.client.services.EventsIntentService" ></service>
    <service android:name="com.ellucian.mobile.android.client.services.GradesIntentService" ></service>
    <service android:name="com.ellucian.mobile.android.client.services.ImageLoaderService" ></service>
    <service android:name="com.ellucian.mobile.android.client.services.MapsIntentService" ></service>
    <service android:name="com.ellucian.mobile.android.client.services.NewsIntentService" ></service>
    <service android:name="com.ellucian.mobile.android.client.services.NotificationsIntentService" ></service>
    <service android:name="com.ellucian.mobile.android.client.services.NumbersIntentService" ></service>


</application>

我可以发布我的活动、样式和布局,但它超出了字符数限制。就像上面的问题一样,我相信这是 ActionBarSherlock 的问题,但我不知道如何解决它。

编辑:添加完整的堆栈跟踪:https://gist.github.com/RommelTJ/8246805

【问题讨论】:

  • 请发布完整的堆栈跟踪。顺便说一句,&lt;uses-permission&gt; 没有 android:required 属性。
  • 谢谢。将完整的堆栈跟踪作为链接发布在我的 OP 底部。另外,这是我尝试使用的代码:github.com/urbanairship/android-samples/tree/master/…
  • 您似乎正在将Spinner 添加到操作栏,可能是通过下拉列表导航,而ArrayAdapter 用于该Spinner 存在问题。跨度>

标签: java android xml


【解决方案1】:

我也遇到了同样的问题,在处理多屏幕支持时,如果该属性在默认维度文件中不可用,则会出现此问题

更多信息,我会附上截图,

问题 -

解决方案-

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-07-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多