androidbottomsheetdialog的简单介绍
本篇文章给大家谈谈androidbottomsheetdialog,以及对应的知识点,希望对各位有所帮助,不要忘了收藏本站喔。
本文目录一览:
- 1、Android开发如何设置Dialog样式
- 2、android获取当前页面的dialog
- 3、Android 全局弹窗(Dialog)快速实现
- 4、android 中如何让dialog在一个指定控件下方显示
- 5、Android 原生BottomSheet 介绍及坑
- 6、如何让Android弹出一个Dialog,这个Dialog只有一个图片,点击任意位置后消失
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和的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。