自定义归属地风格弹窗

package com.loaderman.addressdialogdemo;

import android.app.Dialog;
import android.content.Context;
import android.view.Gravity;
import android.view.Window;
import android.view.WindowManager;
import android.widget.AdapterView;
import android.widget.BaseAdapter;
import android.widget.ListView;

/**
 *
 * <p/>
 * 自定义归属地风格弹窗
 * <p/>
 * 1. 给dialog设置布局,setContentView
 * 2. 去掉标题栏和背景
 * 去掉标题栏
 * <item name="android:windowNoTitle">true</item>
 * 去掉背景
 * <item name="android:windowBackground">@color/white</item>
 * <p/>
 * 3. dialog显示在屏幕下方, 修改窗口的位置
 */
public class AddressDialog extends Dialog {

    private ListView lvList;

    public AddressDialog(Context context) {
        //指定dialog的样式
        super(context, R.style.AddressDialogStyle);

        //给dialog设置布局
        setContentView(R.layout.dialog_address);

        //显示在屏幕正下方
        //原理: 修改dialog所在窗口Window的位置, dialog随窗口显示
        Window window = getWindow();//获取dialog所在的窗口对象
        WindowManager.LayoutParams attributes = window.getAttributes();//获取当前窗口的属性(布局参数)
        attributes.gravity = Gravity.BOTTOM | Gravity.CENTER_HORIZONTAL;//靠下居中显示
        window.setAttributes(attributes);//重新设置布局参数
        lvList = (ListView) findViewById(R.id.lv_list);
    }

    //为了增强扩展性, 可以由外部传递adapter进来, 决定ListView的显示内容
    public void setAdapter(BaseAdapter adapter) {
        lvList.setAdapter(adapter);
    }

    //设置条目点击事件
    public void setOnItemClickListener(AdapterView.OnItemClickListener listener) {
        lvList.setOnItemClickListener(listener);
    }
}
package com.loaderman.addressdialogdemo;

import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.BaseAdapter;
import android.widget.ImageView;
import android.widget.TextView;

public class MainActivity extends AppCompatActivity {
    private int[] mIcons = new int[]{R.drawable.shape_address_normal, R.drawable
            .shape_address_orange, R.drawable.shape_address_blue, R.drawable.shape_address_gray,
            R.drawable.shape_address_green};

    private String[] mNames = new String[]{"半透明", "活力橙", "卫士蓝", "金属灰", "苹果绿"};

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

    public void set(View view) {
        //显示弹窗
        //dialog中传的context必须是activity对象
        final AddressDialog dialog = new AddressDialog(MainActivity.this);
        dialog.setAdapter(new AddressStyleAdapter());
        dialog.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
                //1. 记录当前被选中的条目的位置, 保存在sp中
                PrefUtils.putInt(getApplicationContext(), "address_style", position);
                //2. 隐藏弹窗
                dialog.dismiss();
            }
        });

        dialog.show();
    }

    //归属地样式弹窗adapter
    class AddressStyleAdapter extends BaseAdapter {

        @Override
        public int getCount() {
            return mNames.length;
        }

        @Override
        public Object getItem(int position) {
            return null;
        }

        @Override
        public long getItemId(int position) {
            return position;
        }

        @Override
        public View getView(int position, View convertView, ViewGroup parent) {
            View view = View.inflate(MainActivity.this, R.layout.item_address, null);

            ImageView ivIcon = (ImageView) view.findViewById(R.id.iv_icon);
            TextView tvName = (TextView) view.findViewById(R.id.tv_name);
            ImageView ivSelect = (ImageView) view.findViewById(R.id.iv_select);

            ivIcon.setImageResource(mIcons[position]);
            tvName.setText(mNames[position]);

            //从sp中取出当前选中的样式位置
            //和当前position比较
            int pos = PrefUtils.getInt(getApplicationContext(),"address_style", 0);//默认是半透明
            if (position == pos) {
                //当前条目被选中
                //显示勾选图片
                ivSelect.setVisibility(View.VISIBLE);
            } else {
                ivSelect.setVisibility(View.GONE);
            }

            return view;
        }
    }
}
package com.loaderman.addressdialogdemo;

import android.content.Context;
import android.content.SharedPreferences;

public class PrefUtils {
    public static void putInt(Context ctx, String key, int value) {
        SharedPreferences sp = ctx.getSharedPreferences("config", Context.MODE_PRIVATE);
        sp.edit().putInt(key, value).commit();
    }

