电脑知识|欧美黑人一区二区三区|软件|欧美黑人一级爽快片淫片高清|系统|欧美黑人狂野猛交老妇|数据库|服务器|编程开发|网络运营|知识问答|技术教程文章 - 好吧啦网

您的位置:首頁技術文章
文章詳情頁

Android 之BottomsheetDialogFragment仿抖音評論底部彈出對話框效果(實例代碼)

瀏覽:130日期:2022-06-07 14:14:07

實現的效果圖:

Android 之BottomsheetDialogFragment仿抖音評論底部彈出對話框效果(實例代碼)

自定義Fragment繼承BottomSheetDialogFragment重寫它的三個方法:onCreateDialog()onCreateView()onStart()他們的執行順序是從上到下

import android.app.Dialog;import android.content.Context;import android.graphics.Color;import android.graphics.drawable.ColorDrawable;import android.os.Bundle;import android.util.Log;import android.view.LayoutInflater;import android.view.View;import android.view.ViewGroup;import android.widget.FrameLayout;import android.widget.ImageView;import androidx.annotation.NonNull;import androidx.annotation.Nullable;import androidx.coordinatorlayout.widget.CoordinatorLayout;import androidx.recyclerview.widget.GridLayoutManager;import androidx.recyclerview.widget.RecyclerView;import com.google.android.material.bottomsheet.BottomSheetBehavior;import com.google.android.material.bottomsheet.BottomSheetDialog;import com.google.android.material.bottomsheet.BottomSheetDialogFragment;import java.util.ArrayList;import java.util.List;/** * @Author: david.lvfujiang * @Date: 2019/11/14 * @Describe: */public class BaseFullBottomSheetFragment extends BottomSheetDialogFragment { private List<ShareItem> mShareList = new ArrayList<>(); private int[] imgArry= {R.mipmap.five,R.mipmap.four,R.mipmap.one,R.mipmap.three}; private Context mContext; private View view; public static BaseFullBottomSheetFragment getInstance() { return new BaseFullBottomSheetFragment(); } @NonNull @Override public Dialog onCreateDialog(@Nullable Bundle savedInstanceState) { Log.e('TAG', 'onCreateDialog: '); //返回BottomSheetDialog的實例 return new BottomSheetDialog(this.getContext()); } @Override public void onStart() { Log.e('TAG', 'onStart: '); super.onStart(); //獲取dialog對象 BottomSheetDialog dialog = (BottomSheetDialog) getDialog(); //把windowsd的默認背景顏色去掉,不然圓角顯示不見 dialog.getWindow().findViewById(R.id.design_bottom_sheet).setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT)); //獲取diglog的根部局 FrameLayout bottomSheet = dialog.getDelegate().findViewById(R.id.design_bottom_sheet); if (bottomSheet != null) { //獲取根部局的LayoutParams對象 CoordinatorLayout.LayoutParams layoutParams = (CoordinatorLayout.LayoutParams) bottomSheet.getLayoutParams(); layoutParams.height = getPeekHeight(); //修改彈窗的最大高度,不允許上滑(默認可以上滑) bottomSheet.setLayoutParams(layoutParams); final BottomSheetBehavior<FrameLayout> behavior = BottomSheetBehavior.from(bottomSheet); //peekHeight即彈窗的最大高度 behavior.setPeekHeight(getPeekHeight()); // 初始為展開狀態 behavior.setState(BottomSheetBehavior.STATE_EXPANDED); ImageView mReBack = view.findViewById(R.id.re_back_img); //設置監聽 mReBack.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { //關閉彈窗 behavior.setState(BottomSheetBehavior.STATE_HIDDEN); } }); } } /** * 彈窗高度,默認為屏幕高度的四分之三 * 子類可重寫該方法返回peekHeight * * @return height */ protected int getPeekHeight() { int peekHeight = getResources().getDisplayMetrics().heightPixels; //設置彈窗高度為屏幕高度的3/4 return peekHeight - peekHeight / 3; } @Nullable @Override public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { mContext = getContext(); Log.e('TAG', 'onCreateView: '); view = inflater.inflate(R.layout.layoyt_bottomsheet, container, false); initData(); initViews(view); return view; } private void initViews(View view) { RecyclerView recyclerView = view.findViewById(R.id.fragment_share_recyclerView); recyclerView.setLayoutManager(new GridLayoutManager(mContext, 3)); RecyclerCommonAdapter adapter = new RecyclerCommonAdapter(R.layout.recyclear_item, mShareList); recyclerView.setAdapter(adapter); } private void initData() { for (int i = 0; i < 30; i++) { ShareItem item = new ShareItem(); item.setIcon(imgArry[i%4]); mShareList.add(item); } }}

有以下幾點需要注意:

1.去掉窗口的background,窗口的background默認是白色的,如果不處理我們的根部局設置圓角背景的時候是沒有效果的

dialog.getWindow().findViewById(R.id.design_bottom_sheet).setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT));

2.固定窗口的高度,窗口默認可以向上滑動直到鋪滿整個屏幕RecyclerView才開始滑動

