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