Layout API-зависимый? - PullRequest
       25

Layout API-зависимый?

0 голосов
/ 17 марта 2012

Идея, которую я пытаюсь воплотить, состоит в том, чтобы напечатать гриф гитары и сверху несколько квадратов, чтобы указать некоторые ноты. Ну, картинка стоит тысячи слов, так что вот оно работает в Android 2.3.3

"Зачем тебе наша помощь, так ?!" Потому что я пытался запустить его в Android 4.0.3 и , этот другой был результатом. Я понял (оставив только один квадрат), что квадраты пытались быть как можно большими, поэтому я добавил точку [counter] .setScaleType (ScaleType.CENTER) для каждой точки и получил это (http://i.imgur.com/4yOJD.png Извините, я могу ' t опубликовать другую гиперссылку), в то время как 2.3.3 остался таким же, как и первый захват Это делает меня неспособным сделать setPadding () для каждой точки универсально, так как она отличается в двух версиях. Должен заметить, что это ПОЛНОСТЬЮ один и тот же код, просто работающий в разных AVD (я также пробовал физические устройства с одинаковым результатом).

Я также пытался изменить гравитацию макета в коде и в XML, но безрезультатно.

Я копирую то, что, по моему мнению, имеет отношение к ситуации, но не стесняйтесь просить что-нибудь еще.

Это мой простой макет:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/RelativeLayout1"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:gravity="top"
android:orientation="vertical" >

<TextView
    android:id="@+id/textView1"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignParentTop="true"
    android:layout_centerHorizontal="true"
    android:text="@string/add"
    android:textAppearance="?android:attr/textAppearanceLarge" />


<FrameLayout
    android:id="@+id/layoutFrets"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignParentBottom="true"
    android:layout_centerHorizontal="true" >

    <ImageView
        android:id="@+id/imageView1"
        android:scaleType="fitXY"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:src="@drawable/fretboard" />

</FrameLayout>

А вот код действия, которое генерирует и печатает точки:

Чтобы создать ImageViews:

for (int i = 0; i<notesN; i++)
        dot[i] = new ImageView(this);

И чтобы распечатать их, я должен был это сделать, так как для печати точек мне нужен размер макета. OK

fl.post(new Runnable(){
        public void run() {
            int counter = 0;

            //Pointless constants go here to print the dots in their place              

            for (int strings = 0; strings < fretboard.NSTRINGS; strings++){
                for (int frets = 0; frets < fretboard.NFRETS; frets++){

                    if (fretboard.isOccupied(strings, frets)){
                        dot[counter].setScaleType(ScaleType.CENTER);
                        dot[counter].setImageResource(R.drawable.dot);  

                        //Quite a messy code... calculates the positions based
                        //on the constants above
                        dot[counter].setPadding(
                                (int) (-fl.getWidth() + 2 * fl.getWidth()
                                        * fretDistance[frets]),
                                (int) (fl.getHeight() * (stringDistance[strings])),
                                0, 0);

                        fl.addView(dot[counter]);
                        counter++;
                    }
                }
            }

        }

    });

Это касается последнего захвата, который я вам дал.

Я также пытался запустить ImageViews вне метода post (), с тем же результатом.

Есть идеи, что я делаю не так? Спасибо ОЧЕНЬ большое заранее :) 1031 *

1 Ответ

0 голосов
/ 18 марта 2012

Я проснулся с идеей изменить тип макета ... и это сработало.

Изменил FrameLayout для относительной разметки, и все заработало как положено.

Я все еще буду следить за этой веткой на случай, если кто-то сможет дать объяснение, почему это произошло.

...