2

그래서, 나는 그것이 GONE 때 ... 나는 LinearLayoutRelativeLayout를 사용하여 시도했다 ImageView 왼쪽 공간을 채우기 위해 TextView을 얻으려고 사라 졌는지 공간이 있지만, 이미지 뷰의 공간 ISN ' TextView에 의해 취해진 t.보기 채우기 형제

그래서 어떻게 작동합니까?

코드 :

<RelativeLayout 
    android:orientation="horizontal" 
    android:id="@+id/cabecalho" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent"> 

    <ImageView 
     android:layout_width="30dp" 
     android:layout_height="30dp" 
     android:layout_alignParentLeft="true" 
     android:layout_centerVertical="true" 
     android:id="@+id/imgPrimary" 
     android:visibility="gone" 
     android:src="@drawable/abc_btn_rating_star_on_mtrl_alpha" 
     android:tint="#ecac31" 
     android:layout_gravity="center_vertical" 
     android:padding="3dp" /> 

    <TextView 
     android:layout_width="match_parent" 
     android:layout_height="17dp" 
     android:text="Endereço de Teste" 
     android:layout_toRightOf="@+id/imgPrimary" 
     android:layout_toLeftOf="@+id/btnEdit" 
     android:layout_centerVertical="true" 
     android:id="@+id/addrTitle" 
     android:layout_weight="50" 
     android:textColor="@color/black" 
     android:layout_gravity="center_vertical" 
     android:layout_marginLeft="5dp" /> 

    <ImageButton 
     android:layout_width="40dp" 
     android:layout_height="40dp" 
     android:id="@+id/btnEdit" 
     android:layout_weight="1" 
     android:layout_toLeftOf="@+id/btnDelete" 
     android:src="@drawable/icon_write_location" 
     android:tint="#08b8ae" 
     android:scaleType="fitCenter" 
     android:background="@color/white" 
     android:padding="10dp" /> 

    <ImageButton 
     android:layout_width="40dp" 
     android:layout_height="40dp" 
     android:id="@+id/btnDelete" 
     android:layout_weight="1" 
     android:scaleType="fitXY" 
     android:src="@drawable/abc_ic_clear_mtrl_alpha" 
     android:tint="#d60d0d" 
     android:layout_alignParentRight="true" 
     android:background="@color/white" 
     android:padding="7dp" /> 
</RelativeLayout> 

요청 인쇄 : The space is to the right of the bold "Teste" at the top of the white card. 공간이 흰색 카드의 상단에 굵은 글씨 "Teste"의 오른쪽에 있습니다. 내 recyclerview 어댑터에서

코드 :

public class AddrAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> { 
    private List<Address> addressList; 

    public class ViewHolder extends RecyclerView.ViewHolder { 
     public LinearLayout layout; 

     public TextView titulo, enderecoCompleto; 
     public ImageButton btnEdit, btnDelete; 
     public ImageView isDefaultStar; 
     //public RelativeLayout cabecalho; 

     public ViewHolder(LinearLayout layout) { 
      super(layout); 
      this.layout = layout; 

      this.titulo = (TextView) layout.findViewById(R.id.addrTitle); 
      this.enderecoCompleto = (TextView) layout.findViewById(R.id.addrComplete); 
      this.btnEdit = (ImageButton) layout.findViewById(R.id.btnEdit); 
      this.btnDelete = (ImageButton) layout.findViewById(R.id.btnDelete); 
      this.isDefaultStar = (ImageView) layout.findViewById(R.id.imgPrimary); 
      //this.cabecalho = (RelativeLayout) layout.findViewById(R.id.cabecalho); 
     } 
    } 

    public class ViewHolderHint extends RecyclerView.ViewHolder { 
     public TextView text; 

     public ViewHolderHint(TextView text) { 
      super(text); 
      this.text = text; 
     } 
    } 

    public AddrAdapter(List<Address> addresses) { 
     this.addressList = addresses; 
     if (addresses.size() > 0 && this.addressList.get(0).getCity() != null) { 
      this.addressList.add(0, new Address()); 
     } 
    } 

    @Override 
    public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { 
     switch (viewType) { 
      case 0 : { 
       TextView v = (TextView) LayoutInflater.from(parent.getContext()) 
         .inflate(R.layout.card_address_hint, parent, false); 

       ViewHolderHint vhh = new ViewHolderHint(v); 
       return vhh; 
      } 
      default : { 
       LinearLayout v = (LinearLayout) LayoutInflater.from(parent.getContext()) 
         .inflate(R.layout.card_address, parent, false); 

       ViewHolder vh = new ViewHolder(v); 
       return vh; 
      } 
     } 
    } 

