re-setting a TextView height programmatically

2019-02-02 03:13发布

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.

4条回答
Anthone
2楼-- · 2019-02-02 03:30

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);
查看更多
仙女界的扛把子
3楼-- · 2019-02-02 03:33

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);
查看更多
该账号已被封号
4楼-- · 2019-02-02 03:35

Pragmatically you can set textview height like:

private TextView mTxtView;
int height = 50; //your textview height
mTxtView.getLayoutParams().height = height;
查看更多
淡お忘
5楼-- · 2019-02-02 03:42

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
 }
查看更多
登录 后发表回答