如何在两个不同的片段(TabLayout)中设置两个不同的字体

问题描述 投票:1回答:1

我有一个使用选项卡布局和RecyclerView来获取项目的应用。我有2个不同的标签,我想在它们上使用两种不同的字体。我有OneActivity,对于tabsi,有FirstFragment,SecondFragment。

我可以使用RecyclerView_Adapter更改整个应用程序的字体。但是我不想更改整个应用程序的字体。在FirstFragment(第一个选项卡)中,我想使用Arial和Text大小为20 sp,在SecondFragment中,我想使用Comic Sans和Text大小为16 sp。

我该怎么办,有可能吗?

OneActivity.Java

public class OneActivity extends AppCompatActivity {
   private static Toolbar toolbar;
   private static ViewPager viewPager;
   private static TabLayout tabLayout;
   private static BottomNavigationView bottomNavigationView;

   private ImageButton forwardbtn, backwardbtn, pausebtn, playbtn;
   private MediaPlayer mPlayer;
   private TextView songName, startTime, songTime;
   private SeekBar songPrgs;
   private static int oTime =0, sTime =0, eTime =0, fTime = 15000, bTime = 15000;
   private Handler hdlr = new Handler();


   @Override
   protected void onCreate(Bundle savedInstanceState) {
       super.onCreate(savedInstanceState);
       setContentView(R.layout.activity_one);
       backwardbtn = (ImageButton)findViewById(R.id.btnBackward);
       forwardbtn = (ImageButton)findViewById(R.id.btnForward);
       playbtn = (ImageButton)findViewById(R.id.btnPlay);
       pausebtn = (ImageButton)findViewById(R.id.btnPause);

       startTime = (TextView)findViewById(R.id.txtStartTime);
       songTime = (TextView)findViewById(R.id.txtSongTime);

       mPlayer = MediaPlayer.create(this, R.raw.deneme);
       songPrgs = (SeekBar)findViewById(R.id.sBar);
       songPrgs.setClickable(false);
       pausebtn.setEnabled(false);


       toolbar = (Toolbar) findViewById(R.id.toolbar);
       setSupportActionBar(toolbar);


       viewPager = (ViewPager) findViewById(R.id.viewPager);
       setupViewPager(viewPager);

       tabLayout = (TabLayout) findViewById(R.id.tabLayout);
       tabLayout.setupWithViewPager(viewPager);//setting tab over viewpager

       bottomNavigationView = (BottomNavigationView) findViewById(R.id.bottomNavigationView);


       //Implementing tab selected listener over tablayout
       tabLayout.addOnTabSelectedListener(new TabLayout.OnTabSelectedListener() {
           @Override
           public void onTabSelected(TabLayout.Tab tab) {
               viewPager.setCurrentItem(tab.getPosition());//setting current selected item over viewpager
               switch (tab.getPosition()) {
                   case 0:
                       Log.e("TAG","TAB1");
                       break;
                   case 1:
                       Log.e("TAG","TAB2");
                       break;
               }
           }

           @Override
           public void onTabUnselected(TabLayout.Tab tab) {
           }

           @Override
           public void onTabReselected(TabLayout.Tab tab) {
           }
       });

       playbtn.setOnClickListener(new View.OnClickListener() {
           @Override
           public void onClick(View v) {
               Toast.makeText(OneActivity.this, "One Oynatılıyor", Toast.LENGTH_SHORT).show();
               mPlayer.start();
               eTime = mPlayer.getDuration();
               sTime = mPlayer.getCurrentPosition();
               if(oTime == 0){
                   songPrgs.setMax(eTime);

               }
               songTime.setText(String.format("%d dk, %d sn", TimeUnit.MILLISECONDS.toMinutes(eTime),
                       TimeUnit.MILLISECONDS.toSeconds(eTime) - TimeUnit.MINUTES.toSeconds(TimeUnit.MILLISECONDS. toMinutes(eTime))) );
               startTime.setText(String.format("%d dk, %d sn", TimeUnit.MILLISECONDS.toMinutes(sTime),
                       TimeUnit.MILLISECONDS.toSeconds(sTime) - TimeUnit.MINUTES.toSeconds(TimeUnit.MILLISECONDS. toMinutes(sTime))) );
               songPrgs.setProgress(sTime);
               hdlr.postDelayed(UpdateSongTime, 100);
               pausebtn.setEnabled(true);
               playbtn.setEnabled(false);
           }
       });
       pausebtn.setOnClickListener(new View.OnClickListener() {
           @Override
           public void onClick(View v) {
               mPlayer.pause();
               pausebtn.setEnabled(false);
               playbtn.setEnabled(true);
               Toast.makeText(getApplicationContext(),"One Duraklatıldı", Toast.LENGTH_SHORT).show();
           }
       });
       forwardbtn.setOnClickListener(new View.OnClickListener() {
           @Override
           public void onClick(View v) {
               if((sTime + fTime) <= eTime)
               {
                   sTime = sTime + fTime;
                   mPlayer.seekTo(sTime);
               }
               else
               {
                   Toast.makeText(getApplicationContext(), "Daha fazla ileri sarılamaz", Toast.LENGTH_SHORT).show();
               }
               if(!playbtn.isEnabled()){
                   playbtn.setEnabled(true);
               }
           }
       });
       backwardbtn.setOnClickListener(new View.OnClickListener() {
           @Override
           public void onClick(View v) {
               if((sTime - bTime) > 0)
               {
                   sTime = sTime - bTime;
                   mPlayer.seekTo(sTime);
               }
               else
               {
                   Toast.makeText(getApplicationContext(), "Daha fazla geri sarılamaz", Toast.LENGTH_SHORT).show();
               }
               if(!playbtn.isEnabled()){
                   playbtn.setEnabled(true);
               }
           }
       });
   }
   public Runnable UpdateSongTime = new Runnable() {
       @Override
       public void run() {

           sTime = mPlayer.getCurrentPosition();
           startTime.setText(String.format("%d dk, %d sn", TimeUnit.MILLISECONDS.toMinutes(sTime),
                   TimeUnit.MILLISECONDS.toSeconds(sTime) - TimeUnit.MINUTES.toSeconds(TimeUnit.MILLISECONDS.toMinutes(sTime))) );
           songPrgs.setProgress(sTime);
           hdlr.postDelayed(this, 100);

           songPrgs.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {

               @Override
               public void onStopTrackingTouch(SeekBar seekBar) {

               }

               @Override
               public void onStartTrackingTouch(SeekBar seekBar) {

               }

               @Override
               public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {
                   if(mPlayer != null && fromUser){
                       mPlayer.seekTo(progress); // clear ' * 1000  '
                   }
               }
           });
       }


   };

   public void onBackPressed(){
       mPlayer.stop();
       finish();
   }

   //Setting View Pager
   private void setupViewPager(ViewPager viewPager) {
       ViewPagerAdapter adapter = new ViewPagerAdapter(getSupportFragmentManager());
       adapter.addFrag(new FirstFragment("Android"), "Android");
       adapter.addFrag(new SecondFragment("Ios"), "Ios");
       viewPager.setAdapter(adapter);
   }


   //View Pager fragments setting adapter class
   class ViewPagerAdapter extends FragmentPagerAdapter {
       private final List<Fragment> mFragmentList = new ArrayList<>();//fragment arraylist
       private final List<String> mFragmentTitleList = new ArrayList<>();//title arraylist

       public ViewPagerAdapter(FragmentManager manager) {
           super(manager);
       }

       @Override
       public Fragment getItem(int position) {
           return mFragmentList.get(position);
       }

       @Override
       public int getCount() {
           return mFragmentList.size();
       }


       //adding fragments and title method
       public void addFrag(Fragment fragment, String title) {
           mFragmentList.add(fragment);
           mFragmentTitleList.add(title);
       }

       @Override
       public CharSequence getPageTitle(int position) {
           return mFragmentTitleList.get(position);
       }
   }
}