    @SuppressLint("SetTextI18n") 
    @Override 
    public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) { 
     if (position < 1) { 
      ViewHolderHint hint = (ViewHolderHint) holder; 
      hint.text.setText(Html.fromHtml("Selecione um <b>endereço de entrega</b>")); 
     } else { 
      final ViewHolder layout = (ViewHolder) holder; 

      layout.isDefaultStar.setVisibility((addressList.get(position).getDefaultAddress()) ? View.VISIBLE : View.GONE); 
      //layout.cabecalho.requestLayout(); 
      layout.titulo.setText(addressList.get(position).getTitle()); 
      layout.enderecoCompleto.setText(
        addressList.get(position).getDescription()+", "+ 
          addressList.get(position).getNumber()+"\n"+ 
          addressList.get(position).getComplement()+", "+ 
          addressList.get(position).getNeighborhood()+" - "+ 
          addressList.get(position).getCity().getName()+" - "+ 
          addressList.get(position).getCity().getState().getCode()+"\n"+ 
          addressList.get(position).getZipcode() 
      ); 

      layout.btnEdit.setOnClickListener(new View.OnClickListener() { 
       @Override 
       public void onClick(View v) { 
        int pos = layout.getAdapterPosition(); 
        Address addr = addressList.get(pos); 

        Bundle b = new Bundle(); 
        b.putSerializable("ADDRESS_TO_EDIT",addr); 
        b.putInt("CHAVE_ENDERECO",pos); // TODO: Talvez no futuro seja a ID do endereço 
        Intent i = new Intent(AddressActivity.this,CheckoutAddressAddEditActivity.class); 
        i.putExtras(b); 
        startActivityForResult(i,006); 
       } 
      }); 

      layout.btnDelete.setOnClickListener(new View.OnClickListener() { 
       @Override 
       public void onClick(View v) { 
        int pos = layout.getAdapterPosition(); 

        addresses.remove(pos); 

        notifyItemRemoved(pos); 
       } 
      }); 

      layout.layout.setOnClickListener(new View.OnClickListener() { 
       @Override 
       public void onClick(View v) { 
        int pos = layout.getAdapterPosition(); 
        Address addr = addressList.get(pos); 

        Bundle extras = new Bundle(); 
        extras.putSerializable("ADDRESS", addr); 
        Intent data = new Intent(); 
        data.putExtras(extras); 
        setResult(RESULT_OK, data); 
        finish(); 
       } 
      }); 
     } 
    } 

    @Override 
    public int getItemCount() { 
     return addresses.size(); 
    } 

    @Override 
    public int getItemViewType(int pos) { 
     return (pos > 0) ? 1 : 0; 
    } 
} 
+1

별로 문제가되지 않는다면 화면을 공유 할 수 있습니까? – Shaishav

+0

어떤 이미지에 대해 얘기하고 있습니까? 첫째,'imgPrimary'에 대해서? –

+0

@ SergeyGlotov 예 ... –

답변

0

선형 레이아웃을 사용하여 시도하고 각보기에 레이아웃과 무게에 weightsum를 제공하고 또한 0dp 각 뷰의 폭을 설정하지만, 제공 않는다 각보기에 대한 가중치. 이 경우보기가 사라지면 다른보기에 의해 공간이 채워집니다.

+0

내 코드를 보면, 제거하지 않은 가중치가 있음을 알 수 있습니다 ... 이미지 뷰 기본값이 사라지더라도, 공간은 텍스트 뷰어가 차지하지 않습니다 ... –

+0

당신이 사용했습니다. 코드의 상대 레이아웃. Linear Layout을 사용하고, weightSum 매개 변수를 레이아웃에, layout_weight를 각 뷰에 설정해야합니다. 또한 각각의보기에 대해 너비를 0으로 설정하십시오. –

+0

이전과 같이 작동하지 않았습니다 ... weightSum 및 가중치를 설정했지만 공백은 여전히 ​​공백입니다 ... Android Device Monitor 및 ImageView에서 확인했습니다. 정말 사라졌지 만 공간이 차지하지는 않습니다 ... –

0

트릭은 실제로는 가중치를 제공하지 않습니다. TextViews이 View.GONE인지 여부

<LinearLayout 
    android:weightSum=3 
    ...> 
    <TextView 
     android:layout_width="0dp" 
     android:layout_weight="1"> 
    <TextView 
     android:layout_width="0dp" 
     android:layout_weight="1"> 
    <TextView 
     android:layout_width="0dp" 
     android:layout_weight="1"> 

는 균등하게 사용 가능한 공간 각의 1/3로 간격 세 TextViews를 인쇄 할 수 있습니다.

<LinearLayout 
    ...> 
    <TextView 
     android:layout_width="0dp" 
     android:layout_weight="1"> 
    <TextView 
     android:layout_width="0dp" 
     android:layout_weight="1"> 
    <TextView 
     android:layout_width="0dp" 
     android:layout_weight="1"> 

윌 공간은 1/2 공간에 각각 조정됩니다 지적되는 공간 각의 1/3로하여 TextViews, 그 중 하나가 View.GONE 때까지.