2

を行っている場合、私はTextViewはそれがGONEときImageViewによって残された空間を埋めるために取得しようとしている...私は「LinearLayoutRelativeLayoutを使用してみましたが、ImageViewのの宇宙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

ここでのトリックは、実際にはweightSumを供給しないことです。

<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"> 

はTextViewsがView.GONEであるか否かを、均一に利用可能なスペースの1/3それぞれとして離間3 TextViewsを、印刷されます。スペースの1/3各として

<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"> 

ウィルスペースTextViews、そのうちの一つは、それが1/2のスペースごとに調整されます、その時点でView.GONE、あるまで。