主要实现过程就是自定义一个layout布局文件,然后通过LayoutInflater将自定义的布局文件填充进自定义的dialog里。
1.layout布局
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerHorizontal="true"
android:text="修改URL或Port"
android:textSize="30sp" />
<EditText
android:id="@+id/changeUrl"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="80dp"
android:hint="修改url" />
<EditText
android:id="@+id/changePort"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_below="@+id/changeUrl"
android:hint="修改port" />
<Button
android:id="@+id/ok"
android:layout_width="80dp"
android:layout_height="wrap_content"
android:layout_below="@id/changePort"
android:layout_marginLeft="100dp"
android:text="确定" />
<Button
android:id="@+id/cancel"
android:layout_width="80dp"
android:layout_height="wrap_content"
android:layout_below="@id/changePort"
android:layout_marginLeft="350dp"
android:text="取消" />
</RelativeLayout>
2.自定义的dialog代码
//自定义AlertDialog弹窗修改url和port
private void change() {
AlertDialog.Builder builder = new AlertDialog.Builder(this);
View contentView = LayoutInflater.from(this).inflate(R.layout.dialog, null);
final AlertDialog myDialog = builder.create();
myDialog.setView(contentView);
myDialog.show();
myDialog.setTitle("修改");
//是否可取消对话框显示
myDialog.setCanceledOnTouchOutside(true);
//通过contentView来找到自定义的控件
final EditText changeUrl = contentView.findViewById(R.id.changeUrl);
final EditText changePort = contentView.findViewById(R.id.changePort);
Button ok = contentView.findViewById(R.id.ok);
Button cancel = contentView.findViewById(R.id.cancel);
changeUrl.setText(url);
changePort.setText(port);
//点击确定按钮后执行的逻辑
ok.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
url = changeUrl.getText().toString();
port = changePort.getText().toString();
if (url.equals("") && port.equals("")) {
Toast.makeText(MainActivity.this, "输入不能为空", Toast.LENGTH_SHORT).show();
} else {
Toast.makeText(MainActivity.this, "url修改为了 " + url + " port修改为了 " + port, Toast.LENGTH_SHORT).show();
//数据持久化
preferences.edit().putString("url", url).putString("port", port).apply();
//修改完ip或port后断开原tcp,开启新tcp
myTcpClient.close();
myTcpClient = new My_TCPClient(url, Integer.parseInt(port), listener);
myTcpClient.start();
myTcpClient.send("<line>1</line>");
}
myDialog.dismiss();
}
});
//点击取消按钮后的逻辑,直接dismiss对话框
cancel.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
myDialog.dismiss();
}
});
}