2

私は実際にカスタムArrayAdapterによって供給されるListActivityを持っています。単一のImageViewによって作成された行を作成します。ポートレートモードでは見栄えがします。ただし、横向きモードでは、画像が境界線まで引き伸ばされます(scaleTypeをfitXYに設定します)。
横向きモードで行ごとに2つのImageViewが必要です。GridViewは正しいレイアウトですか?
これをどのように行いますか?

私は480x800の画面を持っているので、縦向きではImageViewの幅は480ピクセルになり、横向きでは2つそれぞれの幅は400ピクセルになります。これは問題ではありませんが、幅と高さの比率を尊重することは私にとって重要です。

4

5 に答える 5

3

Gridviewを使用してタスクを実行してみませんか。リストビューを使用する場合は、方向に基づいて方向を確認する必要があります

1)ランドスケープモードでは、2つのimageviewを含むlayout-land/からのレイアウトがロードされます。

2)ポートレートモードでは、1つのimageviewを含むlayout-port/からのレイアウトがロードされます。

于 2012-09-17T14:00:57.813 に答える
2

はい、GridViewこれが最善かつ最も簡単なアプローチです。あなたは同じカスタムを使用することができます、ArrayAdapterそしてOnClickListenerあなたは今持っていますListView、そして変更する必要があるだけです

ListView myList = (ListView) findViewById(R.id.list);

GridView myGrid = (GridView) findViewById(R.id.gridview);

xmlは次のようになります。

 <GridView
        android:id="@+id/gridview"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:columnWidth="390px"
        android:gravity="center"
        android:numColumns="auto_fit"
        android:stretchMode="columnWidth" />

ここで、単位として「px」を使用するのを避け、代わりに「dp」を使用する必要があります。これは、アプリが480x800の解像度のみで設計されていることが本当に確実な場合に限ります。

于 2012-09-17T14:37:35.043 に答える
1

gridViewはあまりレイアウトではありません。これはadapterViewであるため、その目的は、大量のビューを「表示」し、それらの間をスクロールできるようにすることです。

代わりにgridLayoutを使用したいですか?比較可能性ライブラリもあります...

とにかく、gridViewを使い続けたい場合は、縦向きandroid:numColumnsモードの場合はvaluesフォルダーを介して設定した変数に、横向きに必要な値の場合はvalues-landに設定するだけです。


編集:これがgridViewを使用するソリューションです:

レイアウトxmlファイルには次のようなものが含まれている必要があります。

<GridView android:layout_width="match_parent"
  android:numColumns="@integer/cols" android:layout_height="match_parent"
  />

res/values次のようなフォルダーにxmlファイル(「consts.xml」など)を作成します。

<?xml version="1.0" encoding="utf-8"?>
<resources>
  <item type="integer" name="cols">2</item>
</resources>

また、フォルダ内に同じファイルを作成しres/values-land、2を3に設定します。

于 2012-09-17T13:59:34.973 に答える
1

オリエンテーションごとに異なるリソースを提供できます。したがって、デバイスが横向きの場合、すべてのアイテムに2つのがListView含まれるレイアウトを入力しImageView、縦向きの場合、レイアウトはImageViewアイテムごとに1つになります。

さまざまな方向にさまざまなレイアウトXMLを提供する方法については、「リソースの提供」を参照してください。

サンプルコード:

// Create an anonymous implementation of OnClickListener
private OnClickListener mImageListener = new OnClickListener() {
    public void onClick(View v) {
      // do something when the ImageView is clicked
    }
};

//Check the orientation and handle accordingly in the getView
public View getView (int position, View convertView, ViewGroup parent){
    if(convertView == null){
        convertView = (LinearLayout)inflater.inflate(R.layout.list_item, parent);
    }
    ImageView leftImage = (ImageView)convertView.findViewById(R.id.leftImage);
    ImageView rightImage = (ImageView)convertView.findViewById(R.id.rightImage);
    boolean isTwoColumn = (rightImage != null);

    //If it is two column layout, set both ImageViews
    if(isTwoColumn){
      leftImage.setImageResource(...);
      leftImage.setOnClickListener(mImageListener);
      rightImage.setImageResource(...);
      rightImage.setOnClickListener(mImageListener);
    }else{
      leftImage.setImageResource(...);
      leftImage.setOnClickListener(mImageListener);
    }
}

/res/layout-land/list-item.xml

<LinearLayout
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:orientation="horizontal">
    <ImageView
      android:id="+@id/leftImage"
      android:layout_width="wrap_content"
      android:layout_height="wrap_content">
    <ImageView
      android:id="+@id/rightImage"
      android:layout_width="wrap_content"
      android:layout_height="wrap_content">
</LinearLayout>

/res/layout-port/list-item.xml

<LinearLayout
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:orientation="horizontal">
    <ImageView
      android:id="+@id/leftImage"
      android:layout_width="wrap_content"
      android:layout_height="wrap_content">
</LinearLayout>
于 2012-09-17T14:11:38.273 に答える
0

私はGridviewを試してみましたが、個人的には、自分が求めていたディスプレイ(内部の小さなセルの比率が正しいディスプレイ)を取得するのが非常に面倒であることがわかりました...さまざまな解像度と画面フォーマットで何週間もそれを試した後、独自のグリッドビューを作成することを選択しましたゼロから、振り返っていません。

Gridviewにメリットがないわけではありませんが、独自のシステムを実装するには数時間かかります。システムの動作方法を明確に理解している場合は、おそらく簡単に操作できます。独自にコーディングします。

本質的には、ViewGroupから派生した単なるクラスであり、onMeasureアイテムとonLayoutアイテムをオーバーライドして、含まれている子ビューを測定し、次にそれらを画面上の目的の場所にレイアウトします。

長いリストを探している場合でも、リストビューを見るか、グリッドビューを試してみる価値があるかもしれませんが、必要に応じてすべてを制御できることを知っておくと、これは確かに安心です。

于 2012-09-17T14:05:51.543 に答える