FirstFragment

public class FirstFragment extends Fragment {
    private View view;

    private String title;//String for tab title
    private String ebaka;

//    Intent it = getActivity().getIntent();
//    String isim = getActivity().getIntent().getStringExtra("FOO");

//    Bundle bundle = getActivity().getIntent().getExtras();
//    String value = bundle.getString("key1");

    private static RecyclerView recyclerView;

    public FirstFragment() {
    }

    @SuppressLint("ValidFragment")
    public FirstFragment(String title) {
        this.title = title;//Setting tab title
    }

    @Nullable
    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        view = inflater.inflate(R.layout.dummy_fragment, container, false);
//        getActivity().getActionBar().setTitle(title);
        setRecyclerView();
        return view;


    }
    //Setting recycler view
    private void setRecyclerView() {

        recyclerView = (RecyclerView) view
                .findViewById(R.id.recyclerView);
        recyclerView.setHasFixedSize(true);
        recyclerView
                .setLayoutManager(new LinearLayoutManager(getActivity()));//Linear Items
//        String[] eArray=getActivity().getResources().getStringArray(R.array.books);
//
       String[] ebaka=getActivity().getResources().getStringArray(R.array.bakara);

        ArrayList<String> arrayList = new ArrayList<>();
//        arrayList.add("cdscsdc");
        for (int i = 0; i < ebaka.length; i++) {

            arrayList.add(ebaka[i]);
        }
        RecyclerView_Adapter adapter = new RecyclerView_Adapter(getActivity(), arrayList);
        recyclerView.setAdapter(adapter);// set adapter on recyclerview

    }
}

