2016-09-11 2 views
-1

dieser Code ist in meinem MainActivity (Arbeits gut):Android Recyclerview- Schrift vergrößern aller inneren Textviews

mAdapter = new Adapter_RecyclerViewReader(readerLineObjs); 
RecyclerView.LayoutManager mLayoutManager = new LinearLayoutManager(getApplicationContext()); 
recyclerView.setLayoutManager(mLayoutManager); 
recyclerView.setItemAnimator(new DefaultItemAnimator()); 
recyclerView.setLayoutManager(new LinearLayoutManagerWithSmoothScroller(getBaseContext())); 
recyclerView.addItemDecoration(new DividerItemDecoration(this, LinearLayoutManager.VERTICAL)); 
recyclerView.setAdapter(mAdapter); 

und der recyclerview Adapter:

public class Adapter_RecyclerViewReader extends RecyclerView.Adapter<Adapter_RecyclerViewReader.MyViewHolder> { 
    private List<ReaderLineObj> readerLineObjList; 
    float minTextSize = 50; 
    float maxTextSize = 80; 
    Adapter_RecyclerViewReader.MyViewHolder holderGlobal; 

    public class MyViewHolder extends RecyclerView.ViewHolder { 
     public TextView tvRowHidId, tvRowTitle, tvRowContent; 

     public MyViewHolder(View view) { 
      super(view); 
      tvRowTitle = (TextView) view.findViewById(R.id.tvRowTitle); 
      tvRowContent = (TextView) view.findViewById(R.id.tvRowContent); 

     } 


    } 

    public void ResizeTextSize(Boolean makeBigger){ 


    } 

    public Adapter_RecyclerViewReader(List<ReaderLineObj> readerLineObjList) { 
     this.readerLineObjList = readerLineObjList; 
    } 


    @Override 
    public Adapter_RecyclerViewReader.MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { 
     View itemView = LayoutInflater.from(parent.getContext()) 
       .inflate(R.layout.row_recycler_list_reader, parent, false); 
     return new MyViewHolder(itemView); 
    } 



    @Override 
    public void onBindViewHolder(Adapter_RecyclerViewReader.MyViewHolder holder, int position) { 
     ReaderLineObj readerLineObj = readerLineObjList.get(position); 

     if (readerLineObj.getTitle().length() >0){ 
      holder.tvRowTitle.setText(Html.fromHtml(readerLineObj.getTitle())); 
     }else{ 
      holder.tvRowTitle.setVisibility(View.GONE); 
     } 

     holder.tvRowContent.setText(Html.fromHtml(readerLineObj.getContent())); 




    } 


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

die Schriftgröße von tvRowTitle und tvRowContentare das gleiche übrigens.

I'v hinzugefügt 2 Buttons in der MainActivity xml, und ich mag, dass sie functinalty haben die aktuelle Schriftgröße von tvRowTitle bekommen und dann erhöhen/verringern sie (relativ zur aktuellen Schriftgröße) für alle Textviews im recyclerview.

preview

die linke Taste clicing wird 1sp den aktuellen Schriftgröße auf der ganzen Rasteransicht Titel & Inhalt hinzufügen.

Wie kann ich das tun?

Antwort

0

Punkte zu beachten: i) Sie Wert in der Aktivitätsklasse werden zu ändern, sondern Adapter hat die Änderungen, die Sie auf den Größen ii) Sie müssen die Ansichten nachladen mit

mAdapter.notifyDataSetChanged(); 

implementieren Methode

Also, was ist die Arbeit um. Sie können einen statischen Gleitkommawert haben, um die Größe beizubehalten, z. B. in der initialisierten MainActivity.

static float size_of_items; 

dann auf Schritt, um die Werte der Schwimmer als

size_of_items=size_of_items+1; 

tun ähnlich, was auf der Dekrement-Taste ändern.

HINWEIS: Auf der Adapterklasse dies der onBindViewHolder Methode ändert machen Zugabe

holder.tvRowTitle.setTextSize(TypeValue.COMPLEX_UNIT_SP, MainActivity.size_of_items); 
holder.tvRowContent.setTextSize(TypeValue.COMPLEX_UNIT_SP, MainActivity.size_of_items); 

so dass Sie Ihren Code innerhalb onBindViewHolder haben, wie unten

 if (readerLineObj.getTitle().length() >0){ 
      holder.tvRowTitle.setText(Html.fromHtml(readerLineObj.getTitle())); 
     }else{ 
      holder.tvRowTitle.setVisibility(View.GONE); 
     } 

     holder.tvRowContent.setText(Html.fromHtml(readerLineObj.getContent())); 
holder.tvRowTitle.setTextSize(TypeValue.COMPLEX_UNIT_SP, MainActivity.size_of_items); 
    holder.tvRowContent.setTextSize(TypeValue.COMPLEX_UNIT_SP, MainActivity.size_of_items); 

ENDLICH: Denken Sie daran, die mAdapter.notifyDataSetChanged(); zu verwenden nach jeder Änderung in size_of_items haben Sie so eine einfache Methode:

private void increaseTextSize(){ 
size_of_items=size_of_items+1; 
mAdapter.notifyDataSetChanged(); 
} 

Alles Gute, hoffentlich nicht zu spät mit der Antwort. Sie benötigen nicht die Methode, die ich zuletzt erstellt habe, stattdessen können Sie den Code auf Ihrer increase_size-Schaltfläche in der setOnClickListener-Methode verwenden. Goodluck

Verwandte Themen