0

das ist meine benutzerdefinierte Textklasse:Textstil arbeiten nicht in benutzerdefinierten Text

public class CustomTXT extends TextView { 


    public CustomTXT(Context context) { 
     super(context); 
     Typeface face=Typeface.createFromAsset(context.getAssets(), "gandom-bold.ttf"); 
     this.setTypeface(face); 
    } 

    public CustomTXT(Context context, AttributeSet attrs) { 
     super(context, attrs); 
     Typeface face=Typeface.createFromAsset(context.getAssets(), "gandom-bold.ttf"); 
     this.setTypeface(face); 
    } 

    public CustomTXT(Context context, AttributeSet attrs, int defStyle) { 
     super(context, attrs, defStyle); 
     Typeface face=Typeface.createFromAsset(context.getAssets(), "gandom-bold.ttf"); 
     this.setTypeface(face); 
    } 

    protected void onDraw (Canvas canvas) { 
     super.onDraw(canvas); 


    } 

} 

aber in XML-Layout, wenn die Verwendung android: Textart = "bold" für benutzerdefinierte Text, Textstil nicht! ich versuche Satz Textstil wie dies programmatisch zu verwenden:

title = (TextView)view.findViewById(R.id.post_title); 
      title.setTypeface(title.getTypeface(), Typeface.BOLD); 

Arbeit gut, aber wenn sich Ende recyclerview app Absturz und diesen Fehler geben:

java.lang.NullPointerException at com.example.erfan.memaraneha.maghalat.DataAdapter$ViewHolder.<init>(DataAdapter.java:94) 

aus dieser Zeile:

title.setTypeface(title.getTypeface(), Typeface.BOLD); 

und das ist mein Adapter:

public class DataAdapter extends RecyclerView.Adapter<DataAdapter.ViewHolder> { 
    private Context context; 
    List<jsonContent> jcontent; 



    public DataAdapter(Context context,List<jsonContent> jcontent) { 

     this.context=context; 
     this.jcontent=jcontent; 
    } 

    @Override 
    public DataAdapter.ViewHolder onCreateViewHolder(ViewGroup viewGroup, int i) { 

     View view; 
     if(i == R.layout.card_row) { 
      view = LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.card_row, viewGroup, false); 
     }else { 
      view = LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.button_card, viewGroup, false); 
     } 
     return new ViewHolder(view); 
    } 

    @Override 
    public void onBindViewHolder(DataAdapter.ViewHolder viewHolder,int i) { 


     if(i == jcontent.size()) { 
      viewHolder.button.setOnClickListener(new View.OnClickListener() { 
       @Override 
       public void onClick(View view) { 
        Toast.makeText(context, "Button Clicked", Toast.LENGTH_LONG).show(); 
       } 
      }); 
     } 
     else { 

      viewHolder.title.setText(jcontent.get(i).title); 

      Picasso.with(context).load(jcontent.get(i).imgurl).resize(300, 400).into(viewHolder.imageView); 
     } 
    } 

    @Override 
    public int getItemCount() { 

      return jcontent.size()+1; 

    } 


    @Override 
    public int getItemViewType(int position) { 
     return (position == jcontent.size()) ? R.layout.button_card : R.layout.card_row; 
    } 

    public class ViewHolder extends RecyclerView.ViewHolder{ 

     private TextView title; 

     private ImageView imageView; 

     private Button button; 

     public ViewHolder(final View view) { 
      super(view); 


      title = (TextView)view.findViewById(R.id.post_title); 
      title.setTypeface(title.getTypeface(), Typeface.BOLD); 

      imageView=(ImageView)view.findViewById(R.id.img); 
      button=(Button)view.findViewById(R.id.loadmore); 



      view.setOnClickListener(new View.OnClickListener() { 
       @Override 
       public void onClick(View v) { 
        Intent intent=new Intent(view.getContext(),card_activity.class); 
        Bundle b = new Bundle(); 
        String passingdata = title.getText().toString(); 
        b.putString("Key", passingdata); 
        intent.putExtras(b); 
        view.getContext().startActivity(intent); 
       } 
      }); 
     } 
    } 
} 
diese
+0

Versuchen Sie es * Programmatisch *. –

+0

@jaydroider versuchen, aber meine Textansicht in Adapter und wenn ich Schriftbild für meine TXTview in Adapter-App geben Sie mir null Ausnahmefehler – erfan

+0

Posten Sie diesen Code in der obigen Frage mit Ausnahmeprotokoll. –

Antwort

0

nach einigem Versuch benutze ich diese Zeile

viewHolder.title.setTypeface(viewHolder.title.getTypeface(), Typeface.BOLD); 

unter

viewHolder.title.setText(jcontent.get(i).title); 

in meinem onBindViewHolder und Problem

0

Gebrauch, das funktioniert:

public class MyTextView extends TextView { 

    public MyTextView(Context context, AttributeSet attrs, int defStyle) { 
     super(context, attrs, defStyle); 
     init(); 
    } 

    public MyTextView(Context context, AttributeSet attrs) { 
     super(context, attrs); 
     init(); 
    } 

    public MyTextView(Context context) { 
     super(context); 
     init(); 
    } 

    private void init() { 
     if (!isInEditMode()) { 
      Typeface tf = Typeface.createFromAsset(getContext().getAssets(), "fonts/MavenPro-Regular.ttf"); 
      setTypeface(tf); 
     } 
    } 
} 
+0

funktioniert nicht und scheint nicht so viele verschiedene zwischen meinem Code! – erfan

0

Set Type Face unterhalb dieser Linie. Entfernen Sie es von ViewHolder. Ihre Schriftart Datei sollte innerhalb Asset/Fonts Ordner sein.

viewHolder.title.setText(jcontent.get(i).title); 

Typeface face=Typeface.createFromAsset(context.getAssets(), "fonts/gandom-bold.ttf"); 

viewHolder.title.setTypeface(face); 
+0

kann getAssets nicht erkennen() – erfan

+0

Überprüfen Sie die bearbeitete Antwort. –

+0

@erfan Bist du damit fertig? –

0

Pass Textstil in Ihrer benutzerdefinierten Textview zu lösen, wenn Typeface Einstellung. Ich habe Ihre Custom Textview-Klasse geändert. Dies wird hoffentlich funktionieren.

public class CustomTXT extends TextView { 


public CustomTXT(Context context) { 
    super(context); 
    Typeface face=Typeface.createFromAsset(context.getAssets(), "gandom-bold.ttf"); 
    this.setTypeface(face, Typeface.BOLD); 
} 

public CustomTXT(Context context, AttributeSet attrs) { 
    super(context, attrs); 
    Typeface face=Typeface.createFromAsset(context.getAssets(), "gandom-bold.ttf"); 
    this.setTypeface(face, Typeface.BOLD); 
} 

public CustomTXT(Context context, AttributeSet attrs, int defStyle) { 
    super(context, attrs, defStyle); 
    Typeface face=Typeface.createFromAsset(context.getAssets(), "gandom-bold.ttf"); 
    this.setTypeface(face, Typeface.BOLD); 
} 

protected void onDraw (Canvas canvas) { 
    super.onDraw(canvas); 


} 

Ich fügte hinzu, "Typeface.BOLD" in setTypeFace Methode, so dass Sie nicht mehr benötigen, Textart explizit in XML oder in Ihrem Java-Code zu setzen.

Verwandte Themen