2013-05-07 78 views
0

我想让我的第一个Android计算器,我写的第一个代码导致计算器的小按钮,它不根据屏幕大小重新调整大小。 我在网上搜索,发现了一些方法来做到这一点,这里的代码负责的一部分 - 我有20个按钮,编号从0到19 -Android相对布局:按钮布局参数冲突

@SuppressLint("NewApi") 
@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_welcome); 
    Display display = getWindowManager().getDefaultDisplay(); 
    Point size = new Point(); 
    int width,height; 
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB_MR2) 
    { 
     WindowManager w = getWindowManager(); 
     w.getDefaultDisplay().getSize(size); 
     width = size.x; 
     height = size.y; 
    } 
    else 
    { 
     width = display.getWidth(); 
     height = display.getHeight(); 
    } 
    Button b; 
    TextView text1 = (TextView)findViewById(R.id.screen); 
    text1.setWidth(width); 
    width/=6; 
    height/=7; 
    text1.setHeight(height); 
    for (int i=0;i<20;i++) 
    { 
     String ButtonName = "button"+i; 
     int ButtonId = getResources().getIdentifier(ButtonName, "id", "calculator.essam.net"); 
     b = (Button)findViewById(ButtonId); 
     RelativeLayout.LayoutParams par = new RelativeLayout.LayoutParams(b.getLayoutParams()); 
par.width = width; 
par.height = height; 
     b.setLayoutParams(par); 
    } 
} 

在XML文件中,列出的我按钮布局规则,如toLeftOftoRightOfabovebelowalignParentTopalignParentLeftalignParentRightalignParentBottom

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
xmlns:tools="http://schemas.android.com/tools" 
android:layout_width="match_parent" 
android:layout_height="match_parent" 
android:paddingBottom="@dimen/activity_vertical_margin" 
android:paddingLeft="@dimen/activity_horizontal_margin" 
android:paddingRight="@dimen/activity_horizontal_margin" 
android:paddingTop="@dimen/activity_vertical_margin" 
tools:context=".WelcomeActivity" > 


<TextView 
    android:id="@+id/screen" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_centerHorizontal="true" 
    android:layout_alignParentTop="true" 
    android:text="" /> 

<Button 
    android:id="@+id/button0" 

    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_above="@+id/button18" 
    android:layout_alignParentLeft="true" 
    android:minHeight="0dp" 
    android:minWidth="0dp" 
    android:onClick="click" 
    android:tag="0" 
    android:text="@string/number0" /> 

<Button 
    android:id="@+id/button1" 

    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_above="@+id/button0" 
    android:layout_alignParentLeft="true" 
    android:layout_below="@+id/button4" 
    android:minHeight="0dp" 
    android:minWidth="0dp" 
    android:onClick="click" 
    android:tag="1" 
    android:text="@string/number1" /> 

<Button 
    android:id="@+id/button2" 

    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_above="@+id/button10" 
    android:layout_below="@+id/button5" 
    android:layout_toLeftOf="@+id/button3" 
    android:layout_toRightOf="@+id/button1" 
    android:minHeight="0dp" 
    android:minWidth="0dp" 
    android:onClick="click" 
    android:tag="2" 
    android:text="@string/number2" /> 

<Button 
    android:id="@+id/button3" 

    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_above="@+id/button15" 
    android:layout_below="@+id/button6" 
    android:layout_toLeftOf="@+id/button13" 
    android:minHeight="0dp" 
    android:minWidth="0dp" 
    android:onClick="click" 
    android:tag="3" 
    android:text="@string/number3" /> 

<Button 
    android:id="@+id/button4" 

    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_alignParentLeft="true" 
    android:layout_below="@+id/button7" 
    android:layout_toLeftOf="@+id/button5" 
    android:minHeight="0dp" 
    android:minWidth="0dp" 
    android:onClick="click" 
    android:tag="4" 
    android:text="@string/number4" /> 

<Button 
    android:id="@+id/button5" 

    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_below="@+id/button8" 
    android:layout_toLeftOf="@+id/button6" 
    android:minHeight="0dp" 
    android:minWidth="0dp" 
    android:onClick="click" 
    android:tag="5" 
    android:text="@string/number5" /> 

<Button 
    android:id="@+id/button6" 

    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_below="@+id/button9" 
    android:layout_toLeftOf="@+id/button12" 
    android:minHeight="0dp" 
    android:minWidth="0dp" 
    android:onClick="click" 
    android:tag="6" 
    android:text="@string/number6" /> 

<Button 
    android:id="@+id/button7" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_alignParentLeft="true" 
    android:layout_below="@+id/screen" 
    android:layout_toLeftOf="@+id/button8" 
    android:minHeight="0dp" 
    android:minWidth="0dp" 
    android:onClick="click" 
    android:tag="7" 
    android:text="@string/number7" /> 

<Button 
    android:id="@+id/button8" 

    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_below="@+id/screen" 
    android:layout_toLeftOf="@+id/button9" 
    android:minHeight="0dp" 
    android:minWidth="0dp" 
    android:onClick="click" 
    android:tag="8" 
    android:text="@string/number8" /> 

