переустановка высоты TextView программно - PullRequest
35 голосов
/ 07 февраля 2012

Я хочу сбросить высоту textView после добавления ее в главное окно в файле xml.

внутри 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>

Я просто хочу изменить ее с50 до 70:

Я пытался:

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

, но ничего не изменилось.

Ответы [ 5 ]

93 голосов
/ 07 февраля 2012

Вы должны изменить его через LayoutParams:

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

EDIT

Вы не должны использовать размеры в пикселях в вашем коде, используйте для этого размеры:

dimens.xml:

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

В коде:

params.height = getResources().getDimensionPixelSize(R.dimen.text_view_height);
10 голосов
/ 04 августа 2015

Прагматически вы можете установить высоту textview как:

private TextView mTxtView;
int height = 50; //your textview height
mTxtView.getLayoutParams().height = height;
4 голосов
/ 17 сентября 2013

Вы можете динамически установить ширину и высоту просмотра текста с помощью

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);
1 голос
/ 01 января 2019

Я знаю, что это старый вопрос, но ради других, кто мог бы найти это, есть сценарии, в которых вы должны вызывать textView.requestLayout () после изменения параметров макета. Хотя было бы неплохо пропустить это, если вы просто меняете параметры макета как единоразово, прежде чем макет будет нарисован. В моем случае я хотел изменить параметр высоты TextView на основе выбора переключателя с помощью onCheckedChangedListener, но высота TextView будет обновляться только при первом рисовании. Добавление requestLayout () решило эту проблему.

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
 }
0 голосов
/ 03 июня 2019

В Kotlin с переводом DP в пиксели

  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()


    }

Преобразование DP в пиксели см. В этом посте :

fun convertDpToPixel(dp: Float, context: Context): Int {
        return (dp * (context.resources.displayMetrics.densityDpi.toFloat() / DisplayMetrics.DENSITY_DEFAULT)).toInt()
    }
...