    public static int getInt(Context ctx, String key, int defValue) {
        SharedPreferences sp = ctx.getSharedPreferences("config", Context.MODE_PRIVATE);
        return sp.getInt(key, defValue);
    }
}

在res/anim下

<!--anim_dialog_enter-->
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android"
     android:shareInterpolator="false">
    <alpha
        android:duration="@integer/abc_config_activityShortDur"
        android:fromAlpha="0.0"
        android:interpolator="@android:anim/decelerate_interpolator"
        android:toAlpha="1.0"/>
    <translate
        android:duration="150"
        android:fromYDelta="70%"
        android:toYDelta="0"
        />
</set>
<!--anim_dialog_exit-->
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android"
     android:shareInterpolator="false">
    <alpha
        android:duration="@integer/abc_config_activityShortDur"
        android:fromAlpha="1.0"
        android:interpolator="@android:anim/decelerate_interpolator"
        android:toAlpha="0.0"/>

    <translate
        android:duration="150"
        android:fromYDelta="0"
        android:toYDelta="70%"
        />
</set>

activity_main.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
    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"
    android:gravity="center_horizontal"
    tools:context="com.loaderman.addressdialogdemo.MainActivity">

    <Button
        android:onClick="set"
        android:id="@+id/btn_set"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="风格样式设置"/>
</LinearLayout>

dialog_address.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
              android:orientation="vertical"
              android:layout_width="match_parent"
              android:layout_height="match_parent">

    <TextView
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="选择归属地样式"
        android:id="@+id/textView2"
        android:background="#cccccc"
        android:padding="8dp"
        android:textColor="@color/black"
        android:textSize="18sp"
        android:layout_gravity="center_horizontal"/>

    <ListView
        android:layout_width="match_parent"
        android:layout_height="200dp"
        android:id="@+id/lv_list"/>

</LinearLayout>

item_address.xml

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:padding="8dp">

    <ImageView
        android:id="@+id/iv_icon"
        android:layout_width="60dp"
        android:layout_height="30dp"
        android:layout_centerVertical="true"
        android:src="@drawable/shape_address_normal"/>

    <TextView
        android:id="@+id/tv_name"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_centerVertical="true"
        android:layout_marginLeft="5dp"
        android:layout_toRightOf="@+id/iv_icon"
        android:text="半透明"
        android:textColor="@color/black"
        android:textSize="18sp"
        />

    <ImageView
        android:id="@+id/iv_select"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentRight="true"
        android:layout_centerVertical="true"
        android:src="@drawable/ic_selected"
        />
</RelativeLayout>

在res/drawable下

shape_address_blue.xml shape_address_gray.xml shape_address_green.xml shape_normal_blue.xml shape_address_orange.xml只需要把下面代码需要以下color即可

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
       android:shape="rectangle">
    <!--颜色-->
    <solid android:color="@color/global_blue"/>
    <!--给矩形加圆角-->
    <corners android:radius="6dp"/>
</shape>

在res/values/colors.xml添加需求颜色值即可如

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <color name="colorPrimary">#3F51B5</color>
    <color name="colorPrimaryDark">#303F9F</color>
    <color name="colorAccent">#FF4081</color>
    <color name="red">#F00</color>
    <color name="black">#000</color>
    <color name="gray">#a000</color>
    <color name="global_blue">#459FD7</color>
    <color name="white">#fff</color>
    <color name="light_gray">#cccccc</color>
    <color name="light_green">#00ffa1</color>
</resources>

在res/values/style.xml中在resources节点下添加style

<!--归属地弹窗样式-->
<style name="AddressDialogStyle" parent="Theme.AppCompat.Dialog">
    <!--去掉标题栏-->
    <item name="android:windowNoTitle">true</item>
    <!--去掉背景-->
    <item name="android:windowBackground">@color/white</item>
    <!--设置进入退出动画-->
    <item name="android:windowAnimationStyle">@style/AddressAnimStyle</item>
</style>
<!--归属地弹窗动画-->
<style name="AddressAnimStyle">
    <item name="android:windowEnterAnimation">@anim/anim_dialog_enter</item>
    <item name="android:windowExitAnimation">@anim/anim_dialog_exit</item>
</style>

效果图:

时间: 2024-10-20 22:09:00

自定义归属地风格弹窗的相关文章

