使用 BottomSheetDialog 實現仿知乎分享控件
主要步驟:java
知乎 | 仿 | 原生 |
寫一個分享界面的佈局android
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical">
<TextView android:layout_width="match_parent" android:layout_height="wrap_content" android:padding="16dp" android:text="我是廣告欄" android:textAppearance="@style/TextAppearance.AppCompat" android:textSize="18sp"/>
<View android:layout_width="match_parent" android:layout_height="1px" android:background="@android:color/darker_gray"/>
<android.support.v7.widget.RecyclerView android:id="@+id/list_view" android:layout_width="match_parent" android:layout_height="match_parent"/>
</LinearLayout>複製代碼
在 Activity 裏使用 BottomSheetDialog 控件顯示git
BottomSheetDialog mBottomSheetDialog = new BottomSheetDialog(this);
mBottomSheetDialog.setContentView(R.layout.dialog_bottom_sheet);
mBottomSheetDialog.show();複製代碼
寫一個 RecyclerViewAdapter 和 appinfo_item 佈局github
<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="wrap_content"
android:gravity="center"
android:orientation="vertical">
<ImageView
android:id="@+id/img_list_item"
android:layout_width="48dp"
android:layout_height="48dp"
android:scaleType="centerCrop"
tools:src="@mipmap/ic_launcher"/>
<TextView
android:id="@+id/text_list_item"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="2dp"
android:ellipsize="end"
android:singleLine="true"
tools:text="分享11111111111111"/>
</LinearLayout>複製代碼
獲取手機內全部支持分享的應用列表bash
public static List<ResolveInfo> getShareApps(Context context, Intent intent) {
List<ResolveInfo> resolveInfoList;
PackageManager pm = context.getPackageManager();
resolveInfoList = pm.queryIntentActivities(intent, PackageManager.COMPONENT_ENABLED_STATE_DEFAULT);
return resolveInfoList;
}複製代碼
返回數據給 Activity,而後設置 Adapter 就差很少完成,詳細代碼見 ZhihuShareDialogapp
經過 PackageManager 的 queryIntentActivities 方法獲取到的應用是按照應用安裝的前後順序,而 Lollipop(5.0) 開始原生分享已支持自動把經常使用應用排在最頂部。固然也能夠本身實現應用的排序,但比較折騰,可參考源碼 ResolverActivity佈局
源碼下載地址 : github.com/iMeiji/Zhih…this