Почему мое изображение исчезает при изменении ориентации в другом файле макета для ландшафта? - PullRequest
0 голосов
/ 29 июня 2018

У меня есть файл макета для элементов списка в портретном режиме. Это очень хорошо работает при подгонке экрана, сохраняя одинаковый размер для изображений и поддерживая соотношение сторон:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="horizontal"
    android:layout_width="match_parent"
    android:layout_height="match_parent">
        <LinearLayout
            android:orientation="vertical"
            android:layout_width="match_parent"
            android:layout_height="wrap_content">

            <ImageView
                android:id="@+id/image"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:adjustViewBounds="true"
                android:scaleType="fitCenter" />
       </LinearLayout>
...
</RelativeLayout>

Затем у меня есть довольно похожий файл для альбомной версии, я использую только веса, чтобы изображение занимало половину ширины экрана (целью является получение квадратного изображения аналогичного размера). Рядом с этим есть относительное расположение с весом 1. Не должны ли они оба занимать половину экрана сейчас?

 <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="horizontal"
    android:layout_width="match_parent"
    android:layout_height="match_parent">  
    <LinearLayout
                android:orientation="vertical"
                android:layout_weight="1"
                android:layout_width="0dp"
                android:layout_height="wrap_content"
                android:adjustViewBounds="true"
                android:scaleType="fitCenter">

                <ImageView
                    android:id="@+id/image"
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content" />
           </LinearLayout>

     <RelativeLayout
            android:layout_toRightOf="@+id/image"
            android:layout_width="wrap_content"
            android:layout_height="match_parent"
            android:layout_weight="1"
            android:layout_width="0dp">
           ...
     </RelativeLayout>
</RelativeLayout>

Ну, вместо этого я не вижу изображения или текста. Что я здесь не так делаю?

Обновление Вот код из моей деятельности:

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        if (savedInstanceState == null) {
            getSupportFragmentManager().beginTransaction()
                    .add(R.id.container, new CardFragment())
                    .commit();
        }
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        getMenuInflater().inflate(R.menu.menu_main, menu);
        return true;
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        int id = item.getItemId();

        if (id == R.id.action_refresh) {
            return true;
        }

        return super.onOptionsItemSelected(item);
    }
}

Обновление 2

Здесь я устанавливаю ресурс imageView

 public class BitmapDisplayer implements Runnable
{
    Bitmap bitmap;
    CakeImageToLoad imageToLoad;
    public BitmapDisplayer(Bitmap b, CakeImageToLoad p){bitmap=b;imageToLoad=p;}
    public void run()
    {
        if(imageViewReused(imageToLoad))
            return;
        if(bitmap!=null)
            imageToLoad.imageView.setImageBitmap(bitmap);
    }
}

private static Bitmap convertToBitmap(byte[] data) {
    return BitmapFactory.decodeByteArray(data, 0, data.length);
}

1 Ответ

0 голосов
/ 29 июня 2018

<LinearLayout
        android:orientation="vertical"
        android:layout_width="1"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:adjustViewBounds="true"
        android:scaleType="fitCenter">
...

У вас есть 2 layout_width, я думаю, один из них должен был быть весом.

И я думаю, что для того, чтобы занимать половину экрана, относительная компоновка также должна иметь ширину 0 и вес 1

.
...