自定义JTabbedPane 标签风格

自定义JTabbedPane 标签风格 2012年03月09日 20:33:12 阅读数:2435 demo 下载地址:http://download.csdn.net/detail/jinannan888/3157261 下面简要说一下自定义这种Tab的关键点:1.     每个JComponent几乎都有其UI 委托对象类,当然JTabbedPane也不例外.我们首先继承BasicTabbedPaneUI类,这其中有我们必须要重写的一个方法,具体形式如下:       public stat

android 自定义Toast显示风格

1.创建一个自己想要显示Toast风格的XML如下代码(toast_xml.xml): [html] view plaincopyprint? <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match

自定义的加载弹窗

Android数据加载的时候,往往需要一个等待弹窗.而系统自带的弹窗样式往往和我们软件不想符合,这些记录一个,简单的自定义样式的加载等待框.(用到的所有素材我会在分享给大家) 先上效果图 1.新建自定义布局样式 loading_dialog.xml. 1 <?xml version="1.0" encoding="utf-8"?> 2 <LinearLayout xmlns:android="http://schemas.android.

使用CSS和JS自定义博客风格

使用以下css代码,具体功能已作注释 /*隐藏页面底部的 最新IT新闻 和 最新知识库文章 */ #under_post_news { display:none; } #under_post_kb { display:none; } /*修改文章title的字体等*/ .postTitle { font-size:20px; font-family:黑体; } /*不显示评论框(慎用)*/ #comment_form_container { display:none; } /*导航栏变色*/ #

eclipse格式化自定义代码样式风格

shift+ctrl+f是格式化当前代码样式 格式化整个项目,右健--soruce-formatter 若要设置class,method中的第一个"{",在类名,方法名的同一行,要以在: windows->prrferences->java->code style->formatter->edit->braces中,全部设置为sameline.若要在新  一行显示,则设置为next line. 设置『Formatter』:Eclipse内置的模板不能

ToastCustom【自定义显示风格的Toast】

版权声明:本文为博主原创文章,未经博主允许不得转载. 前言 基于系统Toast的自定义显示风格的Toast. 效果图 代码分析 ToastCustom类基于系统Toast,不是继承Toast,只是通过toast.setView(view)方法引用自定义的显示风格布局文件,达到自定义显示风格的目的. 为了和Toast用法保持一致,ToastCustom类中也使用了makeText.show.setGravity.setText方法.方便在项目中直接替换Toast. 下面分析下ToastCustom

Github项目解析(十一)--&gt;一个简单,强大的自定义广告活动弹窗

转载请标明出处:一片枫叶的专栏 上一篇文章中讲解了我最近写的一个快速集成二维码扫描库,其核心的实现扫描的功能,是通过调用ZXing库实现的.由于在实现二维码扫描功能的时候发现集成二维码扫描功能并不是特别方便,于是有了将其制作成标准库的想法,这个二维码库能够快速,方便的集成二维码扫描功能,项目地址是在:android-zxingLibrary**,在项目开源后有不少同学提出了许多不错的意见,目前也在不断的迭代中,自己也学到了很多. 本文我们将讲解一个简单,强大的广告活动弹窗控件.不少App在打开的

angularjs 自定义弹窗指令

由于angularjs 项目中频繁使用弹窗,完全自行编写耗时耗力,所以结合ui-boostrap 中的modal 模块来实现功能 创建一个公共弹窗服务,在使用的组件中依赖注入后调用弹窗方法 在最外层组件(其余组件的父组件)注入弹窗服务,并定义调用弹窗的方法:其余组件require 此父组件,调用父组件中的方法 自定义一个弹窗指令,设置仅属性调用(restrict: 'A'),在主模块注入后,即可全局调用 经过一步步实践和优化后,尽量减少中间环节,最终确认使用自定义指令来实现弹窗功能. js 及c

手机卫士07_自定义吐司_桌面小火箭_短信备份_接口和回调_应用程序信息,

1,自定义吐司显示风格 ①创建一个布局文件(代码注册的View看不出效果,所以还是定义布局文件比较好) 这里的背景是.9图片会根据包裹内容来拉伸 ②在显示自定义吐司的界面,显示的吐司通过View.inflate()创建 ③在设置中心增加一条修改归属地显示风格. {"半透明","活力橙","卫士蓝","金属灰","苹果绿"}; 点击之后弹出一个单选对话框. builder.setSingleChoiceIte