以编程方式在按钮上应用setLayoutParams会导致整个布局混乱和异常

时间:2013-09-09 12:47:21

标签: android android-layout android-xml android-button

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="wrap_content"
android:layout_height="match_parent" >

<LinearLayout
    android:id="@+id/buttons"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_alignParentBottom="true"
    android:layout_alignParentLeft="true" >

    <Button
        android:id="@+id/insertButtonVIEW"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_weight="1"
        android:text="insert" />

    <Button
        android:id="@+id/removeButtonVIEW"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_weight="1"
        android:text="remove" />
</LinearLayout>
</RelativeLayout>

有时,根据情境,我使用setVisibility(View.INVISIBLE);方法隐藏了removeButtonVIEW 当发生这种情况时,我希望我的insertButtonVIEW占据屏幕的整个宽度(当两个存在时,每个占据屏幕的50%)。

由于这可能会或可能不会发生,我正在以编程方式进行这些更改。

我尝试了以下有效的方法,然而,它导致所有界面变得非常庞大,因为屏幕上的所有位置都变得混杂。

modifyButton.setLayoutParams(new LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT));

任何提示?

应用答案后更新1: 我使用以下代码将按钮设置为不可见。

Bundle extras;
extras = getIntent().getExtras();
String answer = extras.getString("answer");

if(answer.equalsIgnoreCase("yes")
{
  insertButton.setEnabled(true);
  insertButton.setText("INSERT");
  removeButton.setVisibility(View.INVISIBLE);
}
else
{
 //whatever
}

2 个答案:

答案 0 :(得分:1)

// I Have modify your code now try this one and you don't required set LayoutParams ().

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="wrap_content"
    android:layout_height="match_parent" >

    <LinearLayout
        android:id="@+id/buttons"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_alignParentBottom="true"
        android:layout_alignParentLeft="true" >

        <Button
            android:id="@+id/insertButtonVIEW"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:text="insert" />

        <Button
            android:id="@+id/removeButtonVIEW"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:text="remove" />
    </LinearLayout>

</RelativeLayout>



if(answer.equalsIgnoreCase("yes")
{
  insertButton.setEnabled(true);
  insertButton.setText("INSERT");
  removeButton.setVisibility(View.GONE);
}
else
{
 //whatever
}

答案 1 :(得分:0)

使用

setVisibility(View.GONE);

* 删除此*

modifyButton.setLayoutParams(new LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT));

并设置

 android:layout_width="0dp"
按钮中的