<Button 
    android:id="@+id/button9" 

    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_below="@+id/screen" 
    android:layout_toLeftOf="@+id/button11" 
    android:minHeight="0dp" 
    android:minWidth="0dp" 
    android:onClick="click" 
    android:tag="9" 
    android:text="@string/number9" /> 

<Button 
    android:id="@+id/button10" 

    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_above="@+id/button19" 
    android:layout_toRightOf="@+id/button0" 
    android:minHeight="0dp" 
    android:minWidth="0dp" 
    android:onClick="click" 
    android:tag="." 
    android:text="@string/dot" /> 

<Button 
    android:id="@+id/button11" 

    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_above="@+id/button12" 
    android:layout_alignParentRight="true" 
    android:layout_below="@+id/screen" 
    android:minHeight="0dp" 
    android:minWidth="0dp" 
    android:onClick="click" 
    android:tag="+" 
    android:text="@string/signPlus" /> 

<Button 
    android:id="@+id/button12" 

    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_above="@+id/button13" 
    android:layout_alignParentRight="true" 
    android:minHeight="0dp" 
    android:minWidth="0dp" 
    android:onClick="click" 
    android:tag="-" 
    android:text="@string/signMinus" /> 

<Button 
    android:id="@+id/button13" 

    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_above="@+id/button14" 
    android:layout_alignParentRight="true" 
    android:minHeight="0dp" 
    android:minWidth="0dp" 
    android:onClick="click" 
    android:tag="*" 
    android:text="@string/signTimes" /> 

<Button 
    android:id="@+id/button14" 

    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_above="@+id/button17" 
    android:layout_alignParentRight="true" 
    android:layout_toRightOf="@+id/button15" 
    android:minHeight="0dp" 
    android:minWidth="0dp" 
    android:onClick="click" 
    android:tag="/" 
    android:text="@string/signDivide" /> 

<Button 
    android:id="@+id/button15" 

    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_above="@+id/button16" 
    android:layout_toRightOf="@+id/button10" 
    android:minHeight="0dp" 
    android:minWidth="0dp" 
    android:onClick="click" 
    android:tag="=" 
    android:text="@string/signEquals" /> 

<Button 
    android:id="@+id/button16" 

    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_alignParentBottom="true" 
    android:layout_toLeftOf="@+id/button17" 
    android:layout_toRightOf="@+id/button19" 
    android:minHeight="0dp" 
    android:minWidth="0dp" 
    android:onClick="click" 
    android:tag="(" 
    android:text="@string/openBracket" /> 

<Button 
    android:id="@+id/button17" 

    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_alignParentBottom="true" 
    android:layout_alignParentRight="true" 
    android:minHeight="0dp" 
    android:minWidth="0dp" 
    android:onClick="click" 
    android:tag=")" 
    android:text="@string/closedBracket" /> 

<Button 
    android:id="@+id/button18" 

    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_alignParentBottom="true" 
    android:layout_alignParentLeft="true" 
    android:minHeight="0dp" 
    android:minWidth="0dp" 
    android:onClick="click" 
    android:tag="CLR" 
    android:text="@string/clear" 
    android:textSize="12sp" /> 

<Button 
    android:id="@+id/button19" 

    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_alignParentBottom="true" 
    android:layout_toRightOf="@+id/button18" 
    android:minHeight="0dp" 
    android:minWidth="0dp" 
    android:onClick="click" 
    android:tag="DEL" 
    android:text="@string/backSpace" 
    android:textSize="12sp" /> 

问题是当我使用RelativeLayout.LayoutParams我所有的布局规则被覆盖,当我使用button.setWidth()button.setHeight(),布局规则保持不变,但规模不会改变。 任何帮助,欢迎提前致谢。

回答

1

你应该在现有的布局参数上设置宽度和高度,而不是用新的替换它。您可以访问getLayoutParams()在布局膨胀期间创建的布局参数。也就是说,更换

RelativeLayout.LayoutParams par = new RelativeLayout.LayoutParams(b.getLayoutParams()); 

RelativeLayout.LayoutParams par = b.getLayoutParams(); 

不过我建议你忘了这种布局,并学会使用LinearLayout layout_weight机制,使视图大小相对于可用空间。

+0

RelativeLayout.LayoutParams par = new RelativeLayout.LayoutParams(b.getLayoutParams()); 我不确定这是否是正确的语法,但我从按钮“b”获取布局参数 – 2013-05-07 08:36:38

+1

这会创建一个传递给ViewGroup.LayoutParams的副本(它是RelativeLayout的超类.LayoutParams',但是'RelativeLayout'的所有特殊化都会丢失,只要使用'RelativeLayout.LayoutParams par = b.getLayoutParams()',假设'b'的父亲是'RelativeLayout'。更新了答案。 – laalto 2013-05-07 08:49:34

+0

看来b.getLayoutParams()是ViewGroup.LayoutParams而不是RelativeLayout.LayoutParams ... – 2013-05-07 08:57:46