【问题标题】:Creating a button in Java, causes getLayoutParams to return null在 Java 中创建一个按钮,导致 getLayoutParams 返回 null
【发布时间】:2023-03-03 06:09:22
【问题描述】:

我需要在 Java 中创建一个按钮。以下是我的代码:

 Button b = new Button(MyClass.this);
 b.requestLayout();
 LayoutParams lp = b.getLayoutParams();
 lp.height = LayoutParams.WRAP_CONTENT;
 lp.width = LayoutParams.WRAP_CONTENT;
 b.setLayoutParams(lp);
 b.setText("bla");
 b.setTextSize(16);
 b.setOnClickListener(myListener);

然后我将此按钮添加到 ListView 的底部:

 getListView().addFooterView(b);

但是这会崩溃,因为 getLayoutParams 返回 null。

即使我创建新的 LayoutParams 而不是 getLayoutParams,即:

 Button b = new Button(MyClass.this);
 LayoutParams lp = new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);
 b.setLayoutParams(lp); 
 b.setText("bla");
 b.setTextSize(16);
 b.setOnClickListener(myListener);

然后应用程序崩溃。没有 setLayoutParams,它运行良好,但我的按钮大小不合适。

如何调整按钮的大小?

【问题讨论】:

    标签: android button size layoutparams


    【解决方案1】:

    因为我是通过 ListView::addFooterView 添加这个按钮的,所以我不得不使用 ListView 类型。

     b.setLayoutParams(new ListView.LayoutParams(ListView.LayoutParams.WRAP_CONTENT, ListView.LayoutParams.WRAP_CONTENT));
    

    使用它而不是仅仅使用 LayoutParams 可以解决我的崩溃问题。希望这对其他人有帮助。

    【讨论】:

      【解决方案2】:

      它返回 null 是因为当您以编程方式创建小部件时,它没有布局参数! (直到您将其添加到视图中,它才会从 LayoutManager 接收默认值)

      编辑:上面是指代码的第 3 行

      像这样设置它们:

      TextView moneyTV = new TextView(this);
      LayoutParams lp1 = new LayoutParams(HeightParamHere, WidthParamHere, WeightParamHere);
      moneyTV.setLayoutParams(lp1);
      

      Edit2:这里有一些现成的替换代码。

      Button b = new Button(MyClass.this);
      b.setLayoutParams(new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT));
      b.setText("bla");
      b.setTextSize(16);
      b.setOnClickListener(myListener);
      

      假设您已经定义了 myListener,这应该可以工作。

      【讨论】:

      • 嗨,Eric,谢谢 - 我刚刚更新了我的问题,请查看代码 - 我尝试使用 new 设置我的 LayoutParams,但这会导致我的应用程序崩溃。调用 setListAdapter(adapter) 后发生崩溃。
      • 您的应用程序在第 2 行和第 3 行崩溃。您请求的参数不存在,因此出现空指针异常。
      • 抱歉 - 我没有正确更新我的问题,我已经更新了最后的代码部分,这仍然会导致我的应用程序在调用 setListAdapter(适配器)时崩溃。没有调用 setLayoutParams,它运行良好。
      • 感谢您的 Edit2 代码。我复制并粘贴了此代码,但它仍然在 setListAdapter(适配器)处崩溃。没有调用 b.setLayoutParams,它运行良好:s
      【解决方案3】:

      如果您想从按钮中获取LayoutParams,您必须将此按钮添加到视图中。或者只是创建新的LayoutParams 并设置它。

      【讨论】:

      • 嗨 Pixie,谢谢我刚刚更新了我的问题 - 我尝试创建新的 LayoutParams,但这会使我的应用程序崩溃。
      • 尚不清楚您的应用崩溃的原因。所以请提供来自 logcat 输出的堆栈跟踪。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-09-08
      • 1970-01-01
      • 2011-02-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多