quick tips for android
Post on 21-Jan-2017
150 Views
Preview:
TRANSCRIPT
com Daniel Baccin
Quick tips for Android
Aplicando diferentes layouts de acordo com a orientação do
dispositivo
<LinearLayout 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="@dimen/activity_horizontal_margin" android:paddingRight="@dimen/activity_horizontal_margin" android:paddingTop="@dimen/activity_vertical_margin" android:paddingBottom="@dimen/activity_vertical_margin" android:orientation="vertical" tools:context=".MainActivity">
<TextView android:text="@string/digite" android:layout_width="wrap_content" android:layout_height="wrap_content" />
<EditText android:id="@+id/editText1" android:layout_width="match_parent" android:layout_height="wrap_content" />
<Button android:layout_width="wrap_content" android:layout_height="wrap_content" android:onClick="meuBotaoClick" android:text="@string/adicionar"/>
<ListView android:id="@+id/listView" android:layout_width="match_parent" android:layout_height="match_parent"/>
</LinearLayout>
<LinearLayout 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="@dimen/activity_horizontal_margin" android:paddingRight="@dimen/activity_horizontal_margin" android:paddingTop="@dimen/activity_vertical_margin" android:paddingBottom="@dimen/activity_vertical_margin" android:orientation="vertical" tools:context=".MainActivity">
<TextView android:text="@string/digite" android:layout_width="wrap_content" android:layout_height="wrap_content" />
<EditText android:id="@+id/editText1" android:layout_width="match_parent" android:layout_height="wrap_content" />
<Button android:layout_width="wrap_content" android:layout_height="wrap_content" android:onClick="meuBotaoClick" android:text="@string/adicionar"/>
<ListView android:id="@+id/listView" android:layout_width="match_parent" android:layout_height="match_parent"/>
</LinearLayout>
<LinearLayout 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="@dimen/activity_horizontal_margin" android:paddingRight="@dimen/activity_horizontal_margin" android:paddingTop="@dimen/activity_vertical_margin" android:paddingBottom="@dimen/activity_vertical_margin" android:orientation="vertical" tools:context=".MainActivity">
<TextView android:text="@string/digite" android:layout_width="wrap_content" android:layout_height="wrap_content" />
<EditText android:id="@+id/editText1" android:layout_width="match_parent" android:layout_height="wrap_content" />
<Button android:layout_width="wrap_content" android:layout_height="wrap_content" android:onClick="meuBotaoClick" android:text="@string/adicionar"/>
<ListView android:id="@+id/listView" android:layout_width="match_parent" android:layout_height="match_parent"/>
</LinearLayout>
<LinearLayout 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="@dimen/activity_horizontal_margin" android:paddingRight="@dimen/activity_horizontal_margin" android:paddingTop="@dimen/activity_vertical_margin" android:paddingBottom="@dimen/activity_vertical_margin" android:orientation="vertical" tools:context=".MainActivity">
<TextView android:text="@string/digite" android:layout_width="wrap_content" android:layout_height="wrap_content" />
<EditText android:id="@+id/editText1" android:layout_width="match_parent" android:layout_height="wrap_content" />
<Button android:layout_width="wrap_content" android:layout_height="wrap_content" android:onClick="meuBotaoClick" android:text="@string/adicionar"/>
<ListView android:id="@+id/listView" android:layout_width="match_parent" android:layout_height="match_parent"/>
</LinearLayout>
<LinearLayout 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="@dimen/activity_horizontal_margin" android:paddingRight="@dimen/activity_horizontal_margin" android:paddingTop="@dimen/activity_vertical_margin" android:paddingBottom="@dimen/activity_vertical_margin" android:orientation="vertical" tools:context=".MainActivity">
<TextView android:text="@string/digite" android:layout_width="wrap_content" android:layout_height="wrap_content" />
<EditText android:id="@+id/editText1" android:layout_width="match_parent" android:layout_height="wrap_content" />
<Button android:layout_width="wrap_content" android:layout_height="wrap_content" android:onClick="meuBotaoClick" android:text="@string/adicionar"/>
<ListView android:id="@+id/listView" android:layout_width="match_parent" android:layout_height="match_parent"/>
</LinearLayout>
<LinearLayout 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="@dimen/activity_horizontal_margin" android:paddingRight="@dimen/activity_horizontal_margin" android:paddingTop="@dimen/activity_vertical_margin" android:paddingBottom="@dimen/activity_vertical_margin" android:orientation="vertical" tools:context=".MainActivity">
<TextView android:text="@string/digite" android:layout_width="wrap_content" android:layout_height="wrap_content" />
<EditText android:id="@+id/editText1" android:layout_width="match_parent" android:layout_height="wrap_content" />
<Button android:layout_width="wrap_content" android:layout_height="wrap_content" android:onClick="meuBotaoClick" android:text="@string/adicionar"/>
<ListView android:id="@+id/listView" android:layout_width="match_parent" android:layout_height="match_parent"/>
</LinearLayout>
public class MainActivity extends AppCompatActivity {...@Overrideprotected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState); setContentView(R.layout.activity_main);
nomes = new ArrayList<String>(); editText = (EditText) findViewById(R.id.editText1); listView = (ListView) findViewById(R.id.listView);
adapter = new ArrayAdapter<String>(
this,android.R.layout.simple_list_item_1, nomes);
listView.setAdapter(adapter);}
}
public class MainActivity extends AppCompatActivity {...@Overrideprotected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState); setContentView(R.layout.activity_main);
nomes = new ArrayList<String>(); editText = (EditText) findViewById(R.id.editText1); listView = (ListView) findViewById(R.id.listView);
adapter = new ArrayAdapter<String>(
this,android.R.layout.simple_list_item_1, nomes);
listView.setAdapter(adapter);}
}
public class MainActivity extends AppCompatActivity {...@Overrideprotected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState); setContentView(R.layout.activity_main);
nomes = new ArrayList<String>(); editText = (EditText) findViewById(R.id.editText1); listView = (ListView) findViewById(R.id.listView);
adapter = new ArrayAdapter<String>( this,android.R.layout.simple_list_item_1, nomes);
listView.setAdapter(adapter);}
}
<Button android:layout_width="wrap_content" android:layout_height="wrap_content" android:onClick="meuBotaoClick" android:text="@string/adicionar"/>
<Button android:layout_width="wrap_content" android:layout_height="wrap_content" android:onClick="meuBotaoClick" android:text="@string/adicionar"/>
public class MainActivity extends AppCompatActivity {…public void meuBotaoClick(View v){
nomes.add(editText.getText().toString()); editText.setText(""); adapter.notifyDataSetChanged();
}
}
Clique com Botão direito na pasta res:
New > Android resorce directory
Agora copie e cole o arquivo de layoutpara a nova pasta, ficando assim:
➔ res/layout/activity_main.xml➔ res/layout-land/activity_main.xml
<LinearLayout 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="@dimen/activity_horizontal_margin" android:paddingRight="@dimen/activity_horizontal_margin" android:paddingTop="@dimen/activity_vertical_margin" android:paddingBottom="@dimen/activity_vertical_margin" android:orientation="horizontal">
<LinearLayout android:layout_width="0dp" android:layout_height="match_parent" android:layout_weight="1" android:orientation="vertical">
<TextView android:text="@string/digite" android:layout_width="wrap_content" android:layout_height="wrap_content" />
<EditText android:id="@+id/editText1" android:layout_width="match_parent" android:layout_height="wrap_content" />
<Button android:layout_width="wrap_content" android:layout_height="wrap_content" android:onClick="meuBotaoClick" android:text="@string/adicionar"/>
</LinearLayout> <ListView android:id="@+id/listView" android:layout_width="0dp" android:layout_height="match_parent" android:layout_weight="2"/>
</LinearLayout>
<LinearLayout 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="@dimen/activity_horizontal_margin" android:paddingRight="@dimen/activity_horizontal_margin" android:paddingTop="@dimen/activity_vertical_margin" android:paddingBottom="@dimen/activity_vertical_margin" android:orientation="horizontal">
<LinearLayout android:layout_width="0dp" android:layout_height="match_parent" android:layout_weight="1" android:orientation="vertical">
<TextView android:text="@string/digite" android:layout_width="wrap_content" android:layout_height="wrap_content" />
<EditText android:id="@+id/editText1" android:layout_width="match_parent" android:layout_height="wrap_content" />
<Button android:layout_width="wrap_content" android:layout_height="wrap_content" android:onClick="meuBotaoClick" android:text="@string/adicionar"/> </LinearLayout>
<ListView android:id="@+id/listView" android:layout_width="0dp" android:layout_height="match_parent" android:layout_weight="2"/>
</LinearLayout>
<LinearLayout 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="@dimen/activity_horizontal_margin" android:paddingRight="@dimen/activity_horizontal_margin" android:paddingTop="@dimen/activity_vertical_margin" android:paddingBottom="@dimen/activity_vertical_margin" android:orientation="horizontal">
<LinearLayout android:orientation="vertical" android:layout_height="match_parent" android:layout_width="0dp" android:layout_weight="1">
<TextView android:text="@string/digite" android:layout_width="wrap_content" android:layout_height="wrap_content" />
<EditText android:id="@+id/editText1" android:layout_width="match_parent" android:layout_height="wrap_content" />
<Button android:layout_width="wrap_content" android:layout_height="wrap_content" android:onClick="meuBotaoClick" android:text="@string/adicionar"/> </LinearLayout>
<ListView android:id="@+id/listView" android:layout_height="match_parent" android:layout_width="0dp" android:layout_weight="2"/>
</LinearLayout>
<LinearLayout 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="@dimen/activity_horizontal_margin" android:paddingRight="@dimen/activity_horizontal_margin" android:paddingTop="@dimen/activity_vertical_margin" android:paddingBottom="@dimen/activity_vertical_margin" android:orientation="horizontal">
<LinearLayout android:orientation="vertical" android:layout_height="match_parent" android:layout_width="0dp" android:layout_weight="1">
<TextView android:text="@string/digite" android:layout_width="wrap_content" android:layout_height="wrap_content" />
<EditText android:id="@+id/editText1" android:layout_width="match_parent" android:layout_height="wrap_content" />
<Button android:layout_width="wrap_content" android:layout_height="wrap_content" android:onClick="meuBotaoClick" android:text="@string/adicionar"/> </LinearLayout>
<ListView android:id="@+id/listView" android:layout_height="match_parent" android:layout_width="0dp" android:layout_weight="2"/>
</LinearLayout>
<LinearLayout 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="@dimen/activity_horizontal_margin" android:paddingRight="@dimen/activity_horizontal_margin" android:paddingTop="@dimen/activity_vertical_margin" android:paddingBottom="@dimen/activity_vertical_margin" android:orientation="horizontal">
<LinearLayout android:layout_width="0dp" android:layout_height="match_parent" android:layout_weight="1" android:orientation="vertical">
<TextView android:text="@string/digite" android:layout_width="wrap_content" android:layout_height="wrap_content" />
<EditText android:id="@+id/editText1" android:layout_width="match_parent" android:layout_height="wrap_content" />
<Button android:layout_width="wrap_content" android:layout_height="wrap_content" android:onClick="meuBotaoClick" android:text="@string/adicionar"/> </LinearLayout>
<ListView android:id="@+id/listView" android:layout_height="match_parent" android:layout_width="0dp" android:layout_weight="2"/>
</LinearLayout>
<LinearLayout 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="@dimen/activity_horizontal_margin" android:paddingRight="@dimen/activity_horizontal_margin" android:paddingTop="@dimen/activity_vertical_margin" android:paddingBottom="@dimen/activity_vertical_margin" android:orientation="horizontal">
<LinearLayout android:layout_width="0dp" android:layout_height="match_parent" android:layout_weight="1" android:orientation="vertical">
<TextView android:text="@string/digite" android:layout_width="wrap_content" android:layout_height="wrap_content" />
<EditText android:id="@+id/editText1" android:layout_width="match_parent" android:layout_height="wrap_content" />
<Button android:layout_width="wrap_content" android:layout_height="wrap_content" android:onClick="meuBotaoClick" android:text="@string/adicionar"/> </LinearLayout>
<ListView android:id="@+id/listView" android:layout_height="match_parent" android:layout_width="0dp" android:layout_weight="2"/>
</LinearLayout>
public class MainActivity extends AppCompatActivity {…@Overridepublic void onSaveInstanceState(Bundle outState) { super.onSaveInstanceState(outState); outState.putStringArrayList(Contantes.NOMES, nomes);}
}
public class MainActivity extends AppCompatActivity {
@Overrideprotected void onCreate(Bundle savedInstanceState) {
...
nomes = new ArrayList<String>();
...
}
public class MainActivity extends AppCompatActivity {
@Overrideprotected void onCreate(Bundle savedInstanceState) {
...
if(savedInstanceState != null){ nomes = savedInstanceState.getStringArrayList(Contantes.NOMES);}else{ nomes = new ArrayList<String>();}
...
}
Passando objetos entre Intents
Parcelable x Serializable
Parcelable x Serializable
public class Cliente implements Parcelable {
private String telefone; private String nome;
public Cliente( String nome, String telefone){ this.nome = nome; this.telefone = telefone; }
public class Cliente implements Parcelable {
private String telefone; private String nome;
public Cliente( String nome, String telefone){ this.nome = nome; this.telefone = telefone; }
public class Cliente implements Parcelable {
private String telefone; private String nome;
public Cliente( String nome, String telefone){ this.nome = nome; this.telefone = telefone; }
public class Cliente implements Parcelable {
private String telefone; private String nome;
public Cliente( String nome, String telefone){ this.nome = nome; this.telefone = telefone; }
public class Cliente implements Parcelable {
...@Overridepublic int describeContents() { return 0;}
@Overridepublic void writeToParcel(Parcel dest, int flags) { dest.writeString(nome); dest.writeString(telefone);}
public class Cliente implements Parcelable {
...@Overridepublic int describeContents() { return 0;}
@Overridepublic void writeToParcel(Parcel dest, int flags) { dest.writeString(nome); dest.writeString(telefone);}
public class Cliente implements Parcelable {
...public static final Creator<Cliente> CREATOR = new Creator<Cliente>() { @Override public Cliente createFromParcel(Parcel in) { return new Cliente(in); }
@Override public Cliente[] newArray(int size) { return new Cliente[size]; }};
}
public class MainActivity extends AppCompatActivity implements iew.OnClickListener{
private TextView editTextNome; private TextView editTextFone;
@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main);
editTextNome = (TextView) findViewById(R.id.editTextNome); editTextFone = (TextView) findViewById(R.id.editTextFone);
Button btEnviar = (Button) findViewById(R.id.btEnviar); btEnviar.setOnClickListener(this); }
public class MainActivity extends AppCompatActivity implements iew.OnClickListener{
private TextView editTextNome; private TextView editTextFone;
@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main);
editTextNome = (TextView) findViewById(R.id.editTextNome); editTextFone = (TextView) findViewById(R.id.editTextFone);
Button btEnviar = (Button) findViewById(R.id.btEnviar); btEnviar.setOnClickListener(this); }
public class MainActivity extends AppCompatActivity implements iew.OnClickListener{
private TextView editTextNome; private TextView editTextFone;
@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main);
editTextNome = (TextView) findViewById(R.id.editTextNome); editTextFone = (TextView) findViewById(R.id.editTextFone);
Button btEnviar = (Button) findViewById(R.id.btEnviar); btEnviar.setOnClickListener(this); }
public class MainActivity extends AppCompatActivity implements iew.OnClickListener{
private TextView editTextNome; private TextView editTextFone;
@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main);
editTextNome = (TextView) findViewById(R.id.editTextNome); editTextFone = (TextView) findViewById(R.id.editTextFone);
Button btEnviar = (Button) findViewById(R.id.btEnviar); btEnviar.setOnClickListener(this); }
public class MainActivity extends AppCompatActivity implements iew.OnClickListener{
private TextView editTextNome; private TextView editTextFone;
...@Overridepublic void onClick(View v) { switch (v.getId()){ case R.id.btEnviar: Cliente cliente = new Cliente(
editTextNome.getText().toString(), editTextFone.getText().toString());
Intent irParaTela2 = new Intent(this, Tela2Activity.class); irParaTela2.putExtra(Contantes.CLIENTE, cliente); startActivity(irParaTela2); break; }}
}
public class MainActivity extends AppCompatActivity implements iew.OnClickListener{
private TextView editTextNome; private TextView editTextFone;
...@Overridepublic void onClick(View v) { switch (v.getId()){ case R.id.btEnviar: Cliente cliente = new Cliente(
editTextNome.getText().toString(), editTextFone.getText().toString());
Intent irParaTela2 = new Intent(this, Tela2Activity.class); irParaTela2.putExtra(Contantes.CLIENTE, cliente); startActivity(irParaTela2); break; }}
}
public class MainActivity extends AppCompatActivity implements iew.OnClickListener{
private TextView editTextNome; private TextView editTextFone;
...@Overridepublic void onClick(View v) { switch (v.getId()){ case R.id.btEnviar: Cliente cliente = new Cliente(
editTextNome.getText().toString(), editTextFone.getText().toString());
Intent irParaTela2 = new Intent(this, Tela2Activity.class); irParaTela2.putExtra(Contantes.CLIENTE, cliente); startActivity(irParaTela2); break; }}
}
public class MainActivity extends AppCompatActivity implements iew.OnClickListener{
private TextView editTextNome; private TextView editTextFone;
...@Overridepublic void onClick(View v) { switch (v.getId()){ case R.id.btEnviar: Cliente cliente = new Cliente(
editTextNome.getText().toString(), editTextFone.getText().toString());
Intent irParaTela2 = new Intent(this, Tela2Activity.class); irParaTela2.putExtra(Contantes.CLIENTE, cliente); startActivity(irParaTela2); break; }}
}
public class Tela2Activity extends AppCompatActivity {
@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_tela2); TextView txtText = (TextView) findViewById(R.id.txtTexto);
Intent intent = getIntent(); Cliente cliente = intent.getParcelableExtra(Contantes.CLIENTE); if(cliente != null){ String texto =
String.format("Nome: %s / Telefone: %s", cliente.getNome(), cliente.getTelefone());
txtText.setText(texto);
public class Tela2Activity extends AppCompatActivity {
@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_tela2); TextView txtText = (TextView) findViewById(R.id.txtTexto);
Intent intent = getIntent(); Cliente cliente = intent.getParcelableExtra(Contantes.CLIENTE); if(cliente != null){ String texto =
String.format("Nome: %s / Telefone: %s", cliente.getNome(), cliente.getTelefone());
txtText.setText(texto);
public class Tela2Activity extends AppCompatActivity {
@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_tela2); TextView txtText = (TextView) findViewById(R.id.txtTexto);
Intent intent = getIntent(); Cliente cliente = intent.getParcelableExtra(Contantes.CLIENTE); if(cliente != null){ String texto =
String.format("Nome: %s / Telefone: %s", cliente.getNome(), cliente.getTelefone());
txtText.setText(texto);
Verificação de permisões no Android Marshmallow
public class MainActivity extends ListActivity{
@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState);
listaDeContatos = obtemListaDeContatos();
ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, listaDeContatos);
setListAdapter(adapter); }
}
public class MainActivity extends ListActivity{...
@Overridepublic void onRequestPermissionsResult(int requestCode, String[] permissions,
int[] grantResults) {
super.onRequestPermissionsResult(requestCode, permissions, grantResults); if (grantResults[0] == PackageManager.PERMISSION_GRANTED) { discar(); }}
}
public class MainActivity extends ListActivity{...
@Overridepublic void onRequestPermissionsResult(int requestCode, String[] permissions,
int[] grantResults) {
super.onRequestPermissionsResult(requestCode, permissions, grantResults); if (grantResults[0] == PackageManager.PERMISSION_GRANTED) { discar(); }}
}
public class MainActivity extends ListActivity{...
@Overrideprotected void onListItemClick(ListView l, View v, int position, long id) { switch (position){ case 1: if (ActivityCompat.checkSelfPermission(this, Manifest.permission.CALL_PHONE) != PackageManager.PERMISSION_GRANTED) {
ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.CALL_PHONE}, 0); } else { discar(); } }}
}
public class MainActivity extends ListActivity{...
@Overrideprotected void onListItemClick(ListView l, View v, int position, long id) { switch (position){ case 1: if (ActivityCompat.checkSelfPermission(this, Manifest.permission.CALL_PHONE) != PackageManager.PERMISSION_GRANTED) {
ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.CALL_PHONE}, 0); } else { discar(); } }}
}
public class MainActivity extends ListActivity{...
@Overrideprotected void onListItemClick(ListView l, View v, int position, long id) { switch (position){ case 1: if (ActivityCompat.checkSelfPermission(this, Manifest.permission.CALL_PHONE) != PackageManager.PERMISSION_GRANTED) {
ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.CALL_PHONE}, 0); } else { discar(); } }}
}
public class MainActivity extends ListActivity{...
private void discar() { Uri uri = Uri.parse("tel:" + "88121128"); Intent intent = new Intent(Intent.ACTION_CALL, uri);
if (intent.resolveActivity(getPackageManager()) != null) { startActivity(intent); }}
}
Otimizando seu Android Studio
http://tools.android.com/tech-docs/configuration
studio.vmoptions
studio.vmoptions
idea.properties
daniel.baccin@gmail.comhttps://github.com/danielbaccin
top related