【问题标题】:How to change the postion of a button after click?单击后如何更改按钮的位置?
【发布时间】:2014-02-15 16:58:11
【问题描述】:

我有两个线性布局,主布局由两个 textview 和一个包含按钮和 textview 的内部布局组成...我想更改内部布局按钮的位置,我想在 main 中的最后一个 textivew 之后进入线性布局.. 这是我的 xml 文件....

<?xml version="1.0" encoding="utf-8"?>
<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent" >

    <LinearLayout
        xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:orientation="vertical" >

        <TextView
            android:id="@+id/textView1"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_gravity="center"
            android:text="Personal Information"
            android:textSize="30sp" />
        <LinearLayout
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:orientation="horizontal" >
        <TextView
                 android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="Email" />

        <Button
            android:id="@+id/btnAddEmail"
            android:layout_width="93dp"
            android:layout_height="wrap_content"
            android:text="Add" />   
    </LinearLayout>
    <TextView 
        android:id="@+id/tvEmail"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"

        />
    </LinearLayout>

</ScrollView>

【问题讨论】:

    标签: android android-layout


    【解决方案1】:

    一种解决方案是在另一个位置设置另一个不可见按钮,当您想要“移动”按钮时,将当前按钮设置为“不可见”并切换另一个按钮。

    【讨论】:

    • 但是我在那个按钮上有一个点击监听器..如果我改变可见性那么我怎么能在我想看到的其他人上做同样的工作@alfasin
    • 我不明白怎么做??
    • 在您的下方按钮的点击事件中使用 your_btn.performClick()。
    【解决方案2】:

    就像 alfasin 所说的,您的布局中有两个按钮。根据您的要求将一个的可见性设置为 GONE 或 INVISIBLE。 INVISIBLE 只会隐藏按钮,但显示按钮所需的空间将被保留。 GONE 将隐藏按钮,并且它在布局中占用的空间也将被移除。

    btn.setVisibilty(View.GONE)
    btn.setVisibilty(View.INVISIBLE)
    btn.setVisibilty(View.VISIBLE)
    

    如果您希望两者触发相同的操作,则为两个按钮注册相同的点击侦听器。进行额外检查以根据单击的按钮切换可见性。

    【讨论】:

      【解决方案3】:

      在最后一个 TextView 下方添加第二个按钮,并将其可见性设置为“已消失”。

      XML:

      <LinearLayout
          xmlns:android="http://schemas.android.com/apk/res/android"
          android:layout_width="wrap_content"
          android:layout_height="wrap_content"
          android:orientation="vertical" >
      
          <TextView
              android:id="@+id/textView1"
              android:layout_width="wrap_content"
              android:layout_height="wrap_content"
              android:layout_gravity="center"
              android:text="Personal Information"
              android:textSize="30sp" />
          <LinearLayout
              android:layout_width="wrap_content"
              android:layout_height="wrap_content"
              android:orientation="horizontal" >
              <TextView
                  android:layout_width="wrap_content"
                  android:layout_height="wrap_content"
                  android:text="Email" />
      
              <Button
                  android:id="@+id/btnAddEmail"
                  android:layout_width="93dp"
                  android:layout_height="wrap_content"
                  android:text="Add" />   
          </LinearLayout>
          <TextView 
              android:id="@+id/tvEmail"
              android:layout_width="wrap_content"
              android:layout_height="wrap_content"
      
              />
          <Button
              android:id="@+id/btnNew"
              android:layout_width="93dp"
              android:layout_height="wrap_content"
              android:text="New Button"
              android:visibility="gone" />   
      </LinearLayout>
      

      获取您的按钮,初始化您的 OnClickListener 并执行您的逻辑。然后切换两个按钮的可见性状态就完成了:

      private Button mAddMail;
      private Button mNewButton;
      
      @Override
      protected void onCreate(Bundle savedInstanceState) {
          super.onCreate(savedInstanceState);
          // Inflate your layout
          setContentView(R.layout.activity_main);
      
          mAddMail = (Button) findViewById(R.id.btnAddEmail);
          mNewButton = (Button) findViewById(R.id.btnNew);
      
          mAddMail.setOnClickListener(new OnClickListener() {
              @Override
              public void onClick(View v) {
                  // Do your logic
                  // ....
                  mAddMail.setVisibility(View.GONE);
                  mNewButton.setVisibility(View.VISIBLE);
              }
          });
      }
      

      使用这种方法,您不会直接更改按钮位置。这更像是一个小解决方法。你总是有两个按钮,你只改变它们的可见性。

      【讨论】:

      • 但是我的项目中有很多按钮..我认为这将是一个非常漫长的过程.....感谢您的响应
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-02-08
      • 2012-03-29
      • 1970-01-01
      • 2012-06-14
      • 1970-01-01
      • 2019-03-28
      相关资源
      最近更新 更多