2017-09-20 6 views
0

Dans ma mise en page J'ai un TextView à l'intérieur d'un RelativeLayout comme ci-dessous:Modification des marges d'un textView lors de la liaison de la vue

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:app="http://schemas.android.com/apk/res-auto" 
    android:layout_width="match_parent" 
    android:layout_height="80dp" 
    android:orientation="horizontal"> 

    <TextView 
     android:id="@+id/textView17" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_alignParentLeft="true" 
     android:layout_alignParentStart="true" 
     android:layout_alignParentTop="true" 
     android:layout_marginLeft="70dp" 
     android:layout_marginStart="70dp" 
     android:layout_marginTop="12dp" 
     android:layout_toLeftOf="@+id/imageButton2" 
     android:layout_toStartOf="@+id/imageButton2" 
     android:text="TextView" 
     android:textColor="@android:color/black" 
     android:textSize="24sp" 
     android:textStyle="bold" /> 

Les left margins sont explicitement définis 70dp dans ce cas. Cependant, je voudrais diminuer conditionnellement le left margin à 30dp ou plus. Ma tentative de le faire est ici:

@Override 
public void onBindItemViewHolder(RecyclerView.ViewHolder holder, int position) { 
    final Material m = ... 
    ViewHolder h = (ViewHolder) holder; 

    h.checkedImageview.setVisibility(View.GONE); 

    RelativeLayout.LayoutParams layoutParams = (RelativeLayout.LayoutParams) h.titleTextview.getLayoutParams(); 
    layoutParams.setMargins(
      20, 
      layoutParams.topMargin, 
      layoutParams.rightMargin, 
      layoutParams.bottomMargin 
    ); 
    h.titleTextview.setLayoutParams(layoutParams); 

^^ Cependant, ce qui est sans effet du tout. Si je modifie les valeurs dans la mise en page XML , cela fonctionnera-t-il sans problème? Qu'est-ce que je fais mal? J'utilise la bibliothèque SectionedRecyclerViewAdapterRecyclerView, si cela est important.

Répondre

0

par exemple:

public static class PersonViewHolder extends RecyclerView.ViewHolder { 

CardView cv; 
TextView personName; 
TextView personAge; 
ImageView personPhoto; 

PersonViewHolder(View itemView) { 
    super(itemView); 
    cv = (CardView)itemView.findViewById(R.id.cv); 
    personName = (TextView)itemView.findViewById(R.id.person_name); 
    personAge = (TextView)itemView.findViewById(R.id.person_age); 
    personPhoto = (ImageView)itemView.findViewById(R.id.person_photo); 
} 

}

donc je lire la page de concentrateur git justo faire:

@Override 
public void onBindItemViewHolder(PersonViewHolder holder, int position) { 

    //here --->>> 
    PersonViewHolder itemHolder = (PersonViewHolder) holder; // important ! 

    holder.checkedImageview.setVisibility(View.GONE); 

    RelativeLayout.LayoutParams layoutParams = (RelativeLayout.LayoutParams) holder.titleTextview.getLayoutParams(); 
    layoutParams.setMargins(
      20, 
      layoutParams.topMargin, 
      layoutParams.rightMargin, 
      layoutParams.bottomMargin 
    ); 
    holder.titleTextview.setLayoutParams(layoutParams); 
0

Le problème est que vous réutilisez la LayoutParams existante de la affichage. Au lieu de réutiliser, créez un nouvel objet RelativeLayout.LayoutParams, définissez ses marges, puis définissez les paramètres TextView de manière appropriée. Code:

RelativeLayout.LayoutParams params = new RelativeLayout.LayoutParams 
    (ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT); 

params.setMargins(0, 0, 0, 0); // or any other values 

textView.setLayoutParams(params);