50個以上のボタンがある画面を設計する必要があります。ボタンをプログラムで作成することはできず、ボタンのサイズと位置が規則的ではないため、手動でXMLレイアウトに配置する必要があります。 しかし、私は50以上のボタンでXMLレイアウトを設計し、アクティビティでそれをうまく膨らませることができました。Android - 多くのビューを生成するときにアプリケーションがメインスレッドであまりにも多くの作業をしている可能性があります
プロジェクトをビルドすると、スムーズに動作するように見えますが、ログに表示されます。
I/Choreographer: Skipped 56 frames! The application may be doing too much work on its main thread.
この問題が発生していないレイアウトを構築する良いアイデアはありますか?
明確にするために、UIの外観を示すスクリーンショットを添付しました。 ご覧のとおり、クリック可能なすべての葉が必要です。色を変更する必要があります。
このアクティビティをアプリで再読み込みするとクラッシュすることがあります。 ここにクラッシュログがあります。
FATAL EXCEPTION: main Process: com.au.therefreshproject.refreshandgogreen, PID: 14151 java.lang.OutOfMemoryError: Failed to allocate a 301476 byte allocation with 77600 free bytes and 75KB until OOM at dalvik.system.VMRuntime.newNonMovableArray(Native Method) at android.graphics.BitmapFactory.nativeDecodeAsset(Native Method) at android.graphics.BitmapFactory.decodeStream(BitmapFactory.java:609) at android.graphics.BitmapFactory.decodeResourceStream(BitmapFactory.java:444) at android.graphics.drawable.Drawable.createFromResourceStream(Drawable.java:1080) at android.content.res.Resources.loadDrawableForCookie(Resources.java:2635) at android.content.res.Resources.loadDrawable(Resources.java:2540) at android.content.res.TypedArray.getDrawable(TypedArray.java:870) at android.graphics.drawable.StateListDrawable.inflateChildElements(StateListDrawable.java:170) at android.graphics.drawable.StateListDrawable.inflate(StateListDrawable.java:115) at android.graphics.drawable.Drawable.createFromXmlInner(Drawable.java:1215) at android.graphics.drawable.Drawable.createFromXml(Drawable.java:1124) at android.content.res.Resources.loadDrawableForCookie(Resources.java:2630) at android.content.res.Resources.loadDrawable(Resources.java:2540) at android.content.res.TypedArray.getDrawable(TypedArray.java:870) at android.view.View.(View.java:3948) at android.widget.TextView.(TextView.java:677) at android.widget.Button.(Button.java:109) at android.widget.Button.(Button.java:105) at android.support.v7.widget.AppCompatButton.(AppCompatButton.java:62) at android.support.v7.widget.AppCompatButton.(AppCompatButton.java:58) at android.support.v7.app.AppCompatViewInflater.createView(AppCompatViewInflater.java:109) at android.support.v7.app.AppCompatDelegateImplV7.createView(AppCompatDelegateImplV7.java:1008) at android.support.v7.app.AppCompatDelegateImplV7.onCreateView(AppCompatDelegateImplV7.java:1067) at android.support.v4.view.LayoutInflaterCompatHC$FactoryWrapperHC.onCreateView(LayoutInflaterCompatHC.java:44) at android.view.LayoutInflater$FactoryMerger.onCreateView(LayoutInflater.java:189) at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:746) at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:704) at android.view.LayoutInflater.rInflate(LayoutInflater.java:835) at android.view.LayoutInflater.rInflateChildren(LayoutInflater.java:798) at android.view.LayoutInflater.rInflate(LayoutInflater.java:838) at android.view.LayoutInflater.rInflateChildren(LayoutInflater.java:798) at android.view.LayoutInflater.rInflate(LayoutInflater.java:838) at android.view.LayoutInflater.rInflateChildren(LayoutInflater.java:798) at android.view.LayoutInflater.rInflate(LayoutInflater.java:838) at android.view.LayoutInflater.rInflateChildren(LayoutInflater.java:798) at android.view.LayoutInflater.rInflate(LayoutInflater.java:838) at android.view.LayoutInflater.rInflateChildren(LayoutInflater.java:798) at android.view.LayoutInflater.inflate(LayoutInflater.java:515) at android.view.LayoutInflater.inflate(LayoutInflater.java:423)
XMLレイアウトの一部がここにあります。あなたはビットマップで作業しているとき
<RelativeLayout
android:layout_width="320dp"
android:layout_height="400dp"
android:layout_centerHorizontal="true"
android:layout_alignParentBottom="true">
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="@drawable/tree_01"
android:layout_alignParentBottom="true"/>
<Button
android:id="@+id/treenBtn0"
android:layout_width="19dp"
android:layout_height="31dp"
android:layout_marginLeft="31dp"
android:layout_marginTop="90dp"
android:tag="28"
android:background="@drawable/tree_02"/>
<Button
android:id="@+id/treenBtn1"
android:layout_width="27dp"
android:layout_height="22dp"
android:layout_marginLeft="10dp"
android:layout_marginTop="122dp"
android:tag="29"
android:background="@drawable/tree_03"/>
と描画可能リソースが
drawable/tree_02.xml
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_selected="true" android:drawable="@drawable/tree_02_on"/>
<item android:drawable="@drawable/tree_02_off"/>
</selector>
drawable/tree_03.xml
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_selected="true" android:drawable="@drawable/tree_03_on"/>
<item android:drawable="@drawable/tree_03_off"/>
</selector>
を拭いてください。あなたはスケッチやUIの見た目のスクリーンショットを共有できますか? – JoelFernandes
確かに、私はすぐにスクリーンショットを添付します。 – star99
最良の方法は、ビュータイプでRecyclerビューを使用することです。 50のうち、少なくとも一部には同じタイプのレイアウトがあります。条件に応じて、ビュータイプを変更することができます。 –