2

ハード ドライブのクラッシュに続いてビルド ツールをアップグレードしましたが、setContentView() 内で ActionBar を拡張しているときに、MainActivity で実行時エラーが発生するようになりました。ログキャットは次のとおりです。

11-05 09:37:11.607: W/dalvikvm(15472): threadid=1: thread exiting with uncaught exception (group=0x40caa930)
11-05 09:37:11.717: E/AndroidRuntime(15472): FATAL EXCEPTION: main
11-05 09:37:11.717: E/AndroidRuntime(15472): java.lang.RuntimeException: Unable to start activity ComponentInfo{uk.co.seatrack.seatracklite/uk.co.seatrack.seatracklite.MainActivity}: android.view.InflateException: Binary XML file line #27: Error inflating class android.support.v7.internal.widget.ActionBarContainer
11-05 09:37:11.717: E/AndroidRuntime(15472):    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2180)
11-05 09:37:11.717: E/AndroidRuntime(15472):    at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2230)
11-05 09:37:11.717: E/AndroidRuntime(15472):    at android.app.ActivityThread.access$600(ActivityThread.java:141)
11-05 09:37:11.717: E/AndroidRuntime(15472):    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1234)
11-05 09:37:11.717: E/AndroidRuntime(15472):    at android.os.Handler.dispatchMessage(Handler.java:99)
11-05 09:37:11.717: E/AndroidRuntime(15472):    at android.os.Looper.loop(Looper.java:137)
11-05 09:37:11.717: E/AndroidRuntime(15472):    at android.app.ActivityThread.main(ActivityThread.java:5041)
11-05 09:37:11.717: E/AndroidRuntime(15472):    at java.lang.reflect.Method.invokeNative(Native Method)
11-05 09:37:11.717: E/AndroidRuntime(15472):    at java.lang.reflect.Method.invoke(Method.java:511)
11-05 09:37:11.717: E/AndroidRuntime(15472):    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793)
11-05 09:37:11.717: E/AndroidRuntime(15472):    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:560)
11-05 09:37:11.717: E/AndroidRuntime(15472):    at dalvik.system.NativeStart.main(Native Method)
11-05 09:37:11.717: E/AndroidRuntime(15472): Caused by: android.view.InflateException: Binary XML file line #27: Error inflating class android.support.v7.internal.widget.ActionBarContainer
11-05 09:37:11.717: E/AndroidRuntime(15472):    at android.view.LayoutInflater.createView(LayoutInflater.java:613)
11-05 09:37:11.717: E/AndroidRuntime(15472):    at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:687)
11-05 09:37:11.717: E/AndroidRuntime(15472):    at android.view.LayoutInflater.rInflate(LayoutInflater.java:746)
11-05 09:37:11.717: E/AndroidRuntime(15472):    at android.view.LayoutInflater.inflate(LayoutInflater.java:489)
11-05 09:37:11.717: E/AndroidRuntime(15472):    at android.view.LayoutInflater.inflate(LayoutInflater.java:396)
11-05 09:37:11.717: E/AndroidRuntime(15472):    at android.view.LayoutInflater.inflate(LayoutInflater.java:352)
11-05 09:37:11.717: E/AndroidRuntime(15472):    at android.support.v7.app.AppCompatDelegateImplV7.createSubDecor(AppCompatDelegateImplV7.java:359)
11-05 09:37:11.717: E/AndroidRuntime(15472):    at android.support.v7.app.AppCompatDelegateImplV7.ensureSubDecor(AppCompatDelegateImplV7.java:280)
11-05 09:37:11.717: E/AndroidRuntime(15472):    at android.support.v7.app.AppCompatDelegateImplV7.setContentView(AppCompatDelegateImplV7.java:254)
11-05 09:37:11.717: E/AndroidRuntime(15472):    at android.support.v7.app.AppCompatActivity.setContentView(AppCompatActivity.java:109)
11-05 09:37:11.717: E/AndroidRuntime(15472):    at uk.co.seatrack.seatracklite.MainActivity.onCreate(MainActivity.java:169)
11-05 09:37:11.717: E/AndroidRuntime(15472):    at android.app.Activity.performCreate(Activity.java:5104)
11-05 09:37:11.717: E/AndroidRuntime(15472):    at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1080)
11-05 09:37:11.717: E/AndroidRuntime(15472):    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2144)
11-05 09:37:11.717: E/AndroidRuntime(15472):    ... 11 more
11-05 09:37:11.717: E/AndroidRuntime(15472): Caused by: java.lang.reflect.InvocationTargetException
11-05 09:37:11.717: E/AndroidRuntime(15472):    at java.lang.reflect.Constructor.constructNative(Native Method)
11-05 09:37:11.717: E/AndroidRuntime(15472):    at java.lang.reflect.Constructor.newInstance(Constructor.java:417)
11-05 09:37:11.717: E/AndroidRuntime(15472):    at android.view.LayoutInflater.createView(LayoutInflater.java:587)
11-05 09:37:11.717: E/AndroidRuntime(15472):    ... 24 more
11-05 09:37:11.717: E/AndroidRuntime(15472): Caused by: java.lang.UnsupportedOperationException: Can't convert to dimension: type=0x2
11-05 09:37:11.717: E/AndroidRuntime(15472):    at android.content.res.TypedArray.getDimensionPixelSize(TypedArray.java:463)
11-05 09:37:11.717: E/AndroidRuntime(15472):    at android.support.v7.internal.widget.ActionBarContainer.<init>(ActionBarContainer.java:68)
11-05 09:37:11.717: E/AndroidRuntime(15472):    ... 27 more

