啥叫,上来就是干!不多说,直接上图:
第一步:创建Dialog类
public class LoginDialog {
private Dialog dialog;
public LoginDialog(Context context){
dialog = new Dialog(context,R.style.MyDialog);
dialog.setContentView(R.layout.activity_main);
dialog.findViewById(R.id.dialog_button_cancel).setOnClickListener(new OnClickListener(){
@Override
public void onClick(View arg0) {
dialog.dismiss();
}
});
}
public void dismiss() {
dialog.dismiss();
}
public void show() {
dialog.show();
}
public void setOk( View.OnClickListener listener) {
dialog.findViewById(R.id.dialog_button_ok).setOnClickListener(listener);
}
}
在上面的类当中,我们发现了未知的R.style.MyDialog和R.layout.activity_main !
那么,第二步:创建 /res/values/style_layout.xml
<?xml version="1.0" encoding="utf-8"?>
<resources xmlns:android="http://schemas.android.com/apk/res/android">
<style name="dialog_login_title_tv">
<item name="android:layout_width">wrap_content</item>
<item name="android:layout_height">wrap_content</item>
<item name="android:textColor">?attr/textcolor_category_recorded_gv_tv</item>
<item name="android:textSize">@dimen/size_19dp</item>
<item name="android:gravity">center_vertical</item>
</style>
<style name="dialog_login_prompt_tv">
<item name="android:layout_width">wrap_content</item>
<item name="android:layout_height">wrap_content</item>
<item name="android:textColor">?attr/textColor_category_recorded</item>
<item name="android:textSize">@dimen/size_17dp</item>
<item name="android:gravity">center_vertical</item>
</style>
<style name="dialog_login_btn_tv">
<item name="android:layout_width">wrap_content</item>
<item name="android:layout_height">fill_parent</item>
<item name="android:textColor">?attr/dialog_login_btn</item>
<item name="android:textSize">@dimen/size_17dp</item>
<item name="android:gravity">center</item>
<item name="android:layout_gravity">center</item>
</style>
<style name="MyDialog" parent="android:Theme.Dialog">
<item name="android:windowFrame">@null</item>
<item name="android:windowNoTitle">true</item>
<item name="android:windowBackground">@drawable/dialog_login_shape</item>
<item name="android:windowIsFloating">true</item>
<item name="android:windowContentOverlay">@null</item>
</style>
</resources>
接下来,就先来聊聊上面代码中,出现的未知的代码:?attr/dialog_login_btn 、 ?attr/textColor_category_recorded 和 ?attr/textcolor_category_recorded_gv_tv:
第三步:创建 /res/values/attrs.xml:
<?xml version="1.0" encoding="utf-8"?>
<resources>
<attr name="textcolor_category_recorded_gv_tv" format="reference|color"/>
<attr name="textColor_category_recorded" format="reference|color"></attr>
<attr name="dialog_login_btn" format="reference|color" />
</resources>
因为是在style_layout.xml文件中配置的样式,因此还得在/res/values/style.xml文件中:
<style name="BrowsrThemeDefault" parent="@android:style/Theme.NoTitleBar">
<item name="textcolor_category_recorded_gv_tv">#333333</item>
<item name="textColor_category_recorded">#666666</item>
<item name="dialog_login_btn">#17afe6</item>
</style>
这里的样式名称:BrowsrThemeDefault是我在清单文件中使用的样式;因此这些代码取决于我使用的是什么样式,并放在其中。
<application
android:allowBackup="true"
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme="@style/BrowsrThemeDefault" >
第四步:继续和大家说说activity_main.xml:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="@dimen/size_300dp" android:layout_height="@dimen/size_170dp" android:background="@drawable/dialog_login_shape" android:orientation="vertical">
<LinearLayout android:layout_width="fill_parent" android:layout_height="80dp" android:orientation="vertical">
<TextView style="@style/dialog_login_title_tv" android:layout_gravity="center" android:layout_marginTop="12dp" android:gravity="center" android:text="温馨提示"/>
<TextView style="@style/dialog_login_prompt_tv" android:layout_gravity="center" android:layout_marginTop="@dimen/size_17dp" android:gravity="center" android:text="此功能需要您先登录之后才能使用哦!"/>
</LinearLayout>
<View android:layout_width="fill_parent" android:layout_height="1dp" android:background="@color/color_bc" android:layout_marginTop="12dp"/>
<LinearLayout android:layout_width="fill_parent" android:layout_height="fill_parent" android:orientation="horizontal" android:weightSum="2">
<TextView android:id="@+id/dialog_button_cancel" style="@style/dialog_login_btn_tv" android:layout_weight="1" android:text="@string/login_dialog_cancel_tv"/>
<View android:layout_width="1dp" android:layout_height="fill_parent" android:background="@color/color_bc"/>
<TextView android:id="@+id/dialog_button_ok" style="@style/dialog_login_btn_tv" android:layout_weight="1" android:text="@string/login_dialog_confirm_tv" />
</LinearLayout>
</LinearLayout>
继续,解析activity_main.xml布局文件:
1.引用了 android:background=”@drawable/dialog_login_shape”
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android" >
<corners android:radius="5dp"/>
<solid android:color="@color/color_ff"/>
</shape>
2.引用了 style=”@style/dialog_login_title_tv” 和 style=”@style/dialog_login_prompt_tv” 和 style=”@style/dialog_login_btn_tv”,这些样式都在style_layout.xml中已经定义好了.
3.引用了 colors.xml
<?xml version="1.0" encoding="utf-8"?>
<resources>
<color name="color_ff">#ffffff</color>
<color name="color_bc">#bcbcbc</color>
</resources>
4.引用了dimens.xml
<resources>
<!-- Default screen margins, per the Android Design guidelines. -->
<dimen name="activity_horizontal_margin">16dp</dimen>
<dimen name="activity_vertical_margin">16dp</dimen>
<dimen name="size_15dp">15dp</dimen>
<dimen name="size_17dp">17dp</dimen>
<dimen name="size_19dp">19dp</dimen>
<dimen name="size_100dp">100dp</dimen>
<dimen name="size_170dp">170dp</dimen>
<dimen name="size_300dp">300dp</dimen>
</resources>
5.引用了strings.xml
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="app_name">Dialog</string>
<string name="action_settings">Settings</string>
<string name="hello_world">Hello world!</string>
<string name="login_dialog_cancel_tv">稍后再说</string>
<string name="login_dialog_confirm_tv">立马登录</string>
</resources>
第五步:最后的使用:
LoginDialog loginDialog = new LoginDialog(MainActivity.this);
loginDialog.show();
详情请看:https://github.com/ZaneLove/LoginProgressDialog