2013-05-07 2 views
0

Я пытаюсь сделать свой первый Android-калькулятор, первый код, который я написал, привел к калькулятору небольших кнопок, которые не изменяются по размеру экрана. Я искал в интернете и нашел несколько способов сделать это, и вот часть кода отвечает за это - у меня есть 20 кнопок, пронумерованных от 0 до 19 -Android Relative Layout: Button Layout params conflict

@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-файл, в списке являются Моими кнопка правила размещения, такие как toLeftOf, toRightOf, above, below, alignParentTop, alignParentLeft, alignParentRight и alignParentBottom.

<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» –

+1

Это создает копию переданного в 'ViewGroup.LayoutParams' (который является суперклассом« RelativeLayout » .LayoutParams', но вся специализация 'RelativeLayout' потеряна. Просто используйте' RelativeLayout.LayoutParams par = b.getLayoutParams() ', предполагая, что родитель' b' является 'RelativeLayout'. Обновлен ответ. – laalto

+0

Кажется, b.getLayoutParams() имеет ViewGroup.LayoutParams не RelativeLayout.LayoutParams ... –

Смежные вопросы