类 - Android Studio 之间的对齐布局交换

Alignment Layout exchange between classes - Android Studio

我正在实施一个程序,该程序使用 数据库 并与不同的 layouts 条目和编辑用户进行交互。

我正在所有屏幕上使用 RelativeLayout。在其中一个 layouts 中,我插入了一个完全对齐的按钮并给出 命令 android:visibility="gone" 让他根据要求显示。

问题是当我需要在command editarBt.setVisibility(View.VISIBLE)中使用它时,button出现错位并且与输入信息的字段重叠。

有什么方法可以保持按钮命令的位置吗?

我不会放完整的代码,因为它有 7 个 类,所以我只放那个感兴趣的 类。

EnterPatientActivity Class

package br.luizhmu.aulas_android_sqlite;

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;

/**
* Created by LuizHMU on 2/17/15.
*/
public class EnterPatientActivity extends Activity {

private Paciente paciente = new Paciente();
private EditText nomeEt;
private EditText emailEt;
private EditText senhaEt;
private Button salvarBt;
private Button editarBt;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_inserir_paciente);

    nomeEt = (EditText) findViewById(R.id.editTextNome);
    emailEt = (EditText) findViewById(R.id.editTextEmail);
    senhaEt = (EditText) findViewById(R.id.editTextSenha);
    salvarBt = (Button) findViewById(R.id.buttonSalvar);
    editarBt = (Button) findViewById(R.id.buttonEditar);

    Intent intent = getIntent();
    if(intent != null){
        Bundle bundle = intent.getExtras();
        if(bundle != null){

            paciente.setId(bundle.getLong("id"));
            paciente.setNome(bundle.getString("nome"));
            paciente.setEmail(bundle.getString("email"));

            nomeEt.setText(paciente.getNome());
            emailEt.setText(paciente.getEmail());

            senhaEt.setVisibility(View.GONE);
            salvarBt.setVisibility(View.GONE);
            editarBt.setVisibility(View.VISIBLE);

        }
    }
}

public void salvar(View view){
    paciente.setNome(nomeEt.getText().toString());
    paciente.setEmail(emailEt.getText().toString());
    paciente.setSenha(senhaEt.getText().toString());

    DataBase bd = new DataBase(this);
    bd.inserir(paciente);

    Toast.makeText(this, "Paciente inserido com sucesso!", Toast.LENGTH_SHORT).show();
}


public void editar(View view){
    paciente.setNome(nomeEt.getText().toString());
    paciente.setEmail(emailEt.getText().toString());

    DataBase bd = new DataBase(this);
    bd.atualizar(paciente);

    Toast.makeText(this, "Paciente \""+paciente.getNome()+"\" atualizado com sucesso.", Toast.LENGTH_SHORT).show();
}

}

activity_inserir_paciente.xml

<?xml version="1.0" encoding="utf-8"?>
<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:paddingLeft="15dp"
android:paddingRight="15dp"
android:background="#ffffea0a"
tools:context=".EnterPatientActivity">

<TextView
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:textAppearance="?android:attr/textAppearanceSmall"
    android:text="Novo paciente"
    android:id="@+id/textView3"
    android:layout_alignParentTop="true"
    android:layout_centerHorizontal="true"
    android:textColor="#ff1727ff"
    android:textSize="20dp"/>

<EditText
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:inputType="textPersonName"
    android:hint="*Nome"
    android:ems="10"
    android:id="@+id/editTextNome"
    android:layout_below="@+id/textView3"
    android:layout_alignRight="@+id/buttonSalvar"
    android:layout_alignEnd="@+id/buttonSalvar" />

<EditText
    android:hint="Telefone"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:inputType="phone"
    android:ems="10"
    android:id="@+id/editTextTelefone"
    android:layout_below="@+id/editTextNome"
    android:layout_alignParentLeft="true"
    android:layout_alignParentStart="true" />

<EditText
    android:hint="*E-mail"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:inputType="textEmailAddress"
    android:ems="10"
    android:id="@+id/editTextEmail"
    android:layout_below="@+id/editTextTelefone"
    android:layout_alignLeft="@+id/editTextTelefone"
    android:layout_alignStart="@+id/editTextTelefone" />

<EditText
    android:hint="*Senha"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:inputType="textPassword"
    android:ems="10"
    android:id="@+id/editTextSenha"
    android:layout_below="@+id/editTextEmail"
    android:layout_alignLeft="@+id/editTextEmail"
    android:layout_alignStart="@+id/editTextEmail" />

<Button
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="Salvar"
    android:id="@+id/buttonSalvar"
    android:onClick="salvar"
    android:layout_below="@+id/textView4"
    android:layout_alignRight="@+id/editTextSenha"
    android:layout_alignEnd="@+id/editTextSenha" />

<Button
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="Editar"
    android:id="@+id/buttonEditar"
    android:layout_alignTop="@+id/buttonSalvar"
    android:layout_toLeftOf="@+id/buttonSalvar"
    android:layout_toStartOf="@+id/buttonSalvar"
    android:visibility="gone"
    android:onClick="editar"/>

<TextView
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:textAppearance="?android:attr/textAppearanceSmall"
    android:text="* Campos de preenchimento obrigatório"
    android:textColor="#000000"
    android:id="@+id/textView4"
    android:layout_below="@+id/editTextSenha"
    android:layout_alignLeft="@+id/editTextSenha"
    android:layout_alignStart="@+id/editTextSenha" />


</RelativeLayout>

RelativeLayout 中,您可以使用 layout_toLeftOflayout_toRightOf[= 来防止视图重叠21=]、layout_abovelayout_below 属性,它们期望视图 ID 作为值。

此外,您可能希望使用 View.INVISIBLE 而不是 View.GONE:前者会在布局时考虑视图,但会隐藏它。后者会假装视图不存在,从而改变你的布局结果。