BottomSheetDialog dialog = (BottomSheetDialog) getDialog(); //把windowsd的默認背景顏色去掉,不然圓角顯示不見 dialog.getWindow().findViewById(R.id.design_bottom_sheet).setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT)); //獲取diglog的根部局 FrameLayout bottomSheet = dialog.getDelegate().findViewById(R.id.design_bottom_sheet); if (bottomSheet != null) { //獲取根部局的LayoutParams對象 CoordinatorLayout.LayoutParams layoutParams = (CoordinatorLayout.LayoutParams) bottomSheet.getLayoutParams(); layoutParams.height = getPeekHeight(); //修改彈窗的最大高度,不允許上滑(默認可以上滑) bottomSheet.setLayoutParams(layoutParams); final BottomSheetBehavior<FrameLayout> behavior = BottomSheetBehavior.from(bottomSheet); //peekHeight即彈窗的最大高度 behavior.setPeekHeight(getPeekHeight()); // 初始為展開狀態 behavior.setState(BottomSheetBehavior.STATE_EXPANDED); ImageView mReBack = view.findViewById(R.id.re_back_img); //設置監聽 mReBack.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { //關閉彈窗 behavior.setState(BottomSheetBehavior.STATE_HIDDEN); } }); }

3.Fragment加載的布局文件

<LinearLayout xmlns:android='http://schemas.android.com/apk/res/android' android:layout_width='match_parent' android:layout_height='wrap_content' android:background='@drawable/leave_message_radiobutton_background' android:orientation='vertical'> <RelativeLayout android:layout_width='match_parent' android:layout_height='@dimen/dp_40'> <TextView android:layout_width='wrap_content' android:layout_height='wrap_content' android:layout_centerInParent='true' android:text='100條評論' android:textSize='15dp' android:textStyle='bold'></TextView> <ImageView android: android:layout_width='25dp' android:layout_height='25dp' android:layout_alignParentRight='true' android:layout_centerVertical='true' android:layout_marginRight='20dp' android:src='http://www.hdgsjgj.cn/bcjs/@mipmap/back'></ImageView> </RelativeLayout> <androidx.recyclerview.widget.RecyclerView android: android:layout_width='match_parent' android:layout_height='wrap_content' android:layout_marginTop='8dp' android:layout_marginBottom='8dp' /></LinearLayout>

4.Fragment布局的圓角背景

<shape xmlns:android='http://schemas.android.com/apk/res/android' android:shape='rectangle'> <!-- 填充 --> <solid android:color='#ffffff' /> <!-- 圓角 --> <corners android:radius='15dp' /></shape>

5.RecyclerView的item布局

<?xml version='1.0' encoding='utf-8'?><androidx.cardview.widget.CardView xmlns:android='http://schemas.android.com/apk/res/android' xmlns:app='http://schemas.android.com/apk/res-auto' android:layout_width='match_parent' android:layout_height='140dp' android:layout_margin='8dp' app:cardCornerRadius='8dp' app:cardElevation='4dp'> <RelativeLayout android:layout_width='match_parent' android:layout_height='match_parent' android:padding='8dp'> <ImageView android: android:layout_width='140dp' android:src='http://www.hdgsjgj.cn/bcjs/@mipmap/three' android:layout_height='match_parent' android:scaleType='centerCrop' /> </RelativeLayout></androidx.cardview.widget.CardView>

6.RecyclerView適配器是用BaseRecyclerViewAdapterHelperAndroid 中RecyclerView通用適配器的實現

package com.example.bottomsheetdialogapplication;import androidx.annotation.Nullable;import com.chad.library.adapter.base.BaseQuickAdapter;import com.chad.library.adapter.base.BaseViewHolder;import java.util.List;import java.util.Map;/** * @Author: david.lvfujiang * @Date: 2019/10/30 * @Describe: */public class RecyclerCommonAdapter extends BaseQuickAdapter<ShareItem, BaseViewHolder> { public RecyclerCommonAdapter(int layoutResId, @Nullable List<ShareItem> data) { super(layoutResId, data); } @Override protected void convert(BaseViewHolder helper, ShareItem item) { helper.setImageResource(R.id.img_recy_item_1_pic, item.getIcon()); helper.addOnClickListener(R.id.img_recy_item_1_pic); }}

7. 調用

Button button = findViewById(R.id.on); button.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View view) { new BaseFullBottomSheetFragment().show(getSupportFragmentManager(), 'dialog'); } });

到此這篇關于Android 之BottomsheetDialogFragment仿抖音評論底部彈出對話框效果(實例代碼)的文章就介紹到這了,更多相關android 抖音底部彈出對話框內容請搜索好吧啦網以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持好吧啦網!

