Android 以编程方式重新设置TextView高度

Android 以编程方式重新设置TextView高度,android,android-xml,textview,Android,Android Xml,Textview,在将textView高度添加到xml文件的主窗口后,我想重置它 在相对论的框架内 <TextView android:id="@+id/text_l" android:layout_width="50sp" android:layout_height="50sp" android:layout_alignParentTop="true" android:layout_centerHorizontal="true"

在将textView高度添加到xml文件的主窗口后,我想重置它

在相对论的框架内

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

但是没有更改。

您应该通过
布局参数来更改它:

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

代码中不应使用像素大小,请使用尺寸:

dimens.xml:

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

您可以通过以下方式动态设置textview的宽度和高度:

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

实际上,您可以设置textview高度,如下所示:

private TextView mTxtView;
int height = 50; //your textview height
mTxtView.getLayoutParams().height = height;

我知道这是一个老问题,但为了其他可能会发现这一点的人,在某些情况下,您应该在更改布局参数后调用textView.requestLayout()。如果只是在绘制布局之前一次性更改布局参数,则可以忽略它。在我的例子中,我想使用onCheckedChangedListener根据单选按钮选择更改TextView的高度参数,但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
 }
在Kotlin中进行DP到像素的转换 :


如果要使用dimen,请使用此示例方法

首先,应该在dimenxml文件中设置大小

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

如果您只想设置int(例如,我们想设置50dp高度和100dp宽度)


这里的bizare功能是:textview.setheight(…)在我的一些测试设备上工作,尽管与textview的setheight函数的文档不同,它不会更改视图的布局参数。但在我的一台测试设备(Xperia ray,Android 4.0.4)上,这只在横向模式下有效,而在纵向模式下无效。按照您的建议更改布局参数中的高度在我所有的测试设备上都可以正常工作,但对我不起作用。恐怕它在较新的API中不起作用。一旦TextView被分层,在TextView中设置高度就没有效果了;textView.getLayoutParamen()将为null。你应该在使用它之前判断null。试试这个:我更喜欢这样做,而不是找到正确的Layoutparams类这是真的@RoisgoenWhat需要特别注意的是,如果你使用textView获取Layoutparams(),判断null会更好?你帮了我,它太旧了,但你永远不知道:D
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
 }
  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()


    }
fun convertDpToPixel(dp: Float, context: Context): Int {
        return (dp * (context.resources.displayMetrics.densityDpi.toFloat() / DisplayMetrics.DENSITY_DEFAULT)).toInt()
    }
<dimen name="text_height">50dp</dimen>
<dimen name="text_width">50dp</dimen>
text_l.getLayoutParams().height = 
     getResources().getDimensionPixelSize(R.dimen.text_height);

text_l.getLayoutParams().width = 
     getResources().getDimensionPixelSize(R.dimen.text_width);
text_l.getLayoutParams().height = 50 * 3;
text_l.getLayoutParams().width= 100 * 3;