39

I want to reset a textView height after I have added it to the main window in the xml file.

inside a RelativeLayout,

  <TextView
      android:id="@+id/text_l"
      android:layout_width="50sp"
      android:layout_height="50sp"
      android:layout_alignParentTop="true"
      android:layout_centerHorizontal="true"
      android:layout_marginLeft="10sp"
      android:layout_marginTop="145dp"
      android:gravity="center"
      android:textAppearance="?android:attr/textAppearanceLarge"
      android:textColor="#000000" >
  </TextView>

I just want to change it from 50 to 70:

I tried:

 TextView text = (TextView)findViewById(R.id.text_l);
 text.setHeight(70);

but nothing changed.

Seshu Vinay
  • 13,560
  • 9
  • 60
  • 109
Q8yDev
  • 395
  • 1
  • 3
  • 7

6 Answers6

111

You should change it via LayoutParams:

LayoutParams params = (LayoutParams) textView.getLayoutParams();
params.height = 70;
textView.setLayoutParams(params);

EDIT

You should not use sizes in pixels in you code, use dimensions for this:

dimens.xml:

<dimen name="text_view_height">50dp</dimen>

In code:

params.height = getResources().getDimensionPixelSize(R.dimen.text_view_height);
SpyZip
  • 5,511
  • 4
  • 32
  • 53
Jin35
  • 8,602
  • 3
  • 32
  • 52
  • The bizare thing here is: textview.setheight(...) did work on some of my test devices, even though in contrast to the documentation of the setHeight function of TextView it does NOT change the layout parameters of the view. But on one of my test devices (Xperia ray, Android 4.0.4) this worked only in landscape but not in portrait mode. Changing the height in the layout params as you suggested worked fine on all of my test devices. – Nantoka Jun 17 '13 at 23:48
  • It didn't work for me. Im afraid it doesn't work in newer APIs. Once the TextView has been layered, setting height in the TextView has no effect. – cesards Mar 08 '17 at 12:01
  • 1
    Note that **TextView textView = new TextView(context); textView.getLayoutParame()** weill be null. You should judge null before use it. – BertKing Nov 16 '17 at 11:21
11

Pragmatically you can set textview height like:

private TextView mTxtView;
int height = 50; //your textview height
mTxtView.getLayoutParams().height = height;
kenju
  • 5,866
  • 1
  • 41
  • 41
Dhruv Raval
  • 4,946
  • 3
  • 29
  • 34
4

you can dynamically set width and height of textview by

private TextView mTxtView;
private int screenWidth, screenHeight;
Display display = getWindowManager().getDefaultDisplay(); 
    screenWidth = display.getWidth();
    screenHeight = display.getHeight();


LayoutParams params = mTxtView.getLayoutParams();
    params.width = screenWidth-30;
    mTxtView.setLayoutParams(params);
2

In Kotlin with DP to pixels translation

  changeTextHeight.setOnClickListener { view ->

         // random height for testing
        val randomHeightInDP = Random().nextFloat() * (50.0f - 10.0f) + 10

        // set Height in pixels
        hello.layoutParams.height = convertDpToPixel(randomHeightInDP, applicationContext)
         //refresh layout
        hello.requestLayout()


    }

Convert DP to pixels, see this post:

fun convertDpToPixel(dp: Float, context: Context): Int {
        return (dp * (context.resources.displayMetrics.densityDpi.toFloat() / DisplayMetrics.DENSITY_DEFAULT)).toInt()
    }
Hitesh Sahu
  • 41,955
  • 17
  • 205
  • 154
2

the sample way for this if you want to use dimen

first, you should set size in dimen XML file.

<dimen name="text_height">50dp</dimen>
<dimen name="text_width">50dp</dimen>

and

text_l.getLayoutParams().height = 
     getResources().getDimensionPixelSize(R.dimen.text_height);

text_l.getLayoutParams().width = 
     getResources().getDimensionPixelSize(R.dimen.text_width);

Or

if you want to set just int (for example we wanna set 50dp height and 100dp width)

text_l.getLayoutParams().height = 50 * 3;
text_l.getLayoutParams().width= 100 * 3;
1

I know this is an old question, but for the sake of others who might find this, there are scenarios where you should call textView.requestLayout() after changing the layout parameters. While it my be fine to omit it if you are simply changing the layout parameters as a one time thing before the layout is drawn. In my case, I wanted to change the height parameter of a TextView based on a radio button selection using onCheckedChangedListener, but the TextView height would only update the first time it was drawn. Adding requestLayout() solved this problem.

TextView tv;
ViewGroup.LayoutParams params = tv.getLayoutParams();
params.height = ViewGroup.LayoutParams.WRAP_CONTENT;
if(!tv.isInLayout()) {//make sure it isn't currently in a layout pass 
    tv.requestLayout();//request a layout pass
 }
jwitt98
  • 1,194
  • 1
  • 16
  • 30