Проблема с XML и отрисовкой чего-либо с него

267
25 июля 2018, 20:20

У меня есть самый простой, насколько это возможно, XML-файл...

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_height="match_parent"
    android:layout_width="match_parent"
    android:orientation="vertical"
    android:background="#FFF9C4"
    android:gravity="center_horizontal">
    <ImageView
        android:layout_height="200dp"
        android:layout_width="wrap_content"
        android:src="@drawable/logotype"
        android:id="@+id/Logo"
        android:layout_margin="10dp"/>
    <Button
        android:layout_height="50dp"
        android:layout_width="200dp"
        android:id="@+id/Start"
        android:onClick="Start"
        android:background="@drawable/button_red"
        android:text="@string/Start"
        android:textColor="#FFFFFF"
        android:layout_margin="10dp"/>
    <Button
        android:layout_height="50dp"
        android:layout_width="200dp"
        android:id="@+id/Other"
        android:onClick="Other"
        android:background="@drawable/button_green"
        android:text="@string/Other"
        android:textColor="#FFFFFF"
        android:layout_margin="10dp"/>
    <Button
        android:layout_height="50dp"
        android:layout_width="200dp"
        android:id="@+id/Exit"
        android:onClick="Exit"
        android:background="@drawable/button_red"
        android:text="@string/Exit"
        android:textColor="#FFFFFF"
        android:layout_margin="10dp"/>
</LinearLayout>

При попытке показать используя Java-файл...

import android.app.*;
import android.os.*;
public class MainActivity extends Activity 
{
    @Override
    protected void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
    }
}

... появляется такая ошибка...

java.lang.RuntimeException: Unable to start activity ComponentInfo{com.Test.App/com.Test.App.MainActivity}: android.view.InflateException: Binary XML file line #17: Binary XML file line #17: Error inflating class android.widget.Button
    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2706)
    at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2767)
    at android.app.ActivityThread.-wrap12(ActivityThread.java)
    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1514)
    at android.os.Handler.dispatchMessage(Handler.java:102)
    at android.os.Looper.loop(Looper.java:163)
    at android.app.ActivityThread.main(ActivityThread.java:6205)
    at java.lang.reflect.Method.invoke(Native Method)
    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:904)
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:794)
Caused by: android.view.InflateException: Binary XML file line #17: Binary XML file line #17: Error inflating class android.widget.Button
Caused by: android.view.InflateException: Binary XML file line #17: Error inflating class android.widget.Button
Caused by: java.lang.reflect.InvocationTargetException
    at java.lang.reflect.Constructor.newInstance0(Native Method)
    at java.lang.reflect.Constructor.newInstance(Constructor.java:430)
    at android.view.LayoutInflater.createView(LayoutInflater.java:652)
    at com.android.internal.policy.PhoneLayoutInflater.onCreateView(PhoneLayoutInflater.java:58)
    at android.view.LayoutInflater.onCreateView(LayoutInflater.java:742)
    at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:810)
    at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:752)
    at android.view.LayoutInflater.rInflate(LayoutInflater.java:883)
    at android.view.LayoutInflater.rInflateChildren(LayoutInflater.java:846)
    at android.view.LayoutInflater.inflate(LayoutInflater.java:522)
    at android.view.LayoutInflater.inflate(LayoutInflater.java:430)
    at android.view.LayoutInflater.inflate(LayoutInflater.java:377)
    at com.android.internal.policy.PhoneWindow.setContentView(PhoneWindow.java:412)
    at android.app.Activity.setContentView(Activity.java:2496)
    at com.Test.App.MainActivity.onCreate(MainActivity.java:12)
    at android.app.Activity.performCreate(Activity.java:6864)
    at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1119)
    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2659)
    at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2767)
    at android.app.ActivityThread.-wrap12(ActivityThread.java)
    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1514)
    at android.os.Handler.dispatchMessage(Handler.java:102)
    at android.os.Looper.loop(Looper.java:163)
    at android.app.ActivityThread.main(ActivityThread.java:6205)
    at java.lang.reflect.Method.invoke(Native Method)
    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:904)
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:794)
Caused by: java.lang.OutOfMemoryError: Failed to allocate a 57341964 byte allocation with 16766488 free bytes and 22MB until OOM
    at dalvik.system.VMRuntime.newNonMovableArray(Native Method)
    at android.graphics.BitmapFactory.nativeDecodeAsset(Native Method)
    at android.graphics.BitmapFactory.decodeStream(BitmapFactory.java:624)
    at android.graphics.BitmapFactory.decodeResourceStream(BitmapFactory.java:457)
    at android.graphics.drawable.Drawable.createFromResourceStream(Drawable.java:1155)
    at android.content.res.ResourcesImpl.createFromResourceStream(ResourcesImpl.java:1272)
    at android.content.res.ResourcesImpl.loadDrawableForCookie(ResourcesImpl.java:743)
    at android.content.res.ResourcesImpl.loadDrawable(ResourcesImpl.java:585)
    at android.content.res.MiuiResourcesImpl.loadDrawable(MiuiResourcesImpl.java:308)
    at android.content.res.Resources.loadDrawable(Resources.java:876)
    at android.content.res.TypedArray.getDrawable(TypedArray.java:930)
    at android.view.View.<init>(View.java:4210)
    at android.widget.TextView.<init>(TextView.java:710)
    at android.widget.Button.<init>(Button.java:109)
    at android.widget.Button.<init>(Button.java:105)
    at android.widget.Button.<init>(Button.java:101)
    ... 27 more

