İsmail
İsmail

Reputation: 354

Resize text size of a TextView in a Fragment

How can I change the text size of TextView of a fragment. I need it, because text size is small, maybe some users want it to get bigger. I see, some people advise to use seekbar, or pinch-to-zoom but I can not make it work in a fragment. Thanks for your help.

my fragment_one.xml

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context="org.aultoon.webovietab.fragments.OneFragment"
android:id="@+id/oneFragmentId"
>



<ScrollView
    android:id="@+id/scrollView"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:fadingEdge="none"
    android:fillViewport="true"
    >

    <RelativeLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="vertical"
        android:layout_gravity="top|center"
        android:gravity="center"
        >


<TextView
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:id="@+id/tvFragmentOne"
    android:text="@string/turkce1"
    android:textSize="27sp"
    android:textIsSelectable="true"
    android:layout_margin="10dp"
    android:layout_alignParentLeft="true"
    android:layout_alignParentTop="true"
    />

        </RelativeLayout>
</ScrollView>

here is the my OneFragment.java

public class OneFragment extends Fragment {


    //static WebView mWebview;




    public OneFragment() {
        // Required empty public constructor
    }


    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {

        View rootView = inflater.inflate(R.layout.fragment_one, container, false);

        return rootView;
    }
}

here is the my activity

 public class SimpleTabsActivity extends AppCompatActivity {


    private Toolbar toolbar;
    private TabLayout tabLayout;
    private ViewPager viewPager;



    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_simple_tabs);


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

        getSupportActionBar().setDisplayHomeAsUpEnabled(false);

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

        tabLayout = (TabLayout) findViewById(R.id.tabs);
        tabLayout.setupWithViewPager(viewPager);

    }


    private void setupViewPager(ViewPager viewPager) {
        ViewPagerAdapter adapter = new ViewPagerAdapter(getSupportFragmentManager());
        adapter.addFragment(new OneFragment(), "tab1");
        adapter.addFragment(new TwoFragment(), "tab2");

        viewPager.setAdapter(adapter);


    }

    class ViewPagerAdapter extends FragmentPagerAdapter {
        private final List<Fragment> mFragmentList = new ArrayList<>();
        private final List<String> mFragmentTitleList = new ArrayList<>();

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

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

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

        public void addFragment(Fragment fragment, String title) {
            mFragmentList.add(fragment);
            mFragmentTitleList.add(title);
        }

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







    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        getMenuInflater().inflate(R.menu.menu_main, menu);
        return true;
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        switch (item.getItemId()){
            case R.id.aboutMenuItem:
                Intent i = new Intent(this, About_Activity.class);
                startActivity(i);
                return true;

            default:
                return super.onOptionsItemSelected(item);
        }
    }


}

Upvotes: 2

Views: 2336

Answers (1)

Long Ranger
Long Ranger

Reputation: 6008

First, please read the following Q&A about the textsize "sp" unit in android. You should understand why it used sp as unit for textView and your question should be solved.

Should use "sp" instead of "dp" for text sizes

What is the difference between "px", "dp", "dip" and "sp" on Android?

Android sp vs dp texts - what would adjust the 'scale' and what is the philosophy of support

http://www.singhajit.com/tutorial-1-android-ui-desgin-and-styling/

Now, you should know the usage of "sp" unit in TextView since it can be adjusted due to the user accessibility setting. That's mean if your boss cannot see it clearly, he/she can set the font size setting in the devices instead of code change.

If you still need workaround for the programming. Here is the solution

I have added the seekbar in your fragment layout.

Update xml.

<RelativeLayout android:id="@+id/oneFragmentId"
                xmlns:android="http://schemas.android.com/apk/res/android"
                xmlns:tools="http://schemas.android.com/tools"
                android:layout_width="match_parent"
                android:layout_height="match_parent"
    >

    <SeekBar
        android:id="@+id/seekBar"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_alignParentStart="true"/>

    <ScrollView
        android:id="@+id/scrollView"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_below="@+id/seekBar"
        android:fadingEdge="none"
        android:fillViewport="true"
        >

        <RelativeLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_gravity="top|center"
            android:gravity="center"
            android:orientation="vertical"
            >


            <TextView
                android:id="@+id/tvFragmentOne"
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                android:layout_alignParentLeft="true"
                android:layout_alignParentTop="true"
                android:layout_margin="10dp"
                android:text="Hello world"
                android:textIsSelectable="true"
                android:textSize="27sp"
                />

        </RelativeLayout>
    </ScrollView>

</RelativeLayout>

I have change your textView text as "Hello world" for testing, please change back to your own string resource.

Here is the fragment code.

public class OneFragment extends Fragment {
    //static WebView mWebview;
    public OneFragment() {
        // Required empty public constructor
    }
    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        View rootView = inflater.inflate(R.layout.fragment_one, container, false);
        final TextView tvFragmentOne = (TextView) rootView.findViewById(R.id.tvFragmentOne);
        SeekBar lSeekBar = (SeekBar) rootView.findViewById(R.id.seekBar);
        lSeekBar.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {
            @Override
            public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {
                tvFragmentOne.setTextSize(progress);
            }
            @Override
            public void onStartTrackingTouch(SeekBar seekBar) {
            }
            @Override
            public void onStopTrackingTouch(SeekBar seekBar) {
            }
        });
        return rootView;
    }
}

If you like to use other control pinch to zoom, up/down button or other control component to change the text size of the textview, you can do it with the following procedures:

  1. Change other widget instead of seekbar

  2. Change the listener for listening the component control change( like OnSeekBarChangeListener )

  3. Reset the textView size

Upvotes: 1

Related Questions