This library has 6 modules to aid Android development, speeding up the completion of the application
- Componentes
- Manipulador de texto
- CustomDialog
- GeometricProgress
- DotLoader
- ProgressIndeterminate
- SwipeLayout
- Leitor Qr and CodeBar
- ShortCut
- Permisions
- Util
- CamPix
- PhotoView
- Zoom Frame
- Hawk
- CalculatorDialog
- KeyBoardDialog
- HttpAgent
- SOAPManager
- SignaturePad
- UnCaughtException
Add Maven Central to the project's build.gradle :
allprojects {
repositories {
...
maven { url 'https://jitpack.io' }
maven { url 'https://oss.sonatype.org/content/repositories/ksoap2-android-releases' }
}
}
Add the following dependency into your module's build.gradle:
defaultConfig {
multiDexEnabled true
}
dependencies {
implementation 'com.github.Concyline:Androidui:TAG'
}
You can add below lines into your gradle.properties file:
android.useAndroidX=true
android.enableJetifier=true
<siac.com.componentes.EditTextTitle
android:id="@+id/editTextTitle"
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:colorTitle="@color/colorAccent"
app:requerido="false"
app:enabled="true"
app:focusable="true"
app:requestfocus="true"
app:tag="edittext"
app:text="texto"
app:title="Componente simples" />
<!-- Is free to create any mask just edit the app:mascara="" -->
<siac.com.componentes.EditTextTitle
android:id="@+id/editTextTitle"
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:title="Mascara"
app:mascara=" . . / - "
app:enabled="true"
app:focusable="true"
app:requestfocus="false"
app:tag="edittext"
app:text="texto"
app:requerido="true"
app:titleRequerido="Digite um CNPJ válido!"/>
<siac.com.componentes.EditTextTitle
android:id="@+id/editTextTitle"
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:title="Enail"
app:enabled="true"
app:focusable="true"
app:requestfocus="false"
app:tag="edittext"
app:text="texto"
app:requerido="true"
app:titleRequerido="Digite um email válido!"/>
<!-- the calendar listener is already implemented within the component -->
<siac.com.componentes.EditTextCalendar
android:id="@+id/editTextTitle"
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:title="Só data" />
<siac.com.componentes.SpinnerTitle
android:id="@+id/spinnerTitle"
android:layout_width="0dp"
android:layout_height="wrap_content"
app:entries="@array/tipo"
app:title="Spinner" />
or add programaticaly adapter
ArrayAdapter<Object> adapter = new ArrayAdapter<Object>(getBaseContext(),
siac.com.componentes.R.layout.view_spinner_item_ui, new String[]{"aureo", "ana", "davi"});
spinnerTitle.setAdapter(adapter);
<siac.com.componentes.EditTextCalendar
android:id="@+id/editTextCalendar"
android:layout_width="0dp"
android:layout_height="wrap_content"
app:hora="true"
app:inicializa="false"
app:title="EditTextCalendar" />
<siac.com.componentes.EditTextTitle
android:id="@+id/cadastroEditTextTitle"
android:layout_width="0dp"
android:layout_height="wrap_content"
app:coricon="#D6C"
app:iconRigth="@drawable/icons_coroa_48"
app:inputType="number"
app:title="Nome do cliente"
app:tamTitle="@dimen/tamLegendaEditTextUi" />
<siac.com.componentes.TextViewTitle
android:id="@+id/textViewTitle"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginTop="9dp"
app:corDescricao="@color/colorPrimaryDark"
app:colorTitle="@color/colorAccent"
app:tamTitle="13sp"
app:layout_constraintWidth_percent="0.2"
app:tamDescricao="16sp"
app:singleLine="false"
app:descricao="Goiânia adsdasdadsdasdsdasdsadsadsadasdsadadsdaszdsadasdsadasdasda"
app:title="Cidade" />
textViewTitle.setFont("fonts/Lobster-Regular.ttf");
<siac.com.componentes.EditTextSearch
android:id="@+id/editTextSearch"
android:layout_width="0dp"
android:layout_height="wrap_content"
app:hint="sua pesquisa"
app:inputType="none"
app:coricon="@color/colorAccent"
app:title="EditTextSearch" />
editTextSearch.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
...
}
});
// Custom inputType programmatically
searchLegenda.setInputTypeSearch(Constantes.textPassword);
<siac.com.componentes.EditTextTitle
android:id="@+id/multilineEditTextTitle"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="8dp"
app:coricon="@color/colorAccent"
app:inputType="textMultiLine"
app:text="Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the 1500s"
app:title="Multiline"
app:lines="4"
app:tamTitle="@dimen/tamLegendaEditTextUi" />
<siac.com.componentes.EditTextTitle
android:id="@+id/senhaEditTextTitle"
android:layout_width="0dp"
android:layout_height="wrap_content"
app:coricon="@color/colorAccent"
app:iconRigth="@drawable/round_visibility_black_48dp"
app:inputType="textPassword"
app:title="Senha"
app:tamTitle="@dimen/tamLegendaEditTextUi" />
final EditTextTitle senhaEditTextTitle = findViewById(R.id.senhaEditTextTitle);
senhaEditTextTitle.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
senhaEditTextTitle.mostraSenha();
}
});
<siac.com.componentes.EditTexCurrency
android:id="@+id/editTexCurrency"
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:enabled="true"
app:focusable="true"
app:title="Valor"
app:requerido="false"
app:requestfocus="false"
app:locale="pt_BR"
app:showSymbol="true"
app:tag="Valor"
app:text="" />
<siac.com.componentes.RecyclerViewParallax
android:id="@+id/rv"
android:layout_width="match_parent"
android:layout_height="match_parent"/>
XML file
<siac.com.componentes.RecyclerViewButton
android:id="@+id/recyclerViewButton"
android:layout_width="match_parent"
android:layout_height="match_parent"
app:horizontalDivider="true"
app:locationButton="right"
app:numberOfColumns="2"
app:basic="false"
app:refresh="true"
app:verticalDivider="true" />
Set Listener
recyclerViewButton.setOnRefreshListener(new SwipeRefreshLayout.OnRefreshListener() {
@Override
public void onRefresh() {
new Async().execute();
}
});
recyclerViewButton.addOnItemTouchListener(new RecyclerViewButton.ItemClickListener(new RecyclerViewButton.Listener() {
@Override
public void onItemClick(View view, int position) {
System.out.println("aqui");
}
@Override
public void onLongItemClick(View view, int position) {
System.out.println("aqui");
}
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
System.out.println("aqui");
}
}));
AsyncTask
public class Async extends AsyncTask<Void, Void, List<Cidade>> {
@Override
protected List<Cidade> doInBackground(Void... voids) {
List<Cidade> list = helper.CidadeController().getAll();
return list;
}
@Override
protected void onPostExecute(List<Cidade> cidade) {
super.onPostExecute(cidade);
if (adapter == null) {
adapter = new Adapter(cidade);
recyclerViewButton.setAdapter(this, adapter);
} else {
adapter.notifyDataSetChanged();
}
recyclerViewButton.scrollToPosition(0);
recyclerViewButton.setRefreshing(false);
}
}
Adapter
public class Adapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> {
private LayoutInflater mInflater;
private List<Cidade> lCidade;
Adapter(List<Cidade> lCidade) {
this.mInflater = LayoutInflater.from(getBaseContext());
this.lCidade = lCidade;
}
@Override
@NonNull
public RecyclerView.ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
View view = mInflater.inflate(R.layout.cidade_item, parent, false);
return new ViewHolder(view);
}
@Override
public void onBindViewHolder(@NonNull RecyclerView.ViewHolder holder, int position) {
final ViewHolder viewHolder = (ViewHolder) holder;
Cidade cidade = lCidade.get(position);
viewHolder.nomeTextView.setText(cidade.getNome());
viewHolder.ufTextView.setText(cidade.getUf());
}
@Override
public int getItemCount() {
return lCidade.size();
}
public class ViewHolder extends RecyclerView.ViewHolder {
TextView nomeTextView;
TextView ufTextView;
ViewHolder(View itemView) {
super(itemView);
nomeTextView = itemView.findViewById(R.id.nomeTextView);
ufTextView = itemView.findViewById(R.id.ufTextView);
}
}
Cidade getItem(int id) {
return lCidade.get(id);
}
}
<siac.com.componentes.ProgressImageView
android:id="@+id/progressImageView"
android:layout_width="50dp"
android:layout_height="50dp"
app:progressSize="150dp"
app:src="@drawable/lupa"
app:progressColor="#2DB200" />
final ProgressImageView progressImageView = findViewById(R.id.progressImageView);
progressImageView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
progressImageView.setProgres();
new Handler().postDelayed(new Runnable() {
@Override
public void run() {
progressImageView.removeProgres();
}
}, 2000);
}
});
<siac.com.componentes.ProgressButton
android:id="@+id/progressButton"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
app:progressColor="#2DB200"
app:progressSize="100dp"
app:text="Ok Big Guy" />
final ProgressButton progressButtonOk = findViewById(R.id.progressButtonOk);
progressButtonOk.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
progressButtonOk.setProgres();
Handler handler = new Handler();
handler.postDelayed(new Runnable() {
@Override
public void run() {
progressButtonOk.removeProgres();
}
}, 2000);
}
});
<siac.com.componentes.HelpButton
android:id="@+id/helpButton"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
app:color="@color/colorError"
app:helpMsg="Lorem Ipsum is simply dummy text of the printing and typesetting industry."/>
HelpButton helpButton = findViewById(R.id.helpButton);
helpButton.setActivity(this);
// In XML file or programmatically
helpButton.setHelpMsg("Lorem Ipsum is simply dummy text of the printing and typesetting industry.");
<siac.com.componentes.RoundishImageView
android:id="@+id/roundishImageView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="8dp"
android:src="@drawable/cidade"
app:cornerRadius="10dp"
app:roundedCorners="topLeft|bottomRight" />
<siac.com.componentes.RoundImageView
android:id="@+id/roundImageView"
android:layout_width="150dp"
android:layout_height="150dp"
android:src="@drawable/cidade"
app:borderColor="@color/colorAccent"
app:borderWidth="5dp" />
new CDialog(ComponentesDoisActivity.this)
.createAlert("WARNING! custon mensagem",
WindowFormat.BACKGROUND_RECTANGLE,
getBitmapFromAsset(),
TypeDialog.WARNING,
SizeDialog.XLARGE)
.setAnimation(AnimateDialog.SCALE_FROM_BOTTOM_TO_TOP)
.setDuration(3000) // in milliseconds
.setTextSize(SizeText.XLARGE)
.setPosition(PositionDialog.POSITION_CENTER)
.setBackDimness(0.9f) // less Than One
.setBackgroundColor(R.color.pink)
.show();
Or Listener, when you finish the task
new CDialog(ParametrosActivity.this)
.createAlertSneckBar("Salvo com sucesso!",
TypeDialog.INFO,
SizeDialog.MEDIUM)
.setDuration(2000)
.show(new CDialog.CDialogListener() {
@Override
public void onDismiss() {
...
}
});
Get Image resources
public Bitmap getBitmapFromAsset() {
InputStream imageStream = getResources().openRawResource(R.raw.lamp);
Bitmap bitmap = BitmapFactory.decodeStream(imageStream);
return bitmap;
}
public Drawable getDrawable() {
Drawable myDrawable = getResources().getDrawable(R.drawable.checked_1);
return myDrawable;
}
new CDialog(ComponentesDoisActivity.this)
.createAlertSneckBar("Info SnackBar",
TypeDialog.INFO,
SizeDialog.MEDIUM)
.show();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_manipula_texto);
//anywhere in the system
StorageSD
.init(this)
.setFolderAndFileName("Manipula","Log.txt")
.setLog(new Log() {
@Override
public void onLog(String message) {
//
}
})
.build();
// METHODS
//StorageSD.info("");
//StorageSD.erro("");
//StorageSD.processaException("class", Exception error);
//StorageSD.delete()
//String all = StorageSD.getAll();
}
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="siac.com.androidui">
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<application
android:allowBackup="true"
android:icon="@mipmap/icon_teste"
android:label="@string/app_name"
android:roundIcon="@mipmap/icon_teste"
android:supportsRtl="true"
android:requestLegacyExternalStorage="true" <!--VERY IMPORTANT API > 26-->
android:theme="@style/AppTheme">
<activity android:name=".ManipulaTextoActivity"></activity>
<activity android:name=".MainActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
</manifest>
in res/layout/cadastro.xml
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:padding="10dp"
android:background="#FFF">
...
<Button
android:id="@+id/button"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="OK"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintTop_toBottomOf="@+id/editTextTextPersonName2" />
</androidx.constraintlayout.widget.ConstraintLayout>
in res/menu/menu_bar.xml
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto">
<item
android:id="@+id/miCompose"
android:icon="@drawable/round_alarm_white_48dp"
app:showAsAction="ifRoom"
android:title="Compose">
</item>
<item
android:id="@+id/miProfile"
android:icon="@drawable/round_backup_white_48dp"
app:showAsAction="ifRoom|withText"
android:title="Profile">
</item>
</menu>
in onCreate
try {
CustomDialog customDialog = new CustomDialog(MainActivity.this);
customDialog.setContentView(R.layout.cadastro)
.setToolbarTitle("Log IN")
.setToolbarSubTitle("Enter the system")
.setMenuToolbar(R.menu.menu_bar)
.setBackgroundResource(CustomDialog.DWindow.ROUND)
.setHeight(CustomDialog.DLayoutParams.WRAP_CONTENT)
.setCancelable(true)
.create();
customDialog.menu(R.id.miCompose).setOnMenuItemClickListener(new MenuItem.OnMenuItemClickListener() {
@Override
public boolean onMenuItemClick(MenuItem item) {
System.out.println("MENU");
return false;
}
});
Dialog dialog = customDialog.dialog();
Button button = dialog.findViewById(R.id.button);
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
System.out.println("BUTTON");
}
});
customDialog.show();
} catch (Exception e) {
e.printStackTrace();
}
<siac.com.componentes.GeometricProgressView
android:id="@+id/progressView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
app:gp_type="triangle"
app:gp_number_of_angles="7"
app:gp_color="@android:color/black"
app:gp_duration="800"
app:gp_figure_padding="3dp" />
GeometricProgressView progressView = (GeometricProgressView) findViewById(R.id.progressView);
progressView.setType(TYPE.KITE);
progressView.setNumberOfAngles(6);
progressView.setColor(Color.parseColor("#00897b"));
progressView.setDuration(1000);
progressView.setFigurePadding(getResources().getDimensionPixelOffset(R.dimen.figure_padding));
<siac.com.componentes.DotLoader
android:id="@+id/text_dot_loader"
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:color_array="@array/dot_colors"
app:dot_radius="4dp"
app:number_of_dots="3"/>
color.xml
<array name="dot_colors">
<item>#03A9F4</item>
<item>#E65100</item>
<item>#FFBB00</item>
</array>
dotLoader.postDelayed(new Runnable() {
@Override
public void run() {
dotLoader.setNumberOfDots(5);
}
}, 3000);
ProgressIndeterminate progressDialog = new ProgressIndeterminate(ComponentesDoisActivity.this).
create("Atenção!")
.multColor(true)
.setTextSize(SizeText.MEDIUM)
.cancelable(false);
progressDialog.show();
//progressDialog.dismiss();
//progressDialog.isShowing();
//progressDialog.setMessage("Text");
//progressDialog.setBackgroundColor(R.color.pink);
// or
ProgressIndeterminate progressDialog = ProgressIndeterminate.show(ComponentesDoisActivity.this, "OK");
<siac.com.componentes.SwipeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:id="@+id/swipe_layout"
android:layout_width="match_parent"
android:layout_height="90dp"
android:layout_marginTop="3dp"
app:draggedItem="@id/drag_item"
app:swipeDirection="left|right"
app:leftItem="@id/left_view"
app:rightItem="@id/right_view">
<ImageView
android:id="@+id/left_view"
android:layout_width="90dp"
android:layout_height="match_parent"
android:layout_gravity="start"
android:background="#ff5722"
android:gravity="center"
android:paddingEnd="24dp"
android:paddingStart="24dp"
android:src="@drawable/ic_upload"/>
<ImageView
android:id="@+id/right_view"
android:layout_width="90dp"
android:layout_height="match_parent"
android:layout_gravity="end"
android:background="#ff5722"
android:gravity="center"
android:paddingEnd="24dp"
android:paddingStart="24dp"
android:src="@drawable/ic_delete"/>
<TextView
android:id="@+id/drag_item"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="#eeeeee"
android:clickable="true"
android:focusable="true"
android:foreground="?selectableItemBackgroundBorderless"
android:gravity="center_vertical"
android:orientation="vertical"
android:paddingEnd="10dp"
android:paddingStart="20dp"
android:textSize="20sp"/>
</siac.com.componentes.SwipeLayout>
In Holder
leftView = itemView.findViewById(R.id.left_view);
rightView = itemView.findViewById(R.id.right_view);
rightView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (getAdapterPosition() != NO_POSITION) {
remove(itemView.getContext(), getAdapterPosition());
}
}
});
leftView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (getAdapterPosition() != NO_POSITION) {
upload(itemView.getContext(), getAdapterPosition());
}
}
});
all components have the following methods boolean validaPreenchido()
, boolean validaCpfCnpj()
, void setError()
, void removeError()
, void mostraSenha()
, String getString()
, String getStringUperCase()
, Integer getInteger()
, Double getDouble()
update color icon error
<color name="colorAccent">#F79D91</color>
public listeners
public void setOnClickListener(OnClickListener onClickListener) {
editText.setOnClickListener(onClickListener);
}
public void setOnClickListenerIconLeft(OnClickListener onClickListener) {
iconLeftImageView.setOnClickListener(onClickListener);
}
public void setOnClickListenerIconRigth(OnClickListener onClickListener) {
iconRigthImageView.setOnClickListener(onClickListener);
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_manipula_texto);
retornoEditText = findViewById(R.id.retornoEditText);
Button lerQrTesteButton = findViewById(R.id.lerQrTesteButton);
lerQrTesteButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent(getBaseContext(), LeitorActivity.class);
String codigo = "C=7898958119652;L=50962;V=30/09/2019";
intent.putExtra(LeitorActivity.CODE_TEST,codigo);
startActivityForResult(intent, 123);
}
});
Button lerQrButton = findViewById(R.id.lerQrButton);
lerQrButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent(getBaseContext(), LeitorActivity.class);
startActivityForResult(intent, 123);
}
});
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if(requestCode == 123) {
retornoEditText.setText("");
if (data != null) {
retornoEditText.setText(data.getStringExtra("CODIGO"));
}
}
}
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="siac.com.androidui">
<uses-permission android:name="android.permission.CAMERA" />
<application
android:allowBackup="true"
android:icon="@mipmap/icon_teste"
android:label="@string/app_name"
android:roundIcon="@mipmap/icon_teste"
android:supportsRtl="true"
android:theme="@style/AppTheme">
<activity android:name=".ManipulaTextoActivity"></activity>
<activity android:name=".MainActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity android:name="siac.com.leitor.LeitorActivity" />
</application>
</manifest>
ShortcutUtils shortcutUtils;
Shortcut dynamicShortcut;
shortcutUtils = new ShortcutUtils(this);
dynamicShortcut = new Shortcut.ShortcutBuilder()
.setShortcutIcon(R.drawable.round_device_hub_white_48dp)
.setShortcutId("dynamicShortcutId")
.setShortcutLongLabel("ALL Devices")
.setShortcutShortLabel("ALL Devices")
.setIntentAction("dynamicShortcutIntentAction")
.setIntentStringExtraKey("dynamicShortcutKey")
.setIntentStringExtraValue("all")
.build();
shortcutUtils.addDynamicShortCut(dynamicShortcut, new IReceiveStringExtra() {
@Override
public void onReceiveStringExtra(String stringExtraKey, String stringExtraValue) {
String intent = getIntent().getStringExtra(stringExtraKey);
if (intent != null) {
if (intent.equals("all")) {
System.out.println("OKOKOKOKOKOKO");
}
}
}
});
shortcutUtils.removeDynamicShortCut(dynamicShortcut);
in AndroidManifest.xml
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
in Activity
String[] permissions = {Manifest.permission.READ_EXTERNAL_STORAGE,
Manifest.permission.WRITE_EXTERNAL_STORAGE};
Permissions.check(MainActivity.this, permissions, null, null, new PermissionHandler() {
@Override
public void onGranted() {
...
}
@Override
public void onDenied(Context context, ArrayList<String> deniedPermissions) {
...
}
});
// In Activity
import siac.com.util.Util;
// Usage in class
Util.setBar(UtilActivity.this, "Title", "Subtitle");
Util.abaixaTeclado(getBaseContext(), view);
Util.fadeIn(getBaseContext(), view);
Util.toastLong(getBaseContext(),"Long mesage Toasta");
Util.toastShort(getBaseContext(),"Short mesage Toasta");
Util.alertOk(UtilActivity.this, "Atention mesage");
Util.alertOk(UtilActivity.this, "mesage", new OnListnerOk() {
@Override
public void ok() {
...
}
});
Util.alertSimCancelar(UtilActivity.this, "mesage", new OnListnerAlertSimCancelar() {
@Override
public void sim() {
...
}
@Override
public void cancelar() {
...
}
});
BackgroundTask.with(this) // Activity|FragmentActivity(v4)|Fragment|Fragment(v4)
.assign(new BackgroundTask.TaskDescription() {
@Override
public Object onBackground() {
// Do what you want to do on background thread.
// If you want to post something to MainThread,
// just call BackgroundTask.post(YOUR_MESSAGE).
// Return your finally result(Nullable).
return null;
}
})
.preExecute(new BackgroundTask.PreExecuteListener() {
@Override
public void onPreExecute() {
// Run task before starting
}
})
.handle(new BackgroundTask.MessageListener() {
@Override
public void handleMessage(@NonNull Message message) {
// Receive message in MainThread which sent from WorkerThread,
// update your UI just in time.
}
})
.finish(new BackgroundTask.FinishListener() {
@Override
public void onFinish(@Nullable Object result) {
// If WorkerThread finish without Exception and lifecycle safety,
// deal with your WorkerThread result at here.
}
})
.broken(new BackgroundTask.BrokenListener() {
@Override
public void onBroken(@NonNull Exception e) {
// If WorkerThread finish with Exception and lifecycle safety,
// deal with Exception at here.
}
})
.execute();
Notice:
MUST: .with(), .assign(), .execute().
OPTION: .handle(), .finish(), broken(). Every method just call once, otherwise the newer with replace the older.
Use: BackgroundTask.post() To send message from WorkerThread to MainThread just in time.
TextView tv_hello = (TextView) findViewById(R.id.tv_hello);
tv_hello.setTypeface(EasyFonts.robotoThin(this));
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com">
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
</manifest>
findViewById(R.id.button23).setOnClickListener(v -> {
EditText editText = findViewById(R.id.editTextTextMultiLine2);
GeoLocationModel geoLocationModel = new EasyLocationFetch(this).getLocationData();
if(geoLocationModel == null){
editText.setText("The system was unable to retrieve the location!");
return;
}
StringBuilder builder = new StringBuilder();
builder.append("Address: "+geoLocationModel.getAddress() +"\r\n");
builder.append("City: "+geoLocationModel.getCity() +"\r\n");
builder.append("Lattitude: "+geoLocationModel.getLattitude() +"\r\n");
builder.append("Longitude: "+geoLocationModel.getLongitude() +"\r\n");
editText.setText(builder.toString());
});
ActionBarCuston actionBarCuston = new ActionBarCuston(this);
actionBarCuston.setBarColor(R.color.colorPrimary);
actionBarCuston.setTitleColor("#E60000");
actionBarCuston.setSubTitleColor("#E60000");
actionBarCuston.setBar("Teste", "Subtitle");
AndroidManifest.xml
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="...">
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.CAMERA" />
<uses-permission android:name="android.permission.VIBRATE" />
<application>
...
<activity android:name="br.com.campix.Pix"/>
</application>
</manifest>
findViewById(R.id.cliclButton).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
options = Options.init()
.setRequestCode(requestCodePicker)
.setFrontfacing(false)
.setPath("pix/photo");
//.setFileName("teste");
Pix.start(CamPixActivity.this, options);
}
});
@Override
protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (requestCode == requestCodePicker) {
if (resultCode == Activity.RESULT_OK) {
String path = data.getStringExtra(Pix.IMAGE_PATH);
File file = (File) data.getExtras().get(Pix.IMAGE_FILE);
glide = Glide.with(CamPixActivity.this);
glide.load(path).into(imageView);
}
}
}
@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
if (requestCode == PermUtil.REQUEST_CODE_ASK_MULTIPLE_PERMISSIONS) {
if (grantResults.length != 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
Pix.start(this, options);
} else {
Toast.makeText(this, "Approve permissions to open Pix ImagePicker", Toast.LENGTH_LONG).show();
}
}
}
<br.com.campix.photoView.PhotoView
android:id="@+id/imagemImageView"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:scaleType="fitXY"
app:srcCompat="@drawable/button" />
PhotoView photoView = (PhotoView) findViewById(R.id.photo_view);
photoView.setImageResource(R.drawable.image);
<siac.com.componentes.ZoomFrameImageView
android:id="@+id/fragmentloginKenBurnsView1"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:src="@drawable/image_3" />
Initialize
Hawk.init(context).build();
Usage
Save any type (Any object, primitives, lists, sets, maps ...)
Hawk.put(key, T);
Get the original value with the original type
T value = Hawk.get(key);
Delete any entry
Hawk.delete(key);
Check if any key exists
Hawk.contains(key);
Check total entry count
Hawk.count();
Get crazy and delete everything
Hawk.deleteAll();
new CalculatorDialog(this) {
@Override
public void onResult(Double result) {
editText.setText(result + "");
}
}.setValue(Double.parseDouble(editText.getText().toString().trim())).showDIalog();
KeyBoardDialog customDialog = new KeyBoardDialog(ComponentesDoisActivity.this);
customDialog.setBackgroundResource(KeyBoardDialog.DWindow.ROUND)
.setCancelable(true)
.setJustNumber(false)
.setBackgroundColor(R.color.background)
.create();
customDialog.show(editTextNumber.getText().toString(), new KeyBoardDialog.OnDismissListener() {
@Override
public void dismiss(String value) {
editTextNumber.setText(value);
}
});
String content = gson.toJson(new LoginBody("12247272000170", "API", "123456"));
new HttpAgent(MainActivity.this, "https://viacep.com.br/ws/01001000/json/", HTTP.GET)
//new HttpAgent(MainActivity.this,"http://10.0.2.2:8080/SiacAPI/Login", HTTP.POST)
//new HttpAgent(MainActivity.this,"http://10.0.2.2:8080/SiacAPI/Minutas", HTTP.GET)
//.headers("Authorization", "Bearer " + token, "Content-Type", "application/json")
.headers("Content-Type", "application/json")
//.setTokenBearer(token)
//.queryParams("key_1","value_1","key_2","value_2","key_N","value_N")
//.withBody("{name:popapp ,age:27}")
//.withBody(content)
.goString(new StringCallback() {
@Override
protected void onDone(boolean success, String stringResults) {
if (success) {
System.out.println(stringResults);
} else {
System.out.println(getErrorMessage());
}
}
});
//Get no results, Just send the request
go(new SuccessCallback() {
@Override
protected void onDone(boolean success) {
getErrorMessage(); //returns error message if exists.
getResponseCode(); // well, it's obvious...
getStringResults(); // returns results as as string.
}
})
//Get a string results
goString(new StringCallback() {
@Override
protected void onDone(boolean success, String results) {
getErrorMessage(); //returns error message if exists.
getResponseCode(); // well, it's obvious...
getStringResults(); // returns results as as string.
}
})
//Get Json results
goJson(new JsonCallback() {
@Override
protected void onDone(boolean success, JSONObject jsonObject) {
getErrorMessage(); //returns error message if exists.
getResponseCode(); // well, it's obvious...
getStringResults(); // returns results as as string.
}
})
//Get JsonArray results
goJsonArray(new JsonArrayCallback() {
@Override
protected void onDone(boolean success, JSONArray jsonArray) {
getErrorMessage(); //returns error message if exists.
getResponseCode(); // well, it's obvious...
getStringResults(); // returns results as as string.
}
});
SOAP has been losing ground to REST services in mobile the last years, thus losing attention. But SOAP isn't gone and many still use it. The thing is that it usually requires a lot of work from the dev to create and parse all the messages.
JSoap is an Android library which allows automatic handling of SOAP requests and resposes, making the process effortless to the user. It works on top of the well-known library KSOAP2.
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="br.com.androidui">
<application
...
android:usesCleartextTraffic="true">
</application>
</manifest>
@JSoapClass(namespace = "http://tempuri.org/")
public class Cidade {
@JSoapResField(name = "CidadeId")
public int CidadeId;
@JSoapResField(name = "EstadoId")
public String EstadoId;
@JSoapResField(name = "Nome")
public String Nome;
//very important
public Cidade() {
}
}
@JSoapClass(namespace = "http://tempuri.org/")
public class Parametros {
@JSoapReqField(order = 0, fieldName = "DataHora")
private String DataHora;
public Parametros(String DataHora) {
this.DataHora = DataHora;
}
}
@JSoapClass(namespace = "http://tempuri.org/")
public class Response {
@JSoapResField(name = "GetCidadesResult")
public Cidade[] result;
}
private void get() {
String url = "http://10.0.2.2:2193/Integracao.asmx";
String namespace = "http://tempuri.org/";
String method = "GetCidades";
String soap_action = "http://tempuri.org/GetCidades";
SOAPManager.get(namespace, url, method, soap_action, new Parametros("01/01/1000"), Response.class, new JSoapCallback() {
@Override
public void onSuccess(Object result) {
Response res = (Response) result;
setAdapter(res.result);
}
@Override
public void onError(int error) {
switch (error) {
case JsoapError.NETWORK_ERROR:
Log.v("JSoapExample", "Network error");
break;
case JsoapError.PARSE_ERROR:
Log.v("JSoapExample", "Parsing error");
break;
default:
Log.v("JSoapExample", "Unknown error");
break;
}
}
});
}
<br.com.signature.SignaturePad
android:layout_width="fill_parent"
android:layout_height="fill_parent"
signature:penColor="#000"
signature:clearOnDoubleClick="true"
signature:velocityFilterWeight="2000"
android:id="@+id/signature_pad" />
mSignaturePad.setOnSignedListener(new SignaturePad.OnSignedListener() {
@Override
public void onStartSigning() {
...
}
@Override
public void onSigned() {
...
}
@Override
public void onClear() {
...
}
});
//// Clear
mSignaturePad.clear();
//// Save
mSaveButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Bitmap signatureBitmap = mSignaturePad.getSignatureBitmap();
if (addJpgSignatureToGallery(signatureBitmap)) {
Toast("Signature saved into the Gallery");
} else {
Toast("Unable to store the signature");
}
if (addSvgSignatureToGallery(mSignaturePad.getSignatureSvg())) {
Toast("SVG Signature saved into the Gallery");
} else {
Toast("Unable to store the SVG signature");
}
}
});
Tracking down all exceptions is the crucial part of the development. We could just expect that we have handled all exceptions. But whatever we do, we come across it with the so-called pop-up saying “Unfortunately, App has stopped”, that is why it is called uncaught-exceptions.
In AndroidManifest.xml
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<activity android:name="br.com.error.uce.DefaultActivity"></activity>
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_error);
new UnCaughtException.Builder(this)
.setMailSuport("[email protected]", "[email protected]")
.setTrackActivitiesEnabled(true)
.setBackgroundModeEnabled(true)
.build();
}
.setUCEHEnabled(true/false) // default 'true' => Enable/Disable UCE_Handler.
.setTrackActivitiesEnabled(true/false) // default 'false' => Choose whether you want to track the flow of activities the user/tester has taken or not.
.setBackgroundModeEnabled(true/false) // default 'true' => Choose if you want to catch exceptions while app is in background.
'Save Error Log' will work only if your app already has storage permission as library does not ask for it.
Anim | Description |
---|---|
shake | Balance the components |