標簽: 抖音
相關文章:
主站蜘蛛池模板: 淬火设备-钎焊机-熔炼炉-中频炉-锻造炉-感应加热电源-退火机-热处理设备-优造节能 | 儿童乐园|游乐场|淘气堡招商加盟|室内儿童游乐园配套设备|生产厂家|开心哈乐儿童乐园 | 车牌识别道闸_停车场收费系统_人脸识别考勤机_速通门闸机_充电桩厂家_中全清茂官网 | 药品仓库用除湿机-变电站用防爆空调-油漆房用防爆空调-杭州特奥环保科技有限公司 | 彩信群发_群发彩信软件_视频短信营销平台-达信通 | 蒸汽热收缩机_蒸汽发生器_塑封机_包膜机_封切收缩机_热收缩包装机_真空机_全自动打包机_捆扎机_封箱机-东莞市中堡智能科技有限公司 | 包塑丝_高铁绑丝_地暖绑丝_涂塑丝_塑料皮铁丝_河北创筹金属丝网制品有限公司 | 月嫂_保姆_育婴_催乳_母婴护理_产后康复_养老护理-吉祥到家家政 硫酸亚铁-聚合硫酸铁-除氟除磷剂-复合碳源-污水处理药剂厂家—长隆科技 | 伶俐嫂培训学校_月嫂培训班在哪里报名学费是多少_月嫂免费政府培训中心推荐 | 震动筛选机|震动分筛机|筛粉机|振筛机|振荡筛-振动筛分设备专业生产厂家高服机械 | 招商帮-一站式网络营销服务|互联网整合营销|网络推广代运营|信息流推广|招商帮企业招商好帮手|搜索营销推广|短视视频营销推广 | 铝箔袋,铝箔袋厂家,东莞铝箔袋,防静电铝箔袋,防静电屏蔽袋,防静电真空袋,真空袋-东莞铭晋让您的产品与众不同 | 澳门精准正版免费大全,2025新澳门全年免费,新澳天天开奖免费资料大全最新,新澳2025今晚开奖资料,新澳马今天最快最新图库-首页-东莞市傲马网络科技有限公司 | CXB船用变压器-JCZ系列制动器-HH101船用铜质开关-上海永上船舶电器厂 | 丹尼克尔拧紧枪_自动送钉机_智能电批_柔性振动盘_螺丝供料器品牌 | 石家庄网站建设|石家庄网站制作|石家庄小程序开发|石家庄微信开发|网站建设公司|网站制作公司|微信小程序开发|手机APP开发|软件开发 | 工控机-图像采集卡-PoE网卡-人工智能-工业主板-深圳朗锐智科 | 铣床|万能铣床|立式铣床|数控铣床|山东滕州万友机床有限公司 | 山东石英砂过滤器,除氟过滤器「价格低」-淄博胜达水处理 | 电线电缆厂家|沈阳电缆厂|电线厂|沈阳英联塑力线缆有限公司 | 电镀标牌_电铸标牌_金属标贴_不锈钢标牌厂家_深圳市宝利丰精密科技有限公司 | 欧景装饰设计工程有限公司-无锡欧景装饰官网 | 北京工业设计公司-产品外观设计-产品设计公司-千策良品工业设计 北京翻译公司-专业合同翻译-医学标书翻译收费标准-慕迪灵 | 杭州双螺杆挤出机-百科 | 中天寰创-内蒙古钢结构厂家|门式刚架|钢结构桁架|钢结构框架|包头钢结构煤棚 | 海南在线 海南一家| 防锈油-助焊剂-光学玻璃清洗剂-贝塔防锈油生产厂家 | 槽钢冲孔机,槽钢三面冲,带钢冲孔机-山东兴田阳光智能装备股份有限公司 | PCB厂|线路板厂|深圳线路板厂|软硬结合板厂|电路板生产厂家|线路板|深圳电路板厂家|铝基板厂家|深联电路-专业生产PCB研发制造 | 热熔胶网膜|pes热熔网膜价格|eva热熔胶膜|热熔胶膜|tpu热熔胶膜厂家-苏州惠洋胶粘制品有限公司 | nalgene洗瓶,nalgene量筒,nalgene窄口瓶,nalgene放水口大瓶,浙江省nalgene代理-杭州雷琪实验器材有限公司 | 一体化隔油提升设备-餐饮油水分离器-餐厨垃圾处理设备-隔油池-盐城金球环保产业发展有限公司 | 密集架-密集柜厂家-智能档案密集架-自动选层柜订做-河北风顺金属制品有限公司 | 济南展厅设计施工_数字化展厅策划设计施工公司_山东锐尚文化传播有限公司 | 汽液过滤网厂家_安平县银锐丝网有限公司| 酒万铺-酒水招商-酒水代理| 植筋胶-粘钢胶-碳纤维布-碳纤维板-环氧砂浆-加固材料生产厂家-上海巧力建筑科技有限公司 | 橡胶粉碎机_橡胶磨粉机_轮胎粉碎机_轮胎磨粉机-河南鼎聚重工机械制造有限公司 | 浙江建筑资质代办_二级房建_市政_电力_安许_劳务资质办理公司 | 北京租车公司_汽车/客车/班车/大巴车租赁_商务会议/展会用车/旅游大巴出租_北京桐顺创业租车公司 | Win10系统下载_32位/64位系统/专业版/纯净版下载 |