在学着写安卓程序的登录验证的时候,学着知乎等一大票软件用自定义的对话框进行登录验证。
在试着写的时候,也废了一些功夫去翻阅网上各种资料,有很多都是直接把自己的代码丢在博客上,这里说一下自己学习之后的思路。
首先是思路。我们要在一个Activity中显示一个插件,这个插件有两部分构成,一部分是画面,一部分是背后的逻辑。
首先是在Activity中
_Dialog _dialog = new _Dialog(CurrentActivity.this);
//注意,这里不能用getApplicaitonContext(),在另一篇博文中有具体讲
_dialog.show();
在XML中,有style和layout两个部分的内容
<style name="login_dialog" parent="@android:style/Theme.Dialog">
<!-- 这个配合登录时的dialog用 -->
<item name="android:windowFrame">@null</item>
<item name="android:windowIsFloating">true</item>
<item name="android:windowIsTranslucent">false</item>
<item name="android:backgroundDimEnabled">true</item>
</style>
这个layout名 login.xml,写的不是很好,勉强看
<?xml version="1.0" encoding="utf-8"?>
<AbsoluteLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:orientation="vertical" >
<TextView
android:id="@+id/login_error"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="20dip"
android:layout_marginRight="20dip"
android:gravity="left"
android:text="输入的账号和密码不正确"
android:textAppearance="?android:attr/textAppearanceMedium"
android:textColor="#ff0000"
android:visibility="invisible" />
<TextView
android:id="@+id/username"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="20dip"
android:layout_marginRight="20dip"
android:gravity="left"
android:text="账号"
android:textAppearance="?android:attr/textAppearanceMedium"
android:layout_x="1dp"
android:layout_y="30dp" />
<EditText
android:id="@+id/txt_username"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_marginLeft="20dip"
android:layout_marginRight="20dip"
android:autoText="false"
android:capitalize="none"
android:gravity="fill_horizontal"
android:textAppearance="?android:attr/textAppearanceMedium"
android:layout_below="@+id/login_error"
android:layout_alignStart="@+id/login_error"
android:layout_x="1dp"
android:layout_y="68dp" />
<TextView
android:id="@+id/password"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="20dip"
android:layout_marginRight="20dip"
android:gravity="left"
android:text="密码"
android:textAppearance="?android:attr/textAppearanceMedium"
android:layout_x="1dp"
android:layout_y="113dp" />
<EditText
android:id="@+id/txt_password"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_marginLeft="20dip"
android:layout_marginRight="20dip"
android:inputType="textPassword"
android:autoText="false"
android:capitalize="none"
android:gravity="fill_horizontal"
android:textAppearance="?android:attr/textAppearanceMedium"
android:layout_alignParentBottom="true"
android:layout_alignStart="@+id/login_error"
android:layout_marginBottom="47dp"
android:layout_x="1dp"
android:layout_y="157dp" />
<Button
android:id="@+id/login_sure"
android:text="确定"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@+id/txt_password"
android:layout_alignStart="@+id/txt_username"
android:layout_marginTop="101dp"
android:layout_x="88dp"
android:layout_y="200dp" />
<Button
android:id="@+id/login_cancel"
android:text="取消"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="right"
android:layout_alignTop="@+id/login_sure"
android:layout_alignEnd="@+id/txt_password"
android:layout_x="233dp"
android:layout_y="200dp" />
<!--<TextView-->
<!--android:id="@+id/txt_toregister"-->
<!--android:layout_width="wrap_content"-->
<!--android:layout_height="wrap_content"-->
<!--android:layout_marginLeft="20dip"-->
<!--android:layout_marginRight="20dip"-->
<!--android:gravity="left"-->
<!--android:textAppearance="?android:attr/textAppearanceMedium"-->
<!--android:textColor="#2200C1" />-->
</AbsoluteLayout>
在 _Dialog 类中(自定义的Dialog)
//在_Dialog的构造方法中,为几个变量赋值
public _Dialog(Context context) {
super(context);
dialog = new Dialog(context, R.style.login_dialog);
dialog.setContentView(R.layout.login);
positiveButton = (Button) dialog.findViewById(R.id.login_sure);
negativeButton = (Button) dialog.findViewById(R.id.login_cancel);
}
//其余的部分不再赘述,多半是一些与处理数据的逻辑相关的内容