所以我想制作一个像我的屏幕一样宽的按钮。我希望它可以在任何设备屏幕大小上工作,因此输入像素值不是一个选项。我从这段代码中得到了我的整数。
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);
当我尝试运行它时出现错误...有关如何使其工作的任何想法。我对你可能建议的任何其他方法持开放态度。
由于
答案 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。
将字符串参数解析为带符号的十进制整数。字符串中的字符必须都是十进制数字,除了第一个字符可以是ASCII减号' - '('\ u002D')表示负值或ASCII加号'+'('\ u002B')表示正值。返回结果整数值,就像参数和基数10作为parseInt(java.lang.String,int)方法的参数一样。
抛出: NumberFormatException - 如果字符串不包含可解析的整数。
非整数字符串将在此处抛出NumberFormatException。
来自getWidth()调用的简单强制转换将宽度存储为int应该有效。