androidbottomsheetdialog的简单介绍

本篇文章给大家谈谈androidbottomsheetdialog,以及对应的知识点,希望对各位有所帮助,不要忘了收藏本站喔。

本文目录一览:

Android开发如何设置Dialog样式

核心代码:

改消 

package com.zms.toast;

import android.app.Dialog;

import android.content.Context;

import android.content.res.Resources;

import android.os.Handler;

import android.os.Message;

import android.util.DisplayMetrics;

import android.view.Gravity;

import android.view.Window;

import android.view.WindowManager;

import android.widget.TextView;

import java.util.Random;

/**

* Created by AlexZhou on 2015/3/2.

* 14:51

*/

public class CustomDialog extends Dialog {

private static int defaultWidth = 200;

private static int defaultHeight = 160;

private int progress = 0;

private TextView dialogText;

伍梁

public CustomDialog(Context context) {

super(context);

}

public CustomDialog(Context context, int layout, int style) {

this(context, defaultWidth, defaultHeight, layout, style);

}

public float getDensity(Context context) {

Resources res = context.getResources();

DisplayMetrics dm = res.getDisplayMetrics();

return dm.density;

}

public CustomDialog(Context context, int width, int height, int layout, int style) {

super(context, style);

// 设置内容

setContentView(layout);

// 设置窗口属性

Window window = getWindow();

WindowManager.LayoutParams params = window.getAttributes();

// 设置宽度、高度、密度、对齐方式

float density = getDensity(context);

params.width = (int) (width * density);

params.height = (int) (height * density);

params.gravity = Gravity.CENTER;

window.setAttributes(params);

dialogText = (TextView) findViewById(R.id.dialogText);

new Thread(new TimeThread()).start();

}

final Handler timeHandler = new Handler() {

public void handleMessage(Message msg) {

switch (msg.what) {

case 1:

if (progress 100) {

progress = progress + new Random().nextInt(10);

if (progress 腔歼运= 100) {

dialogText.setText(更新进度 + progress + %);

} else {

dialogText.setText(更新进度100%);

}

} else {

dialogText.setText(更新完成);

dismiss();

}

}

super.handleMessage(msg);

}

};

public class TimeThread implements Runnable {

@Override

public void run() {

while (true) {

try {

Thread.sleep(1000);

Message message = new Message();

message.what = 1;

timeHandler.sendMessage(message);

} catch (Exception e) {

e.printStackTrace();

}

}

}

}

@Override

public void dismiss() {

super.dismiss();

}

}

android获取当前页面的dialog

android获取当前页面的dialog的方法。

1、AndroidSupportLibrary23.2里的DesignSupportLibrary新加了一个BottomSheets控件,一个底部的Dialog表。

2、peekHeight是当BottomSheets关闭的时候,底部下表我们能看到的高度,hideable是当拖拽下拉的时候,bottomsheet是否能全部隐藏。

3、需要监听BottomSheets回调的状态,可以通过setBottomSheetCallback来实现,onSlide方法是拖拽中的旁培旅回调,根据slideOffset可以做一些动画onStateChanged方法可以监听中猛到状态的改变,State总共有5种。

4、实现的思路是通过附加一个BottomSheetBehavior给CoordinatorLayout的子视运凳图,通过对其behavior的state进行设置更改不同的状态。

[img]

Android 全局弹窗(Dialog)快速实现

项目中 云信戚陪IM同一帐号,在多处登录时,要实现互踢功能。

在收到被踢通知时,弹窗提示用户被踢,点击继续跳转到登录界面,取消则关闭App

由于不知道用户会在哪个界面操作时被踢仿仔启,接受通知的那个Activity有可能已经失去上下文,导致空指针异常!从而无法 Toast 或 弹窗。

能实现 全局Dialog 就好了!

由于退出App的时候,要清除之前所有的Activity,其实就是退出登备如录功能。

我采用 集合法 来实现的退出登录 ,在BaseActivity中记录所有打开过的Activity,然后遍历清除。

然后在 BaseActivity 中调用 addActivity() ,不在赘述!

如果能获取到用户当前观看的界面,然后将上下文传过去,就可以实现全局Dialog

当前页面也就是栈顶Activity,也就是最后添加的那个Activity。如下:

然后在使用的地方获取

即:

注意:之所以返回AppCompatActivity,而不是Activity,

是因为弹出Dialog 需要 supportFragmentManager ,Activity 获取不到

以上就可以实现全局Dialog了。

另外,上述Dialog是用DialogFragment写的,感兴趣可阅 《DialogFragment 去除内容区棱角背景(不规则圆角)》 ,附有工具类及用法。

android 中如何让dialog在一个指定控件下方显示

Android中Dialog的示例代码如下:

1.创建对象框

AlertDialog.Builder

builder

=

new

Builder(context);

builder.setTitle("请输入");

//设置对话框标题

builder.setIcon(android.R.drawable.btn_star);

//设置对话框标题前的图标

