Reputation: 4049
Not sure how well that title describes what I am hoping to do but here goes. Basically I have an app that pragmatically creates a list of buttons which when clicked then return a description.
I created the following class
public class DynamicOnClickListener implements OnClickListener
{
String description;
public DynamicOnClickListener(String adesc) {
//sets the description attribute at instantiation
this.description = adesc;
}
public void onClick(View v) {
//on button click returns dialog box with description in it
Log.v("DynamicOnClickListener","1");
AlertDialog.Builder builder = new AlertDialog.Builder(v.getContext());
builder.setMessage(description);
builder.setCancelable(false);
builder.setPositiveButton("Ok", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int id)
{
dialog.cancel();
}
});
AlertDialog alert = builder.create();
alert.show();
}
}
This works perfectly as is, however I would very much like to jazz up the dialog box somewhat. I have been looking at some examples online and according to the android docs they suggest defining a custom xml layout and using LayourInflator set the custom xml as the view for the dialog. (Well thats how I understood it anyway, probably wrongly right enough)
Although the docs example is slightly different from mine, according to their example I should add the following lines
// Get the layout inflater
LayoutInflater inflater = getActivity().getLayoutInflater();
// Inflate and set the layout for the dialog
// Pass null as the parent view because its going in the dialog layout
builder.setView(inflater.inflate(R.layout.dialog_signin, null))
However when I add this to my class, resulting in the following I get an error on getActivity()
public class DynamicOnClickListener implements OnClickListener
{
String description;
public DynamicOnClickListener(String adesc) {
//sets the description attribute at instantiation
this.description = adesc;
}
public void onClick(View v) {
//on button click returns dialog box with program description in it
Log.v("DynamicOnClickListener","1");
AlertDialog.Builder builder = new AlertDialog.Builder(v.getContext());
// Get the layout inflater
LayoutInflater inflater = getActivity().getLayoutInflater();
// Inflate and set the layout for the dialog
// Pass null as the parent view because its going in the dialog layout
builder.setView(inflater.inflate(R.layout.description_dialog, null));
builder.setMessage(description);
builder.setCancelable(false);
builder.setPositiveButton("Ok", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int id)
{
dialog.cancel();
}
});
AlertDialog alert = builder.create();
alert.show();
}
}
Upvotes: 1
Views: 3675
Reputation: 31
According to CoderDecoder and kleopatra's answers here is the updated version with a shape.
final Dialog dialog = new Dialog(this);
dialog.requestWindowFeature(Window.FEATURE_NO_TITLE);
dialog.getWindow().setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT));
GradientDrawable shape = new GradientDrawable();
shape.setColor(getResources().getColor(R.color.shape_client_textview_background_color));
shape.setStroke(10, getResources().getColor(R.color.shape_client_textview_border_color));
shape.setCornerRadius(50);
LinearLayout.LayoutParams layoutParams = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.MATCH_PARENT);
LinearLayout popUp = new LinearLayout(this);
// popUp.setBackgroundColor(Color.LTGRAY);
layoutParams.setMargins(20,20,20,20);
popUp.setOrientation(LinearLayout.VERTICAL);
popUp.setLayoutParams(layoutParams);
popUp.setBackground(shape);
popUp.setPadding(20,20,20,20);
EditText t1 = new EditText(this);
t1.setHint("Enter Your Email ID ");
t1.setTextColor(Color.parseColor("#FFFFFF"));
t1.setInputType(InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_VARIATION_EMAIL_ADDRESS);
LinearLayout btnLayout = new LinearLayout(this);
// btnLayout.setBackgroundColor(Color.LTGRAY);
btnLayout.setOrientation(LinearLayout.HORIZONTAL);
btnLayout.setGravity(Gravity.CENTER);
Button send = new Button(this);
send.setText("Send");
send.setTextColor(Color.WHITE);
Button cancel = new Button(this);
cancel.setText("Cancel");
cancel.setTextColor(Color.WHITE);
btnLayout.addView(send);
btnLayout.addView(cancel);
popUp.addView(t1);
popUp.addView(btnLayout);
dialog.setContentView(popUp);
cancel.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
dialog.dismiss();
}
});
dialog.show();
Here is the result:
Upvotes: 1
Reputation: 445
I did the dialogue box with an EditText to enter email and a button to send the data and to cancel it.. This dialogue box is shown by making the background dim. And displaying it on top of the current activity.
final Dialog dialog = new Dialog(this);
dialog.requestWindowFeature(Window.FEATURE_NO_TITLE);
LinearLayout popUp = new LinearLayout(this);
popUp.setBackgroundColor(Color.LTGRAY);
popUp.setOrientation(1);
EditText t1 = new EditText(this);
t1.setHint("Enter Your Email ID ");
t1.setTextColor(Color.parseColor("#FFFFFF"));
t1.setInputType(InputType.TYPE_CLASS_TEXT|InputType.TYPE_TEXT_VARIATION_EMAIL_ADDRESS);
LinearLayout btnLayout = new LinearLayout(this);
btnLayout.setBackgroundColor(Color.LTGRAY);
btnLayout.setOrientation(0);
btnLayout.setGravity(Gravity.CENTER);
Button send = new Button(this);
send.setText("Send");
send.setTextColor(Color.WHITE);
Button cancel = new Button(this);
cancel.setText("Cancel");
cancel.setTextColor(Color.WHITE);
btnLayout.addView(send);
btnLayout.addView(cancel);
popUp.addView(t1);
popUp.addView(btnLayout);
dialog.setContentView(popUp);
cancel.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
dialog.dismiss();
}
});
dialog.show();
Upvotes: 3
Reputation: 11359
final Context mContext = v.getContext()
inflater = (LayoutInflater) mContext
.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
builder.setView(inflater.inflate(R.layout.description_dialog, null));
Try this.
Upvotes: 2