Повторное изменение высоты TextView
Я хочу reset высоту 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);
но ничего не изменилось.
Ответы
Ответ 1
Вы должны изменить его с помощью LayoutParams
:
LayoutParams params = (LayoutParams) textView.getLayoutParams();
params.height = 70;
textView.setLayoutParams(params);
ИЗМЕНИТЬ
Вы не должны использовать размеры в пикселях в вашем коде, используйте размеры для этого:
dimens.xml:
<dimen name="text_view_height">50dp</dimen>
В коде:
params.height = getResources().getDimensionPixelSize(R.dimen.text_view_height);
Ответ 2
Прагматически вы можете установить высоту текста как:
private TextView mTxtView;
int height = 50; //your textview height
mTxtView.getLayoutParams().height = height;
Ответ 3
вы можете динамически устанавливать ширину и высоту текстового представления
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
Я знаю, что это старый вопрос, но ради других, кто мог бы найти это, есть сценарии, в которых вы должны вызывать 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
}
Ответ 5
В котлине с переводом 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()
}