具体来说.setWidth或.setHeight使用什么类型的Integer?

时间:2014-01-08 00:41:52

标签: java android

所以我想制作一个像我的屏幕一样宽的按钮。我希望它可以在任何设备屏幕大小上工作,因此输入像素值不是一个选项。我从这段代码中得到了我的整数。

   String widthString = String.valueOf(getWindowManager().getDefaultDisplay().getWidth());
   double widthDouble = Double.parseDouble(widthString);
   double result = widthDouble / 2;     
   String resultString = String.valueOf(result);
   int myNum = Integer.parseInt(resultString);

然后当我像这样将Integer运行到Button中时。

  Button myButton = new Button(this);
  myButton.setWidth(myNum);

当我尝试运行它时出现错误...有关如何使其工作的任何想法。我对你可能建议的任何其他方法持开放态度。

由于

3 个答案:

答案 0 :(得分:2)

您最有可能获得NumberFormatException,因为将整数除以2会导致以.5结尾的数字点将导致parseInt()失败,整数没有句点。

可以只有catch异常,但我建议您将结果double强制转换为int,因为getWidth()会返回一个整数无论如何,所以你不能走出界限。除非你在TextView或类似的东西中显示这些数字,否则我也看不到字符串废话的意思。

例如

int myNum = (int) (getWindowManager().getDefaultDisplay().getWidth()/2);

相当于

double widthDouble = getWindowManager().getDefaultDisplay().getWidth()/2;
int myNum = (int) widthDouble;

答案 1 :(得分:1)

您可以尝试使用布局权重,如下所示:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:baselineAligned="false"
    android:orientation="horizontal" >

    <LinearLayout
        android:layout_width="0dp"
        android:layout_height="48dp"
        android:layout_weight="1" />

   <LinearLayout
        android:layout_width="0dp"
        android:layout_height="48dp"
        android:layout_weight="2">

        <Button
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:text="My Button" />
    </LinearLayout>

    <LinearLayout
        android:layout_width="0dp"
        android:layout_height="48dp"
        android:layout_weight="1" />
</LinearLayout>

答案 2 :(得分:0)

这是由NumberFormatException引起的,因为当你除以2并转换为字符串时,你得到一个非整数结果。

Integer.parseInt("1.5")

这会抛出NumberFormatException。

来自Oracle documentation

  

将字符串参数解析为带符号的十进制整数。字符串中的字符必须都是十进制数字,除了第一个字符可以是ASCII减号' - '('\ u002D')表示负值或ASCII加号'+'('\ u002B')表示正值。返回结果整数值,就像参数和基数10作为parseInt(java.lang.String,int)方法的参数一样。

     

抛出:   NumberFormatException - 如果字符串不包含可解析的整数。

非整数字符串将在此处抛出NumberFormatException。

来自getWidth()调用的简单强制转换将宽度存储为int应该有效。

相关问题