English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

Implementazione delle funzioni di condivisione di SMS, WeChat e Weibo su Android

Dopo avermi preoccupato per diversi giorni delle funzionalità dei grafici, ho iniziato a sviluppare una nuova funzione. Ossia condividere contenuti attraverso SMS, WeChat, Weibo e altri canali, e per questo ho un semplice Task:

  • Scrivere il pulsante di condivisione nel Toolbar
  • Disegnare una pagina di condivisione Android
  • Scrivere un esempio di condivisione SMS
  • Scrivere la condivisione sociale

In quella giornata, ho completato solo le prime tre parti.

Il pulsante di condivisione sul Toolbar

Sul Toolbar, la condivisione in alto a destra è principalmente disegnata tramite ImageView:

<?xml version="1.0" encoding="utf-8"?>
<android.support.v7.widget.Toolbar xmlns:android="http://schemas.android.com/apk/res/android"
 xmlns:toolbar="http://schemas.android.com/apk/res-auto"
 xmlns:tools="http://schemas.android.com/tools"
 android:id="@+id/toolbar"
 android:layout_width="match_parent"
 android:layout_height="?attr/actionBarSize"
 android:background="?attr/colorPrimaryDark"
 android:gravity="center">
 <TextView
  android:id="@+id/toolbar_title"
  android:layout_width="wrap_content"
  android:layout_height="wrap_content"
  android:layout_gravity="center"
  android:text="xxx" />
 <ImageView
  android:visibility="invisible"
  android:id="@+id/share"
  android:layout_width="wrap_content"
  android:layout_height="wrap_content"
  android:paddingEnd="@dimen/length_24"
  android:paddingStart="@dimen/length_16"
  android:paddingTop="@dimen/length_16"
  android:paddingBottom="@dimen/length_16"
  android:layout_gravity="right"
  android:src="@drawable/share_icon"
  tools:ignore="RtlHardcoded" />
</android.support.v7.widget.Toolbar>

Poi, quando carico i dati, rendo questo elemento visibile:

share.setVisibility(View.VISIBLE);

Esempio di condivisione tramite SMS

Prima di implementare l'UI, ho scritto una funzione di condivisione semplice:

@OnClick(R.id.share)
void shareAction() {
 BaseShare smsShare = ShareFactory.create("SMS");
 String text = information.getTitle() + ":" + information.getTitle();
 smsShare.share(this, text);
}

Poi lo ho ristrutturato in un modello di fabbrica semplice:

public static BaseShare getShareType(String type) {
 switch (type) {
  case "SMS":
   return new SMSShare();
  case "WEIBO":
   return new WeiboShare();
  case "MOMENTS":
   return new MomentsShare();
  case "WECHAT":
   return new WechatShare();
 }
 return null;
}

Per diversi tipi di condivisione, ci sono diverse classi per gestire le relative operazioni.

Disegno la parte inferiore utilizzando Dialog

All'inizio, ho utilizzato Dialog per disegnare la布局 inferiore:

void showShareDialog() {
 Dialog bottomDialog = new Dialog(this, R.style.BottomDialog);
 View contentView = LayoutInflater.from(this).inflate(R.layout.bottom_share, null);
 bottomDialog.setContentView(contentView);
 ViewGroup.LayoutParams layoutParams = contentView.getLayoutParams();
 layoutParams.width = getResources().getDisplayMetrics().widthPixels;
 contentView.setLayoutParams(layoutParams);
 bottomDialog.getWindow().setGravity(Gravity.BOTTOM);
 bottomDialog.setCanceledOnTouchOutside(true);
 bottomDialog.getWindow().setWindowAnimations(R.style.BottomDialog_Animation);
 bottomDialog.show();
 }

Poi ho semplicemente esaminato l'effetto animazione:

<style name="BottomDialog">
 <item name="android:windowNoTitle">true</item>
 <item name="android:windowBackground">@android:color/transparent</item>
</style>
<style name="BottomDialog.Animation" parent="Animation.AppCompat.Dialog">
 <item name="android:windowEnterAnimation">@anim/translate_dialog_in</item>
 <item name="android:windowExitAnimation">@anim/translate_dialog_out</item>
</style>

Corrispondente file animazione:

translate_dialog_in:

<?xml version="1.0" encoding="utf-8"?>
<translate xmlns:android="http://schemas.android.com/apk/res/android">
 android:duration="300"
 android:fromXDelta="0"
 android:fromYDelta="100%"
 android:toXDelta="0"
 android:toYDelta="0">
</translate>

translate_dialog_out:

<?xml version="1.0" encoding="utf-8"?>
<translate xmlns:android="http://schemas.android.com/apk/res/android">
 android:duration="300"
 android:fromXDelta="0"
 android:fromYDelta="0"
 android:toXDelta="0"
 android:toYDelta="100%"
</translate>

Ma è sorto un problema durante il disegno, ovvero il Dialog è sopra tutti, quindi è stato sostituito con BottomSheetDialog per il disegno.

Utilizzare BottomSheetDialog per disegnare il menu di condivisione

La logica corrispondente è diventata più semplice.

void showShareDialog() {
 final BottomSheetDialog bottomSheetDialog = new BottomSheetDialog(DetailActivity.this);
 View dialogView = LayoutInflater.from(InformationDetailActivity.this).inflate(R.layout.bottom_share, null);
 dialogView.findViewById(R.id.cancel_share).setOnClickListener(view -> {
  bottomSheetDialog.dismiss();
 });
 bottomSheetDialog.setContentView(dialogView);
 bottomSheetDialog.show();
}

Conclusione

I suddetti sono i tutorial di implementazione di funzionalità di condivisione di短信、微信、微博 su Android che ho introdotto per voi, spero possano essere utili. Se avete qualsiasi domanda, lasciate un commento e vi risponderò prontamente. In questo momento, anche grazie per il supporto al sito web di tutorial di urla!

Ti piacerebbe anche