Если же я пробую убрать сами кнопки[оставляю только "лого"], то выскакивает такая ошибка

java.lang.RuntimeException: Canvas: trying to draw too large(170459136bytes) bitmap.
    at android.view.DisplayListCanvas.throwIfCannotDraw(DisplayListCanvas.java:260)
    at android.graphics.Canvas.drawBitmap(Canvas.java:1415)
    at android.graphics.drawable.BitmapDrawable.draw(BitmapDrawable.java:528)
    at android.widget.ImageView.onDraw(ImageView.java:1316)
    at android.view.View.draw(View.java:17211)
    at android.view.View.updateDisplayListIfDirty(View.java:16193)
    at android.view.View.draw(View.java:16977)
    at android.view.ViewGroup.drawChild(ViewGroup.java:3729)
    at android.view.ViewGroup.dispatchDraw(ViewGroup.java:3515)
    at android.view.View.draw(View.java:17214)
    at android.view.View.updateDisplayListIfDirty(View.java:16193)
    at android.view.View.draw(View.java:16977)
    at android.view.ViewGroup.drawChild(ViewGroup.java:3729)
    at android.view.ViewGroup.dispatchDraw(ViewGroup.java:3515)
    at android.view.View.updateDisplayListIfDirty(View.java:16188)
    at android.view.View.draw(View.java:16977)
    at android.view.ViewGroup.drawChild(ViewGroup.java:3729)
    at android.view.ViewGroup.dispatchDraw(ViewGroup.java:3515)
    at android.view.View.updateDisplayListIfDirty(View.java:16188)
    at android.view.View.draw(View.java:16977)
    at android.view.ViewGroup.drawChild(ViewGroup.java:3729)
    at android.view.ViewGroup.dispatchDraw(ViewGroup.java:3515)
    at android.view.View.draw(View.java:17214)
    at com.android.internal.policy.DecorView.draw(DecorView.java:757)
    at android.view.View.updateDisplayListIfDirty(View.java:16193)
    at android.view.ThreadedRenderer.updateViewTreeDisplayList(ThreadedRenderer.java:648)
    at android.view.ThreadedRenderer.updateRootDisplayList(ThreadedRenderer.java:654)
    at android.view.ThreadedRenderer.draw(ThreadedRenderer.java:762)
    at android.view.ViewRootImpl.draw(ViewRootImpl.java:2842)
    at android.view.ViewRootImpl.performDraw(ViewRootImpl.java:2650)
    at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:2257)
    at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1296)
    at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:6401)
    at android.view.Choreographer$CallbackRecord.run(Choreographer.java:876)
    at android.view.Choreographer.doCallbacks(Choreographer.java:688)
    at android.view.Choreographer.doFrame(Choreographer.java:623)
    at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:862)
    at android.os.Handler.handleCallback(Handler.java:754)
    at android.os.Handler.dispatchMessage(Handler.java:95)
    at android.os.Looper.loop(Looper.java:163)
    at android.app.ActivityThread.main(ActivityThread.java:6205)
    at java.lang.reflect.Method.invoke(Native Method)
    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:904)
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:794)

Так вот, сам вопрос.. В чём может быть проблема и как это можно попробовать исправить?

P.S. Такая ошибка появляется не только в этом проекте, но и в других, где я подобным способом "отрисовываю".

P.P.S. У меня есть подозрения, что эта проблема не в программе[AIDE] или коде, а в устройстве(я компилирую и работаю пока на смартфоне)

P.P.P.S Раньше такой проблемы не было, появилась, как я считаю после сброса телефона и последующего обновления прошивки. Если это не так, и вы знаете причину проблемы, то буду рад, если вы развеете мои подозрения.

Answer 1

Всё оказалось не так плохо, как я себе накрутил. Решение оказалось простым: надо было уменьшить размер изображений.

READ ALSO
ACTION_FOUND Broadcast inside bound service

ACTION_FOUND Broadcast inside bound service

Мне необходимо выполнить поиск bluetooth устройств внутри привязанной службы (bounded service) с помощью функции startdiscoveryДля этого надо установить broadcast...

244
Как работает метод flush() в spring-data-jpa?

Как работает метод flush() в spring-data-jpa?

Есть проект на стеке spring-boot-20

320
Задать формат времени в часах

Задать формат времени в часах

Пишу приложения для часов

236
Треугольник на css. Border закрывает другие блоки

Треугольник на css. Border закрывает другие блоки

Есть подменю, где в вёрстке используется треугольник на cssПроблема в том что его прозрачные границы "закрывают" ссылки в подменю

253