1

私はAndroidアプリを開発しています。私のアプリでは、動的にビューのリストを膨らませる必要があります。私はそれらを加えて働きました。問題は、レイアウトの幅と高さを設定することです。今私は簡単なプロジェクトで私の問題を実証します。実際、私のプロジェクトは、この単純なプロジェクトよりはるかに複雑です。AndroidでXMLの膨張したビューのレイアウトの幅、高さ、重さを設定できません

私はこのレイアウトにビューを膨張させています。

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

      </LinearLayout> 

私は、ビットマップのリストをループして注意してください従っ

for(Bitmap bmp : bitmaps) 
{ 
    View preview = layoutInflater.inflate(R.layout.item_cm_preview_image,null); 
       ImageView previewImageView = (ImageView)preview.findViewById(R.id.item_cm_preview_image); 
       previewImageView.setImageBitmap(bmp); 
    container.addView(preview); 
} 

として動的にビューを追加していが、上記のコードでは、コンテナは、のLinearLayoutは、上記で親XMLに動的に追加されます。

container = new LinearLayout(this); 
        container.setOrientation(LinearLayout.HORIZONTAL); 
        LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT); 
        container.setLayoutParams(params); 

parentLinearLayout.addView(container); 

あなたが見ることができるようにこれは

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout 
    android:layout_weight="1" 
    android:layout_height="400dp" 
    android:layout_width="0dp" 
    xmlns:android="http://schemas.android.com/apk/res/android"> 
    <ImageView 
     android:scaleType="centerCrop" 
     android:id="@+id/item_cm_preview_image" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" /> 
</LinearLayout> 

私item_cm_preview_image.xmlですが、私はXMLで1に、幅0とlayout_weightを400dpするレイアウトの高さを設定します。したがって、layout_weightのために、すべてのイメージの高さは同じでなければならず、widthは等しくなければなりません。しかし結果は期待通りではありません。下のスクリーンショットを見ることができます。あなたはスクリーンショットで見ることができるように

enter image description here

、両方layout_weightと高さは、すべて膨張したビューのために働いていません。しかし、追加のViewGroupを動的に追加してそのレイアウトにビューを膨張させると、それは機能しています。以下は私のコードは

//This happening in for loop 
LinearLayout wrapper = new LinearLayout(this); 
       wrapper.setLayoutParams(new LinearLayout.LayoutParams(0,500,1)); 

       View preview = layoutInflater.inflate(R.layout.item_cm_preview_image,null); 
       ImageView previewImageView = (ImageView)preview.findViewById(R.id.item_cm_preview_image); 
       previewImageView.setImageBitmap(bmp); 

       wrapper.addView(preview); 
       container.addView(wrapper); 

でこれが結果です:

enter image description here

あなたは、私が余分なダイナミックな線形レイアウトを使用する際に作業layout_weightと高さの両方を見ることができるように。 XMLのレイアウトの重みと高さを設定できないのはなぜですか?なぜ二番目の方法が働いていますか? XMLレイアウトファイルで重量と高さを設定するにはどうすればよいですか?出来ますか?

答えて

6

あなたが方法

View preview = layoutInflater.inflate(R.layout.item_cm_preview_image,null); 

を使用してレイアウトを膨らませる場合、それは...その幅と高さのパラメータを省略していますが、使用する場合:

View preview = layoutInflater.inflate(R.layout.item_cm_preview_image,parent,false); 

あなたならば、それは例えば、正しい動作するはずです(ViewGroup)getView():

+0

ありがとう、ありがとうございます。私はそれを働かせる。これはまさに私が知りたいことです。ありがとう。 –

+0

私のために働いてくれてありがとう – pcj