Android进阶之路

来源:互联网 发布:男士保湿 知乎 编辑:程序博客网 时间:2024/05/21 09:40

在Android中,或许我们使用弹框时,用到最多的就是Dialog与PopupWindow了,今天闲来无事在掘金看到了Dialog的一个简单实现,效果还是蛮好的,而且实现也比较简单,所以自己就拿来练了下手,在不注意的情况下,也是犯了一些小错,不过已经解决了,大家可以看一下效果图(Dialog内的布局自己写的比较丑,大家可以自己美化),在效果图之后我会标记一下我自己犯的错,防止大家也犯这样的小错误

图片太大了,有机会大家给指点下,如何让图片更好的展示

错误:
1.创建Dialog的时候没有引用自己在style中的Dialog样式
导致结果:弹出的Dialog的Width属性没有match,效果很丑
2.没有设置dialog.setCanceledOnTouchOutside(true)(它默认是false,大家可以连追几个类看看)
导致结果:点击Dialog之外的空间,无法关闭Dialog

动画xml(在res中创建anim文件夹-之后添加以下的俩个出入动画):

tranlate_dialog_in.xml

<?xml version="1.0" encoding="utf-8"?><translate xmlns:android="http://schemas.android.com/apk/res/android"    android:duration="300"    android:fromXDelta="0"    android:fromYDelta="100%"    android:toXDelta="0"    android:toYDelta="0"></translate>

tranlate_dialog_out.xml

<?xml version="1.0" encoding="utf-8"?><translate xmlns:android="http://schemas.android.com/apk/res/android"    android:duration="300"    android:fromXDelta="0"    android:fromYDelta="0"    android:toXDelta="0"    android:toYDelta="100%"></translate>

动画的Style(内部引用了anim内的动画):

 <style name="BottomDialog.Animation" parent="Animation.AppCompat.Dialog">        <item name="android:windowEnterAnimation">@anim/tranlate_dialog_in</item>        <item name="android:windowExitAnimation">@anim/tranlate_dialog_out</item> </style>

Dialog的Style(这俩个style都写在values文件下的styles.xml):

<style name="BottomDialog" parent="@style/Base.V7.Theme.AppCompat.Light.Dialog">        <item name="android:windowNoTitle">true</item>        <item name="android:windowBackground">@android:color/white</item></style>

MainActivity :