RecyclerView_Adapter

public class RecyclerView_Adapter extends RecyclerView.Adapter<DemoViewHolder> {
    private ArrayList<String> arrayList;
    private Context context;



    public RecyclerView_Adapter(Context context,
                                ArrayList<String> arrayList) {
        this.context = context;
        this.arrayList = arrayList;
        this.arrayList = arrayList;
    }


    @Override
    public int getItemCount() {
        return (null != arrayList ? arrayList.size() : 0);

    }

    @Override
    public void onBindViewHolder(DemoViewHolder holder,
                                 int position) {
        Typeface customTypeOne = Typeface.createFromAsset(context.getAssets(), "arial.ttf");


        final DemoViewHolder mainHolder = (DemoViewHolder) holder;
        //Setting text over textview
        mainHolder.title.setText(arrayList.get(position));


        mainHolder.title.setTypeface(customTypeOne); //  With this code i change font, but it is changing whole apps font. i don't need that.


    }

    @Override
    public DemoViewHolder onCreateViewHolder(
            ViewGroup viewGroup, int viewType) {
        LayoutInflater mInflater = LayoutInflater.from(viewGroup.getContext());

        ViewGroup mainGroup = (ViewGroup) mInflater.inflate(
                R.layout.item_row, viewGroup, false);
        DemoViewHolder mainHolder = new DemoViewHolder(mainGroup) {
            @Override
            public String toString() {
                return super.toString();
            }
        };


        return mainHolder;

    }


}

DemoViewHolder

public abstract class DemoViewHolder extends RecyclerView.ViewHolder {


    public TextView title;


    public DemoViewHolder(View view) {
        super(view);


        this.title = (TextView) view.findViewById(R.id.cardTitle);


    }


}
java android android-recyclerview fonts android-tablayout
1个回答
1
投票

更新适配器constructoronBindViewHolder()

public class RecyclerView_Adapter extends RecyclerView.Adapter<DemoViewHolder> {

private ArrayList<String> arrayList;
private Context context;

//add this
private String comingFrom;

//constructor 

public RecyclerView_Adapter(Context context, ArrayList<String> arrayList, String comingFrom) {

this.context = context;
this.arrayList = arrayList;
this.arrayList = arrayList;
this.comingFrom = comingFrom;
}

........
........



@Override
public void onBindViewHolder(DemoViewHolder holder,int position) {
Typeface customTypeOne = Typeface.createFromAsset(context.getAssets(),"arial.ttf");


final DemoViewHolder mainHolder = (DemoViewHolder) holder;
//Setting text over textview
mainHolder.title.setText(arrayList.get(position));

//check in which fragment you are 

if(comingFrom.equals("fragment_one")){

//in fragment one set some font

mainHolder.title.setTypeface(........);


}else{

//in fragment two set some other font

mainHolder.title.setTypeface(.........);


}


}
............

}

FirstFragment初始化适配器时:

.......
.......

RecyclerView_Adapter adapter = new RecyclerView_Adapter(getActivity(), arrayList, "fragment_one");
recyclerView.setAdapter(adapter);// set adapter on recyclerview

........

SecondFragment初始化适配器时:

.......
.......

RecyclerView_Adapter adapter = new RecyclerView_Adapter(getActivity(), arrayList, "fragment_two");
recyclerView.setAdapter(adapter);// set adapter on recyclerview

........
© www.soinside.com 2019 - 2024. All rights reserved.