Android-расположение ldpi выглядит по-разному на 2 разных устройствах ldpi (X10 Mini и FlipOut) - PullRequest
1 голос
/ 12 сентября 2011

Моя проблема в том, что результат макета выглядит по-разному на x10 mini и на откидной панели.

результат выглядит следующим образом: enter image description here

Левый результат - результатX10 mini и правый от Motorola Flipout.К сожалению, у меня нет другого устройства ldpi для проверки, которое является «правильным».

Вот проблемы и то, что я пробовал до сих пор:

1.Размер текстового пузыря не одинаков.но они оба используют одну и ту же битовую карту (я, конечно, пишу ldpi на битовой карте).Основная проблема, как представляется, в том, что плотность X10 mini довольно высока для небольшого устройства.X10 mini имеет 156 точек на дюйм (mdpi = 160), а откидная крышка имеет 120 точек на дюйм.Это приложение имеет интегрированный admob и размер баннера также различаются.На X10 mini он выглядит хорошо, на FlipOut он намного больше.Он загружает размер для устройств MDDP.(Я только что упомянул это, потому что это могло бы помочь решить эту проблему.) Я назвал папку drawable "drawable-ldpi".

2.Первый аватар меньше, четче и яснее, потому что я установил плотность растрового изображения на DENSITIY_MEDIUM.bitmap.setDensity(DisplayMetrics.DENSITY_MEDIUM); Если я установлю его на DENSITY_LOW, оно будет похоже на другие растровые изображения.И ширина и высота не 40px (как я масштабировал)

Вот код:

XML-файл макета:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:background="@color/orange"
    android:paddingTop="15dp"
    >
    <!-- Content -->
    <LinearLayout
        android:orientation="vertical"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        >
        <!-- Text Bubble -->
        <FrameLayout 
            android:layout_width="wrap_content"
            android:layout_height="fill_parent"
            android:layout_gravity="center"
            android:layout_weight="1"
            android:paddingLeft="15dp"
            android:paddingRight="15dp"
            >
            <TextView
                android:id="@+id/text_avater"
                style="@style/bubble_normal"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_gravity="center"
                android:text="@string/avatar"
                />
        </FrameLayout>
        <!-- Avatar -->
        <LinearLayout
            android:orientation="vertical"
            android:layout_width="fill_parent" 
            android:layout_height="fill_parent"
            android:gravity="center" android:layout_weight="0.5">
            <!-- Avatar 1st row -->
            <LinearLayout 
                android:orientation="horizontal"
                android:layout_weight="1"
                android:gravity="center" android:layout_width="match_parent" android:layout_height="wrap_content">
                <FrameLayout 
                    android:layout_weight="1" android:layout_width="wrap_content" android:layout_height="wrap_content">
                    <Button
                        android:id="@+id/button_avater1"
                        android:layout_width="wrap_content"
                        android:layout_height="wrap_content"
                        android:layout_gravity="center"
                        android:background="@drawable/avatar1"
                        />
                </FrameLayout>
                <FrameLayout 
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:layout_weight="1"
                    >
                    <Button 
                        android:id="@+id/button_avater2"
                        android:layout_width="wrap_content"
                        android:layout_height="wrap_content"
                        android:layout_gravity="center"
                        android:background="@drawable/avatar2"
                        />
                </FrameLayout>
                <FrameLayout 
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:layout_weight="1"
                    >
                    <Button 
                        android:id="@+id/button_avater3"
                        android:layout_width="wrap_content"
                        android:layout_height="wrap_content"
                        android:layout_gravity="center"
                        android:background="@drawable/avatar3"
                        />
                </FrameLayout>
            </LinearLayout>
            <!-- /Avatar 1st row -->
            <!-- Avatar 2nd row -->
            <LinearLayout 
                android:orientation="horizontal"
                android:layout_width="fill_parent"
                android:layout_height="wrap_content"
                android:layout_weight="1"
                android:gravity="center"
                >
                <FrameLayout 
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:layout_weight="1"
                    >
                    <Button 
                        android:id="@+id/button_avater4"
                        android:layout_width="wrap_content"
                        android:layout_height="wrap_content"
                        android:layout_gravity="center"
                        android:background="@drawable/avatar0"
                        />
                </FrameLayout>
                <FrameLayout 
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:layout_weight="1"
                    >
                    <Button 
                        android:id="@+id/button_avater5"
                        android:layout_width="wrap_content"
                        android:layout_height="wrap_content"
                        android:layout_gravity="center"
                        android:background="@drawable/avatar0"
                        />
                </FrameLayout>
                <FrameLayout 
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:layout_weight="1"
                    >
                    <Button 
                        android:id="@+id/button_avater6"
                        android:layout_width="wrap_content"
                        android:layout_height="wrap_content"
                        android:layout_gravity="center"
                        android:background="@drawable/avatar0"
                        />
                </FrameLayout>
            </LinearLayout>
            <!-- /Avatar 2nd row -->
            <!-- Avatar 3rd row -->
            <LinearLayout 
                android:orientation="horizontal"
                android:layout_width="fill_parent"
                android:layout_height="wrap_content"
                android:layout_weight="1"
                android:gravity="center"
                >
                <FrameLayout 
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:layout_weight="1"
                    >
                    <Button 
                        android:id="@+id/button_avater7"
                        android:layout_width="wrap_content"
                        android:layout_height="wrap_content"
                        android:layout_gravity="center"
                        android:background="@drawable/avatar0"
                        />
                </FrameLayout>
                <FrameLayout 
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:layout_weight="1"
                    >
                    <Button 
                        android:id="@+id/button_avater8"
                        android:layout_width="wrap_content"
                        android:layout_height="wrap_content"
                        android:layout_gravity="center"
                        android:background="@drawable/avatar0"
                        />
                </FrameLayout>
            </LinearLayout>
            <!-- /Avatar 3rdst row -->
        </LinearLayout>
        <!-- /Avatar -->
        <!-- Button -->
        <LinearLayout
            android:orientation="horizontal"
            android:layout_width="fill_parent" 
            android:layout_height="fill_parent"
            android:layout_weight="1.15"
            android:gravity="center"
            >
            <FrameLayout 
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_weight="1"
                >
                <Button
                    android:id="@+id/button_mainmenu"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:layout_gravity="center|bottom"
                    android:layout_weight="1"
                    android:text="@string/mainmenu"
                    style="@style/button_small"
                    />
            </FrameLayout>
            <FrameLayout 
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_weight="1"
                >
                <Button
                    android:id="@+id/button_done"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:layout_gravity="center|bottom"
                    android:layout_weight="1"
                    android:text="@string/done"
                    style="@style/button_small"
                    />
            </FrameLayout>
        </LinearLayout>
        <!-- /Button -->
    </LinearLayout>
    <!-- /Content -->
</RelativeLayout>

стиль выглядит следующим образомthis:

<style name="bubble_normal">
    <item name="android:gravity">center</item>
    <item name="android:textColor">@color/black</item>
    <item name="android:textStyle">bold</item>
    <item name="android:background">@drawable/text_bubble_normal</item>
    <item name="android:textSize">@dimen/standard_text_size</item>
</style>

Размер растрового изображения составляет 210 x 93.

Растровые изображения аватара, которые я загружаю программно:

