Android开发-弹框-Activity弹框

717 阅读2分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第17天,点击查看活动详情

前面已经介绍了弹框展示的四种实现方式了,从系统的Dialog到PopupWindow,各有千秋,综合来说实现起来都是比较方便的,各自有各自的优缺点,根据业务需求选择对应的实现方式,下面介绍一种特殊的弹框实现方式,Activity的实现,这种方式一般应用于场景操作比较复杂的情况下,实现起来也会相对复杂,因为Activity没有Dialog或者PoppupWindow那种自带的弹框样式,Activity需要自己设置theme,才能表现出弹框的样式,也就是我们在mainfest里面设置的style。

Activity弹框的实现

1.创建Activity

2.绘制弹框UI

3.设置Activity style

4.调用startActivity调起弹框

下面按照上面的步骤,开始实现:

1)创建DialogActivity作为弹框显示

public class DialogActivity extends Activity {

    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.layout_dialog);
    }
}

2)布局实现这里就不贴了,大家根据自己业务实现就好
3)设置 Activity style,在res/values下建立style.xml

<resources>
<style name="Activity_Dialog" parent="android:style/Theme.Dialog">
  <item name="android:windowBackground">@color/activity_background</item>
  <item name="android:windowNoTitle">true</item>
  <item name="android:windowIsTranslucent">true</item>
  <item name="android:windowAnimationStyle">@+android:style/Animation.Translucent</item>
</style>
</resources>

在mainfest里面设置theme:

<activity Android:name=".DialogActivity" android:theme="@android:style/Activity_Dialog"></activity>

4.调用startActivity调起弹框

public class MainActivity extends Activity {

    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        btn_activity.setOnClickListener{ v->
          showActivityDialog(); 
        }
    }

    private void showActivityDialog(){
        Intent intent = new Intent(MainActivity.this,DialogActivity.class);
        startActivity(intent);
    }
}

唤起弹框的Activiy就可以实现弹框的显示了,其实步骤不是特别复杂,主要是需要根据自己业务的场景,设置弹框的样式,包括当前Activity的和弹出Activity的,还需要设置弹框消失的事件,一般自带的Dialog都是有setCancelOnOutSide的方法,但是对应Activity来说,是没有的,只能我们自己实现了,这里我们可以在弹出的Activity里实现onTouchEvent事件,设置点击后直接finish弹出的Activity,当然返回也可以做同样的操作,可以在onKeyDown的监听事件里处理。这里代码就不贴了,都是Activity自带的实现,直接实现就好了,处理逻辑根据业务来