【问题标题】:Setting width to wrap_content for TextView through code通过代码将 TextView 的宽度设置为 wrap_content
【发布时间】:2011-01-31 18:18:46
【问题描述】:

谁能帮助我如何通过代码而不是 XML 将 TextView 的宽度设置为 wrap_content

我在代码中动态创建TextView,那么无论如何如何通过代码将其宽度设置为wrap_content

【问题讨论】:

    标签: android textview


    【解决方案1】:
    TextView pf = new TextView(context);
    pf.setLayoutParams(new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT));
    

    对于ConstraintLayout等不同的布局,他们有自己的LayoutParams,像这样:

    pf.setLayoutParams(new ConstraintLayout.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT)); 
    

    parentView.addView(pf, new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT));
    

    【讨论】:

    • android.view.ViewGroup$LayoutParams cannot be cast to android.widget.LinearLayout$LayoutParams
    • 嗯,主要区别在于,在第一个代码中,我们已经使用该设置创建了一个新的 TextView。在第二个中,我们正在添加到现有视图中,并且我们正在设置这些参数。对于演员表问题,我认为您必须选择正确的课程
    【解决方案2】:

    还有另一种方法可以达到相同的效果。如果您只需要设置一个参数,例如“高度”:

    TextView textView = (TextView)findViewById(R.id.text_view);
    ViewGroup.LayoutParams params = textView.getLayoutParams();
    params.height = ViewGroup.LayoutParams.WRAP_CONTENT;
    textView.setLayoutParams(params);
    

    【讨论】:

    • 这很好用。如果这是在LinearLayout 上完成的,那么ll.invalidate() 似乎没有必要。为什么?
    • 我想我们永远不会知道
    【解决方案3】:

    TextView 宽度更改为包装内容的解决方案。

    textView.getLayoutParams().width = ViewGroup.LayoutParams.WRAP_CONTENT; 
    textView.requestLayout();  
    // Call requestLayout() for redraw your TextView when your TextView is already drawn (laid out) (eg: you update TextView width when click a Button). 
    // If your TextView is drawing you may not need requestLayout() (eg: you change TextView width inside onCreate()). However if you call it, it still working well => for easy: always use requestLayout()
    
    // Another useful example
    // textView.getLayoutParams().width = 200; // For change `TextView` width to 200 pixel
    

    【讨论】:

    • 简单而正确的解决方案,因为它不会覆盖其他参数。
    • 将我的答案标记为删除,因为这更简单。
    • 这是最好的解决方案
    【解决方案4】:

    关于这篇文章的一点更新:如果您在 Android 项目中使用 ktx,有一个小帮助方法可以让更新 LayoutParams 变得更加容易。

    如果您想更新,例如只有你可以在 Kotlin 中使用以下行来做到这一点的宽度。

    tv.updateLayoutParams { width = WRAP_CONTENT }
    

    【讨论】:

      【解决方案5】:

      我正在发布基于 android Java 的多行编辑文本。

      EditText editText = findViewById(R.id.editText);/* edittext access */
      
      ViewGroup.LayoutParams params  =  editText.getLayoutParams(); 
      params.height = ViewGroup.LayoutParams.WRAP_CONTENT;
      editText.setLayoutParams(params); /* Gives as much height for multi line*/
      
      editText.setSingleLine(false); /* Makes it Multi line */
      

      【讨论】:

        【解决方案6】:

        我认为这段代码回答了你的问题

        RelativeLayout.LayoutParams params = (RelativeLayout.LayoutParams) 
        holder.desc1.getLayoutParams();
        params.height = RelativeLayout.LayoutParams.WRAP_CONTENT;
        holder.desc1.setLayoutParams(params);
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2013-04-07
          • 2011-12-25
          • 2023-03-23
          • 2021-06-04
          • 1970-01-01
          相关资源
          最近更新 更多