private void setupView() {
    byte numberOfPlayer = (byte) StbApp.getPlayer().size();
    int avatarSize = Player.avatarSize;
    Log.d(TAG, "avatarSize: " + avatarSize); // avatarSize: 40px

    Bitmap bitmap = Bitmap.createScaledBitmap(
            StbApp.getPlayer().get(0).getAvatar(), 
            avatarSize, 
            avatarSize, 
            true
            );
    bitmap.setDensity(DisplayMetrics.DENSITY_MEDIUM);

    BitmapDrawable bitmapDrawable = new BitmapDrawable(
            bitmap
            );

    avatarBtn[0] = (Button) findViewById(R.id.button_avater1);
    avatarBtn[0].setBackgroundDrawable(bitmapDrawable);
    avatarBtn[0].setOnClickListener(this);


    bitmapDrawable = new BitmapDrawable(
            Bitmap.createScaledBitmap(
                    StbApp.getPlayer().get(1).getAvatar(), 
                    avatarSize,
                    avatarSize, 
                    true
                    )
            );
    avatarBtn[1] = (Button) findViewById(R.id.button_avater2);
    avatarBtn[1].setBackgroundDrawable(bitmapDrawable);
    avatarBtn[1].setOnClickListener(this);

    bitmapDrawable = new BitmapDrawable(
            Bitmap.createScaledBitmap(
                    StbApp.getPlayer().get(2).getAvatar(), 
                    avatarSize, 
                    avatarSize, 
                    true
                    )
            );
    avatarBtn[2] = (Button) findViewById(R.id.button_avater3);
    avatarBtn[2].setBackgroundDrawable(bitmapDrawable);
    avatarBtn[2].setOnClickListener(this);

    avatarBtn[3] = (Button) findViewById(R.id.button_avater4);
    avatarBtn[3].setOnClickListener(this);

    avatarBtn[4] = (Button) findViewById(R.id.button_avater5);
    avatarBtn[4].setOnClickListener(this);

    avatarBtn[5] = (Button) findViewById(R.id.button_avater6);
    avatarBtn[5].setOnClickListener(this);

    avatarBtn[6] = (Button) findViewById(R.id.button_avater7);
    avatarBtn[6].setOnClickListener(this);

    avatarBtn[7] = (Button) findViewById(R.id.button_avater8);
    avatarBtn[7].setOnClickListener(this);

    mainMenuBtn = (Button) findViewById(R.id.button_mainmenu);
    mainMenuBtn.setOnClickListener(this);

    doneBtn = (Button) findViewById(R.id.button_done);
    doneBtn.setOnClickListener(this);

    //prepare avatar_0 if needed
    if (numberOfPlayer < 8){
        Bitmap avatarNull = BitmapFactory.decodeResource(getResources(), R.drawable.avatar0);
        avatarNull = Player.strokeBitmap(avatarNull);
        avatarNull = Bitmap.createScaledBitmap(
                avatarNull, 
                avatarSize, 
                avatarSize, 
                true
            );

        for (byte i = 3; i < 8; i++){
            if (i < numberOfPlayer){
                bitmapDrawable = new BitmapDrawable(
                            Bitmap.createScaledBitmap(StbApp.getPlayer().get(i).getAvatar(), 
                            avatarSize, 
                            avatarSize, 
                            true)
                        );
            }
            else{
                bitmapDrawable = new BitmapDrawable(avatarNull);
            }
            avatarBtn[i].setBackgroundDrawable(bitmapDrawable);
        }
    } 
    //8 player no avatar0 needed
    else{
        for (byte i = 3; i < numberOfPlayer; i++){
            bitmapDrawable = new BitmapDrawable(StbApp.getPlayer().get(i).getAvatar());
            avatarBtn[i].setBackgroundDrawable(bitmapDrawable);
        }           
    }
}

1 Ответ

1 голос
/ 11 октября 2011

После преобразования Bitmap в BitmapDrawable мне нужно установить targetDensitiy с помощью BitmapDrawable.setTargetDensity(dpi);

Я сделал это так:

metrics = new DisplayMetrics();
getWindowManager().getDefaultDisplay().getMetrics(metrics);

tempAvatarBitmap = BitmapFactory.decodeStream(fis, null, opt);
tempAvatarBitmap = Bitmap.createScaledBitmap(
            StbApp.getPlayer().get(requestCode-1).getAvatar(), 
                Player.avatarSize, 
                Player.avatarSize, 
                true
            );

BitmapDrawable drawable = new BitmapDrawable(tempAvatarBitmap);
drawable.setTargetDensity(metrics.densityDpi);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...