2.创建EditText输入框

final

EditText

edit

=

new

EditText(context);

3.将输入框赋值给Dialog,并增加确定取消按键

builder.setView(edit);

builder.setPositiveButton("确认",

new

DialogInterface.OnClickListener()

{

@Override

public

void

onClick(DialogInterface

dialog,

int

which)

{

Toast.makeText(context,

"你输入的是:

"

+

edit.getText().toString(),

Toast.LENGTH_SHORT).show();

}

});

builder.setNegativeButton("取消",

new

DialogInterface.OnClickListener()

{

@Override

public

void

onClick(DialogInterface

dialog,

int

which)

{

Toast.makeText(context,

"你点了取消",

Toast.LENGTH_SHORT).show();

}

});

4.设置常用api,并show弹出

builder.setCancelable(true);

//设置按钮是否可以按返回键取消,false则不可以取消

AlertDialog

dialog

=

builder.create();

/穗册/创猜带宏建对话框

dialog.setCanceledOnTouchOutside(true);

//设置弹出框失去焦点是否隐藏,即点击屏蔽其行派它地方是否隐藏

dialog.show();

Android 原生BottomSheet 介绍及坑

Android Support Library 23.2 推出之后,增加了几个功能,例如支持Vector Drawables 和Animated Vector Drawables;增加AppCompat DayNight 主题;Design 库中增加Bottom Sheets,RecyclerView 支持 auto-measurement,之前的wrap_content ,match_parent 都将可以发稿改挥作用等等

公司的App 之前使用过第三方的[BottomSheet] (键帆判 ),现在Android 有自己的BottomSheet 那还不赶紧换成原生的。然而好事多磨,Android 原生BottomSheet 资料太少,深研下去发现BottomSheet 就是个大坑!

BottomSheet 使用需要CoordinatorLayout作为父布局,BottomSheet 的布局作为CoordinatorLayout 的子布局,并且BottomSheetBehavior(比如加上app:layout_behavior=”android.support.design.widget.BottomSheetBehavior”)

实际使用过程中主要依靠BottomSheetBehavior来控制BottomSheet的展示及回调。

BottomSheetBehavior 具有五种状态:

设置状态:

bottomSheetBehavior.setState(BottomSheetBehavior.STATE_EXPANDED);

回调:

强调:

BottomSheetBehavior将能帮你实现 常驻bottom sheet( persistent bottom sheet) 的场景, 但这个版本还提供了BottomSheetDialog 和 BottomSheetDialogFragment 来实现 modal bottom sheets 的场景。只需要将AppCompatDialog 或者AppCompatDialogFragment分别替换成上述的两个控件,你就拥有了 bottom sheet 风格的对话框

然而我们实际我们需要BottomSheetDialog 是展开的,而BottomSheetDialog只展示一部分

原因:BottomSheetDialog默认是STATE_COLLAPSED,所有BottomSheetDialog 依靠peekHight来设置高度,系统BottomSheetDialog 默认高度为256dp(查源码得知),那按理来说我们的BottomSheetDialog 高度该是256dp,但是我们实际发现BottomSheetDialog高度也不等于256dp。我们研究下BottomSheetBehavior的中控制BottomSheetDialog高度源码:

通过源码我们可以得知BottomSheetBehavior通过改变child的偏移量而控制BottomSheetDialog的高度,默认状态为STATE_COLLAPSED,child向下移动mMaxOffset高度,从而控制child显示高度为mPeekHeight,这就需要child与parent 顶部对齐,child的getTop 为0;

然而我们再去查看Android的BottomSheetDialog 内中布局R.layout.design_bottom_sheet_dialog,发现我们自定义的的BottomSheetDialog 的contentView 是放置在FrameLayout 中的,然而FrameLayout出于某些原因为垂直居中的,而不是顶部对齐,从而导致BottomSheetDialog在256dp的基础上向下偏移,只展示一部分。

所以我们可以通过下面方法解决BottomSheetDialog 的显示问题

解决方法如下:

当我们设置bottomSheetDialog每次点击后不new,而是直接show的话,然轿裤而当我们会bottomSheetDialog 展开后,我们将BottomSheetDialog划下隐藏后, 再点击展示BottomSheetDialog后,会发现页面只是变暗,BottomsheetDialog未展开,这是由于之前我们划下收缩隐藏BottomSheetDialog后,bottomSheetDialogBehavior的状态为隐藏,再次show之后,系统未恢复bottomSheetDialogBehavior的状态,还是隐藏,所以再次点击后页面只是变暗。

如何让Android弹出一个Dialog,这个Dialog只有一个图片,点击任意位置后消失

自定义dialog 写了类唤渣埋梁段继承dialog 然后重写 onTouchEvent方和蚂法 getAction() 然后选择判断这个 action case: ACTION_DOWN 或者 ACTION_MOVE 事件的时候 cancel() return true 就好了

关于androidbottomsheetdialog和的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。

标签列表