appcompat サポート ライブラリで ActionBarContainer を初期化しようとしており、getDimensionPixelSize でエラーが発生しています。ライブラリ内の関連コードは次のようになります。

    public ActionBarContainer(Context context, AttributeSet attrs) {
    super(context, attrs);
    // Set a transparent background so that we project appropriately.
    final Drawable bg = VersionUtils.isAtLeastL()
            ? new ActionBarBackgroundDrawableV21(this)
            : new ActionBarBackgroundDrawable(this);
    setBackgroundDrawable(bg);
    TypedArray a = context.obtainStyledAttributes(attrs,
            R.styleable.ActionBar);
    mBackground = a.getDrawable(R.styleable.ActionBar_background);
    mStackedBackground = a.getDrawable(
            R.styleable.ActionBar_backgroundStacked);
>>>>    mHeight = a.getDimensionPixelSize(R.styleable.ActionBar_height, -1); <<<<
    if (getId() == R.id.split_action_bar) {
        mIsSplit = true;
        mSplitBackground = a.getDrawable(R.styleable.ActionBar_backgroundSplit);
    }
    a.recycle();
    setWillNotDraw(mIsSplit ? mSplitBackground == null :
            mBackground == null && mStackedBackground == null);
}

getDimensionPixelSize() は、リソースが TypedArray.TYPE_DIMENSION であることを期待していますが、実際には TypedArray.TYPE_ATTRIBUTE を取得しているため、スローされます。探しているリソース (R.styleable.ActionBar_height) は、appcompat ライブラリの /res/values/attrs.xml ファイルで定義されています。

    <declare-styleable name="ActionBar">
    <!-- The type of navigation to use. -->
    <attr name="navigationMode">
        <!-- Normal static title text -->
        <enum name="normal" value="0"/>
        <!-- The action bar will use a selection list for navigation. -->
        <enum name="listMode" value="1"/>
        <!-- The action bar will use a series of horizontal tabs for navigation. -->
        <enum name="tabMode" value="2"/>
    </attr>
    <!-- Options affecting how the action bar is displayed. -->
    <attr name="displayOptions">
        <flag name="none" value="0" />
        <flag name="useLogo" value="0x1"/>
        <flag name="showHome" value="0x2"/>
        <flag name="homeAsUp" value="0x4"/>
        <flag name="showTitle" value="0x8"/>
        <flag name="showCustom" value="0x10"/>
        <flag name="disableHome" value="0x20"/>
    </attr>
    <!-- Specifies title text used for navigationMode="normal" -->
    <attr name="title"/>
    <!-- Specifies subtitle text used for navigationMode="normal" -->
    <attr name="subtitle" format="string"/>
    <!-- Specifies a style to use for title text. -->
    <attr name="titleTextStyle" format="reference"/>
    <!-- Specifies a style to use for subtitle text. -->
    <attr name="subtitleTextStyle" format="reference"/>
    <!-- Specifies the drawable used for the application icon. -->
    <attr name="icon" format="reference"/>
    <!-- Specifies the drawable used for the application logo. -->
    <attr name="logo" format="reference"/>
    <!-- Specifies the drawable used for item dividers. -->
    <attr name="divider" format="reference"/>
    <!-- Specifies a background drawable for the action bar. -->
    <attr name="background" format="reference"/>
    <!-- Specifies a background drawable for a second stacked row of the action bar. -->
    <attr name="backgroundStacked" format="reference|color"/>
    <!-- Specifies a background drawable for the bottom component of a split action bar. -->
    <attr name="backgroundSplit" format="reference|color"/>
    <!-- Specifies a layout for custom navigation. Overrides navigationMode. -->
    <attr name="customNavigationLayout" format="reference"/>
    <!-- Specifies a fixed height. -->
    <!-- MCAJ - added format -->
    <attr name="height" format="dimension"/>

を追加format="dimension"した元のファイルには、形式がありませんでした。それは問題を解決しませんでした!

アプリの bin/R.txt ファイルには、次の行が含まれています。

int styleable ActionBar_height 14

そのため、リソースはビルド中に appcompat ライブラリから引き継がれました。

サポート ライブラリ v23.1 の Eclipse Mars 4.5.0、ADT 23.0.7.2120684、および appcompat.v7 を使用しています。API 17 (Android 4.2.2) を実行している Tesco Hudl 7 インチ タブレットで、ビルドとテストで API 23 をターゲットにしています。

何か案は?

4

0 に答える 0