-1
votes

Il existe une vue horizontale de défilement contenant une mise en page linéaire, l'image de l'image de l'image créée dynamiquement la mise en page linéaire a des problèmes

Dans une rangée de table, il y a une vue horizontale de défilement contenant une mise en page linéaire,
L'intention est de placer 5 imageView dans la mise en page linéaire dynamiquement

Le problème est qu'il semble que l'imageview est décalée et que la disposition linéaire ne remplit pas la vue horizontale de défilement p>

Voici le XML: P > xxx pré>

la disposition liniear mentionnée est table_3_row_7_hsv1ll forte> p>

et le code est comme suit: p>

int mMaxCount = 5;
ImageView[]mImageView = new ImageView[mMaxCount];

LinearLayout.LayoutParams params1 = new LinearLayout.LayoutParams(
        LinearLayout.LayoutParams.WRAP_CONTENT, LinearLayout.LayoutParams.WRAP_CONTENT);
//params1.setMargins(10, 75, 0, 0);
params1.setMargins(100, 0, 0, 0);
params1.height = 200;
params1.width  = 200;

LinearLayout.LayoutParams params2 = new LinearLayout.LayoutParams(
        LinearLayout.LayoutParams.WRAP_CONTENT, LinearLayout.LayoutParams.WRAP_CONTENT);
//params2.setMargins(100, 85+20, 0, 0);
params2.setMargins(100, 0, 0, 0);
params2.height = 170;
params2.width  = 170;

LinearLayout.LayoutParams params3 = new LinearLayout.LayoutParams(
        LinearLayout.LayoutParams.WRAP_CONTENT, LinearLayout.LayoutParams.WRAP_CONTENT);
//params3.setMargins(100, 95+20, 0, 0);
params3.setMargins(100, 0, 0, 0);
params3.height = 140;
params3.width  = 140;

LinearLayout.LayoutParams params4 = new LinearLayout.LayoutParams(
        LinearLayout.LayoutParams.WRAP_CONTENT, LinearLayout.LayoutParams.WRAP_CONTENT);
//params4.setMargins(100, 105+20, 0, 0);
params4.setMargins(100, 0, 0, 0);
params4.height = 110;
params4.width  = 110;

LinearLayout.LayoutParams params5 = new LinearLayout.LayoutParams(
        LinearLayout.LayoutParams.WRAP_CONTENT, LinearLayout.LayoutParams.WRAP_CONTENT);
//params5.setMargins(100, 115+20, 0, 0);
params5.setMargins(100, 0, 0, 0);
params5.height = 80;
params5.width  = 80;
params5.gravity = Gravity.CENTER;

mLayoutStruct.getLayout_table_3_Row_7_HSV1LL().setGravity(Gravity.CENTER);

for (int i = 0; i < mMaxCount; i++)
{
    mImageView[i] = new ImageView(mContext);
    //mImageView[i].setBackgroundColor(Color.TRANSPARENT);
    mImageView[i].setTag("T"+"I"+i);
    mImageView[i].setId(i);
    mImageView[i].setFocusable(true);
    mImageView[i].setClickable(true);

    if (i == 0)
    {

        //Picasso.with(mContext).load(R.drawable.size1).placeholder(R.drawable.ic_launcher).resize(200, 200).into(mImageView[i]);
        mImageView[i].setBackgroundResource(R.drawable.size1);
        mLayoutStruct.getLayout_table_3_Row_7_HSV1LL().addView(mImageView[i], params1);
    }
    else if (i == 1)
    {
        //Picasso.with(mContext).load(R.drawable.size1).placeholder(R.drawable.ic_launcher).resize(170, 170).into(mImageView[i]);
        mImageView[i].setBackgroundResource(R.drawable.size1);
        mLayoutStruct.getLayout_table_3_Row_7_HSV1LL().addView(mImageView[i], params2);
    }
    else if (i == 2)
    {
        //Picasso.with(mContext).load(R.drawable.size1).placeholder(R.drawable.ic_launcher).resize(140, 140).into(mImageView[i]);
        mImageView[i].setBackgroundResource(R.drawable.size1);
        mLayoutStruct.getLayout_table_3_Row_7_HSV1LL().addView(mImageView[i], params3);
    }
    else if (i == 3)
    {
        //Picasso.with(mContext).load(R.drawable.size1).placeholder(R.drawable.ic_launcher).resize(110, 110).into(mImageView[i]);
        mLayoutStruct.getLayout_table_3_Row_7_HSV1LL().addView(mImageView[i], params4);
    }
    else if (i == 4)
    {
        //Picasso.with(mContext).load(R.drawable.size1).placeholder(R.drawable.ic_launcher).resize(80, 80).into(mImageView[i]);
        mImageView[i].setBackgroundResource(R.drawable.size1);
        mLayoutStruct.getLayout_table_3_Row_7_HSV1LL().addView(mImageView[i], params5);
    }
}


2 commentaires

Pourquoi ne pas utiliser la vue Recycler?


API 22 est le début de la vue Recycler, j'ai besoin de moins


3 Réponses :


-1
votes

Pour le point ci-dessous, vous devez modifier le code comme indiqué ci-dessous.

"Un autre point est lorsque vous faites défiler horizontalement, je viens de voir 4 imageview's's's's's's's's's's's's's's's's est au lieu de 5"

pour (int i = 0; i

à

pour (int i = 0; i <= mmAxcount; i ++)


0 commentaires

1
votes

Tout d'abord: strong>

  1. Il est préférable d'utiliser Recylview pour ajouter des éléments à une liste. Cet exemple peut vous aider. LI>
  2. recylserview est Compatible en arrière donc il fonctionne Sur la version plus ancienne que API 22, vous n'avez pas besoin de définir MINSDK à 22. LI>
  3. Votre solution pour ajouter de l'article à linearlayout doit être meilleure. Vous pouvez effectuer une matrimonie de vos paramètres pour éviter si / sinon à l'intérieur de la boucle. Li> ol>

    réponse: strong> p>

    Vous voyez 4 imageview parce que vous oubliez d'ajouter p> xxx pré>

    à l'intérieur de votre sinon si (i == 3) code> donc il ajoute imageview avec fond vide qui n'est pas visible. p>

    P>

    pour couvrir Toutes les couleurs blanches de votre vue horizontale de votre défilement par rouge Vous devez définir Android: FiNDViewPort = "true" code> sur le HorizEnSalScrollView code> Comme ci-dessous: P>

     <HorizontalScrollView
                android:id="@+id/table_3_Row_7_HSV1"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:fillViewport="true"
                android:layout_span="3"
                android:background="#FFFFFF"
                android:fadeScrollbars="false"
                android:focusable="true"
                android:focusableInTouchMode="true"
                android:scrollbarSize="0.5mm"
                android:scrollbarThumbHorizontal="@color/gray"
                android:scrollbars="horizontal">
    


2 commentaires

Désolé, modifier le code dans Stackoverflow J'ai oublié de l'ajouter, quand il est ajouté, je vois toujours 4 imageview's's, à part cet Android: Fidviedport = "vrai" n'a pas fonctionné


@Androidhv Essaye Android: Layout_width = "match_parent" et Android: Fidvieport = "true" en même temps pour votre horizontalscrollsview



0
votes

J'ai résolu le problème de
1 - Suppression Android: Layout_gravity = "Centre" de la linearlayout
2 - UTILISATION DE SETPADDING à la vue Scroll horizontale pour le décaler au centre de la rangée de table


0 commentaires