package com.example.buttomdialog;import android.app.Dialog;import android.os.Bundle;import android.support.v7.app.AppCompatActivity;import android.view.Gravity;import android.view.View;import android.view.ViewGroup;import android.widget.LinearLayout;import android.widget.TextView;import android.widget.Toast;public class MainActivity extends AppCompatActivity {    private TextView mBtn;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        mBtn = (TextView) findViewById(R.id.tv_btn);        mBtn.setOnClickListener(new View.OnClickListener() {            @Override            public void onClick(View v) {                Toast.makeText(MainActivity.this,"叫一声佛主·回头无岸", Toast.LENGTH_LONG).show();                    showDiglog();            }        });    }    private void showDiglog() {        //这里要注意填充style,不然左右会出现间隙        Dialog dialog = new Dialog(this,R.style.BottomDialog);        //填充子布局        View view = LinearLayout.inflate(this, R.layout.dialog_layout, null);        //设置连接        dialog.setContentView(view);        //设置dialog展示内容的宽度        ViewGroup.LayoutParams layoutParams = view.getLayoutParams();        layoutParams.width=getResources().getDisplayMetrics().widthPixels;        view.setLayoutParams(layoutParams);        //设置dialog的显示位置,还有点击dialog之外的空间,关闭dialog        dialog.getWindow().setGravity(Gravity.BOTTOM);        dialog.getWindow().setWindowAnimations(R.style.BottomDialog_Animation);        dialog.setCancelable(true);        dialog.setCanceledOnTouchOutside(true);        dialog.show();    }}

MainActivity Xml:

<?xml version="1.0" encoding="utf-8"?><RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"    xmlns:tools="http://schemas.android.com/tools"    android:id="@+id/activity_main"    android:layout_width="match_parent"    android:layout_height="match_parent"    tools:context="com.example.buttomdialog.MainActivity">    <TextView        android:id="@+id/tv_btn"        android:layout_width="match_parent"        android:layout_height="wrap_content"        android:gravity="center"        android:padding="5dp"        android:text="弹框" /></RelativeLayout>

填充的Didlog内的item xml-dialog_layout.xml:

<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"    android:layout_width="match_parent"    android:orientation="vertical"    android:layout_height="wrap_content">    <LinearLayout        android:layout_width="match_parent"        android:layout_height="wrap_content"        android:orientation="horizontal"        android:layout_gravity="center"        android:gravity="center"        >    <ImageView        android:layout_width="wrap_content"        android:layout_height="wrap_content"        android:src="@mipmap/ic_launcher"        />    <TextView        android:layout_width="0dp"        android:layout_weight="1"        android:layout_height="wrap_content"        android:text="岁月当头,还是不休"        android:textSize="20sp"        android:layout_gravity="center"        android:gravity="center"        />    </LinearLayout>    <LinearLayout        android:layout_width="match_parent"        android:layout_height="wrap_content"        android:orientation="horizontal"        android:layout_gravity="center"        android:gravity="center"        >        <ImageView            android:layout_width="wrap_content"            android:layout_height="wrap_content"            android:src="@mipmap/ic_launcher"            />        <TextView            android:layout_width="0dp"            android:layout_weight="1"            android:layout_height="wrap_content"            android:text="岁月当头,还是不休"            android:textSize="20sp"            android:layout_gravity="center"            android:gravity="center"            />    </LinearLayout> <LinearLayout    android:layout_width="match_parent"    android:layout_height="wrap_content"    android:orientation="horizontal"    android:layout_gravity="center"    android:gravity="center"    >    <ImageView        android:layout_width="wrap_content"        android:layout_height="wrap_content"        android:src="@mipmap/ic_launcher"        />    <TextView        android:layout_width="0dp"        android:layout_weight="1"        android:layout_height="wrap_content"        android:text="岁月当头,还是不休"        android:textSize="20sp"        android:layout_gravity="center"        android:gravity="center"        /></LinearLayout> <LinearLayout    android:layout_width="match_parent"    android:layout_height="wrap_content"    android:orientation="horizontal"    android:layout_gravity="center"    android:gravity="center"    >    <ImageView        android:layout_width="wrap_content"        android:layout_height="wrap_content"        android:src="@mipmap/ic_launcher"        />    <TextView        android:layout_width="0dp"        android:layout_weight="1"        android:layout_height="wrap_content"        android:text="岁月当头,还是不休"        android:textSize="20sp"        android:layout_gravity="center"        android:gravity="center"        /></LinearLayout> <LinearLayout    android:layout_width="match_parent"    android:layout_height="wrap_content"    android:orientation="horizontal"    android:layout_gravity="center"    android:gravity="center"    >    <ImageView        android:layout_width="wrap_content"        android:layout_height="wrap_content"        android:src="@mipmap/ic_launcher"        />    <TextView        android:layout_width="0dp"        android:layout_weight="1"        android:layout_height="wrap_content"        android:text="岁月当头,还是不休"        android:textSize="20sp"        android:layout_gravity="center"        android:gravity="center"        /></LinearLayout> <LinearLayout    android:layout_width="match_parent"    android:layout_height="wrap_content"    android:orientation="horizontal"    android:layout_gravity="center"    android:gravity="center"    >    <ImageView        android:layout_width="wrap_content"        android:layout_height="wrap_content"        android:src="@mipmap/ic_launcher"        />    <TextView        android:layout_width="0dp"        android:layout_weight="1"        android:layout_height="wrap_content"        android:text="岁月当头,还是不休"        android:textSize="20sp"        android:layout_gravity="center"        android:gravity="center"        /></LinearLayout></LinearLayout>
1 0
原创粉丝点击