0

2つのコンポーネントを使用してAndroidでDialogFragmentを作成したいと思います。左側に画像のあるGridView、右側に大きな画像(グリッドビューで選択した画像の大きいバージョン)です。

問題は、自分の大きな画像が見えないことです。GridViewがすべてのスペースを占めているようです。

これは私のXMLです:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:paddingLeft="16dp"
android:paddingRight="16dp"
android:orientation="horizontal" 
android:background="#FFFFFF">

<GridView xmlns:android="http://schemas.android.com/apk/res/android" 
android:id="@+id/image_overview"
android:layout_width="wrap_content" 
android:layout_height="fill_parent"
android:columnWidth="50dp"
android:numColumns="1"
android:gravity="left"
android:background="#FFFFFF"
/>

<ImageView
android:id="@+id/main_image"
android:layout_width="wrap_content"
android:layout_height="fill_parent"
android:layout_gravity="center"
android:background="#FFFFFF"
/>
</LinearLayout>

私はすでに多くのパラメーターを試し、違いが生じるかどうかを確認しましたが、何も役に立ちません。グリッドビューは小さいですが(小さいサイズを配置したため)、右側のスペースは空です。

グリッドビューを削除すると、大きな画像が表示されます。グリッドビューに特定の幅を設定すると、大きな画像も表示されます。

したがって、GridViewの次の行を変更すると

    android:layout_width="wrap_content" 

    android:layout_width="100dp" 

期待どおりに動作します。wrap_contentがはるかに大きな幅を設定しているようです。

これは私のtopvewを作成するためのコードです(影響があるかどうかを確認するためにいくつかのことを試したため、一部のコードはコメントです):

    @Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
        Bundle savedInstanceState) {
    getDialog().setTitle("Title Item");

    //Get complete View
    topView = inflater.inflate(R.layout.something, container, false);
imageAdapter = new ImageAdapter(this.getDialog().getContext());

    //Create the left panel (gridview of small images)
    GridView gridview = (GridView)topView.findViewById(R.id.image_overview);
    gridview.setAdapter(imageAdapter);
    gridview.setOnItemClickListener(new OnItemClickListener() {
        public void onItemClick(AdapterView<?> parent, View v, int position, long id) {
            currentBigImage = imageAdapter.getFilePath(position);
            updateMainImage();
        }

    });

    //gridview.setAdjustViewBounds(true);

    //Create the middle panel (big image)
    imageView = (ImageView)topView.findViewById(R.id.main_image);
    imageView.setScaleType(ImageView.ScaleType.CENTER_INSIDE);
    //imageView.setAdjustViewBounds(true);
    //imageView.setPadding(8, 8, 8, 8);
    updateMainImage();
    //v.invalidate();

    return topView;
}

これは私のアダプターからのコードです(小さな画像の単一のビューを作成します):

public View getView(int position, View convertView, ViewGroup parent) {
    ImageView imageView;
    if (convertView == null) {  // if it's not recycled, initialize some attributes
        imageView = new ImageView(mContext);
        imageView.setLayoutParams(new GridView.LayoutParams(50, 50));
        //imageView.setAdjustViewBounds(true);
        imageView.setScaleType(ImageView.ScaleType.CENTER_INSIDE);
        imageView.setPadding(8, 8, 8, 8);
    } else {
        imageView = (ImageView) convertView;
    }
    imageView.setImageBitmap(BitmapFactory.decodeFile(paths.get(position)));
Log.i("parent.getWidth(): ", ""+parent.getWidth());
    return imageView;
}

ご覧のとおり、非常に大きな数値である親の幅も印刷しています。ここのビューはグリッドビュー内の単一のアイテムであるため、親はグリッドビューであると思いますか?もしそうなら、それがwrap_contentで設定されているので、幅が大きいのが正常かどうかはわかりませんが、Androidが特定のサイズのダイアログを作成する場合はwrap_contentでも正常である可能性があります。

固定サイズの代わりにwrap_contentを使用する方法を誰かが知っていますか?

4

2 に答える 2

1

まず、AndyHarrisとDipakKeshariyaにご協力いただきありがとうございます。問題は完全には解決しませんでしたが、android:layout_weight="0"が問題につながる可能性があることを理解するのに役立ちました。

ここに回答を投稿する前に、私はすでに構成を試みました

android:layout_weight="1"

imageviewの場合のみですが、それは機能しませんでした。両方とも1にすると、ImageViewが表示されますが、正しく表示されません。imageviewのサイズは正しいように見えますが、画像の一部が大きく表示されています(拡大されています)。

ImageView.ScaleTypeとAdjustViewBoundsで遊んでみましたが、何も機能しません。

設定した場合

android:layout_weight="1"

GridViewの場合のみ、GridViewとImageViewの両方が正しく表示されますが、その場合、gridviewは対応するすべての幅を占めるため、ダイアログはタブレットの画面と同じ幅になります(parentviewの幅をmatch_parentに変更するとそれを変更しないでください)。

なので、とりあえず固定サイズを使い続けます。

助けてくれてありがとう!

于 2012-08-19T15:13:46.537 に答える
0

GridViewとImageViewの両方で、次を使用します。

android:layout_width="0dp"
android:layout_weight="1"

これで修正されるはずです。一方のビューがもう一方のビューよりも多くの使用可能な画面スペースを占めるようにしたい場合は、ビューごとに異なる重みを使用してみることができます。

于 2012-08-16T01:56:28.293 に答える