উত্তর:
সতর্কতা ডায়ালগ ব্যবহার করার জন্য ভাল সুযোগের মতো মনে হচ্ছে ।
যতটা বেসিক বলে মনে হচ্ছে এটি করার জন্য অ্যান্ড্রয়েডের অন্তর্নির্মিত ডায়ালগ নেই (যতদূর আমি জানি)। ভাগ্যক্রমে, এটি একটি স্ট্যান্ডার্ড অ্যালার্টডায়ালগ তৈরির শীর্ষে কেবলমাত্র কিছু অতিরিক্ত কাজ। ডেটা ইনপুট করার জন্য আপনাকে কেবল এডিটেক্সট তৈরি করতে হবে এবং এটিকে সতর্কতা ডায়ালগের মতামত হিসাবে সেট করতে হবে। আপনার প্রয়োজন হলে সেটআপ ইনপুট টাইপ ব্যবহারের জন্য অনুমোদিত ধরণের ইনপুটটি কাস্টমাইজ করতে পারেন ।
আপনি যদি কোনও সদস্য ভেরিয়েবল ব্যবহার করতে সক্ষম হন তবে আপনি সহজেই পরিবর্তনটিকে এডিট টেক্সটের মানতে সেট করতে পারেন এবং ডায়ালগটি বরখাস্ত করার পরে এটি অবিরত থাকবে। আপনি যদি সদস্যের পরিবর্তনশীল ব্যবহার করতে না পারেন তবে স্ট্রিংয়ের মানটি সঠিক জায়গায় প্রেরণের জন্য আপনাকে শ্রোতা ব্যবহার করতে হবে। (যদি আপনার এটির প্রয়োজন হয় তবে আমি আরও সম্পাদনা করতে ও বিস্তৃত করতে পারি)।
আপনার শ্রেণীর মধ্যে:
private String m_Text = "";
আপনার বোতামের অনক্লিকলিস্টারের মধ্যে (বা সেখান থেকে ডাকা কোনও ফাংশনে):
AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.setTitle("Title");
// Set up the input
final EditText input = new EditText(this);
// Specify the type of input expected; this, for example, sets the input as a password, and will mask the text
input.setInputType(InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_VARIATION_PASSWORD);
builder.setView(input);
// Set up the buttons
builder.setPositiveButton("OK", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
m_Text = input.getText().toString();
}
});
builder.setNegativeButton("Cancel", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
dialog.cancel();
}
});
builder.show();
global Context, Context cont;
পরে ঘোষণা করতে হবে এবং এরপরে সতর্কতা সংস্থায় "এটি" প্রতিস্থাপন করুন cont
। AlertDialog.Builder builder = new AlertDialog.Builder (cont); চূড়ান্ত এডিটেক্সট ইনপুট = নতুন এডিট টেক্সট (বিরাম);
আমি @ অ্যারন এর উত্তরে এমন একটি পদ্ধতির সাথে যুক্ত করব যা আপনাকে ডায়ালগ বক্সকে আরও ভাল উপায়ে স্টাইল করার সুযোগ দেয়। এখানে একটি সমন্বিত উদাহরণ রয়েছে:
AlertDialog.Builder builder = new AlertDialog.Builder(getContext());
builder.setTitle("Title");
// I'm using fragment here so I'm using getView() to provide ViewGroup
// but you can provide here any other instance of ViewGroup from your Fragment / Activity
View viewInflated = LayoutInflater.from(getContext()).inflate(R.layout.text_inpu_password, (ViewGroup) getView(), false);
// Set up the input
final EditText input = (EditText) viewInflated.findViewById(R.id.input);
// Specify the type of input expected; this, for example, sets the input as a password, and will mask the text
builder.setView(viewInflated);
// Set up the buttons
builder.setPositiveButton(android.R.string.ok, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
dialog.dismiss();
m_Text = input.getText().toString();
}
});
builder.setNegativeButton(android.R.string.cancel, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
dialog.cancel();
}
});
builder.show();
এডিট টেক্সট ডায়ালগ তৈরি করতে ব্যবহৃত উদাহরণ লেআউটটি এখানে রয়েছে:
<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:padding="@dimen/content_padding_normal">
<android.support.design.widget.TextInputLayout
android:layout_width="match_parent"
android:layout_height="wrap_content">
<AutoCompleteTextView
android:id="@+id/input"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="@string/hint_password"
android:imeOptions="actionDone"
android:inputType="textPassword" />
</android.support.design.widget.TextInputLayout>
</FrameLayout>
চূড়ান্ত ফলাফল:
getView()
করেছি findViewById(android.R.id.content)
এবং এটি সমস্ত মনোযোগের মতো কাজ করেছে worked ভাগ করে নেওয়ার জন্য অনেক ধন্যবাদ :)
(ViewGroup)
!
@dimen/content_padding_normal
?
কিভাবে এই উদাহরণ ? এটা সোজা মনে হচ্ছে।
final EditText txtUrl = new EditText(this);
// Set the default text to a link of the Queen
txtUrl.setHint("http://www.librarising.com/astrology/celebs/images2/QR/queenelizabethii.jpg");
new AlertDialog.Builder(this)
.setTitle("Moustachify Link")
.setMessage("Paste in the link of an image to moustachify!")
.setView(txtUrl)
.setPositiveButton("Moustachify", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int whichButton) {
String url = txtUrl.getText().toString();
moustachify(null, url);
}
})
.setNegativeButton("Cancel", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int whichButton) {
}
})
.show();
তোমার দিকে কিছু জায়গা চান left
এবং right
এর input
দৃশ্য, তোমার মত কিছু প্যাডিং যোগ করতে পারেন
private fun showAlertWithTextInputLayout(context: Context) {
val textInputLayout = TextInputLayout(context)
textInputLayout.setPadding(
resources.getDimensionPixelOffset(R.dimen.dp_19), // if you look at android alert_dialog.xml, you will see the message textview have margin 14dp and padding 5dp. This is the reason why I use 19 here
0,
resources.getDimensionPixelOffset(R.dimen.dp_19),
0
)
val input = EditText(context)
textInputLayout.hint = "Email"
textInputLayout.addView(input)
val alert = AlertDialog.Builder(context)
.setTitle("Reset Password")
.setView(textInputLayout)
.setMessage("Please enter your email address")
.setPositiveButton("Submit") { dialog, _ ->
// do some thing with input.text
dialog.cancel()
}
.setNegativeButton("Cancel") { dialog, _ ->
dialog.cancel()
}.create()
alert.show()
}
dimens.xml
<dimen name="dp_19">19dp</dimen>
আশা করি এটি সাহায্য করবে
resources
?
আমি এটি আরও ক্লিনার এবং AlertDialog.Builder
একটি কাস্টম সংলাপ ক্লাস তৈরি করতে প্রসারিত করতে পুনরায় ব্যবহারযোগ্য বলে মনে করেছি । এটি এমন একটি কথোপকথনের জন্য যা ব্যবহারকারীকে একটি ফোন নম্বর ইনপুট করতে বলে। কল setNumber()
করার আগে কল করে একটি প্রিসেট ফোন নম্বর সরবরাহ করা যেতে পারে show()
।
InputSenderDialog.java
public class InputSenderDialog extends AlertDialog.Builder {
public interface InputSenderDialogListener{
public abstract void onOK(String number);
public abstract void onCancel(String number);
}
private EditText mNumberEdit;
public InputSenderDialog(Activity activity, final InputSenderDialogListener listener) {
super( new ContextThemeWrapper(activity, R.style.AppTheme) );
@SuppressLint("InflateParams") // It's OK to use NULL in an AlertDialog it seems...
View dialogLayout = LayoutInflater.from(activity).inflate(R.layout.dialog_input_sender_number, null);
setView(dialogLayout);
mNumberEdit = dialogLayout.findViewById(R.id.numberEdit);
setPositiveButton("OK", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int id) {
if( listener != null )
listener.onOK(String.valueOf(mNumberEdit.getText()));
}
});
setNegativeButton("Cancel", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int id) {
if( listener != null )
listener.onCancel(String.valueOf(mNumberEdit.getText()));
}
});
}
public InputSenderDialog setNumber(String number){
mNumberEdit.setText( number );
return this;
}
@Override
public AlertDialog show() {
AlertDialog dialog = super.show();
Window window = dialog.getWindow();
if( window != null )
window.setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_VISIBLE);
return dialog;
}
}
dialog_input_sender_number.xml
<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:padding="10dp">
<TextView
android:id="@+id/title"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintLeft_toLeftOf="parent"
android:paddingBottom="20dp"
android:text="Input phone number"
android:textAppearance="@style/TextAppearance.AppCompat.Large" />
<TextView
android:id="@+id/numberLabel"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
app:layout_constraintTop_toBottomOf="@+id/title"
app:layout_constraintLeft_toLeftOf="parent"
android:text="Phone number" />
<EditText
android:id="@+id/numberEdit"
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:layout_constraintTop_toBottomOf="@+id/numberLabel"
app:layout_constraintLeft_toLeftOf="parent"
android:inputType="phone" >
<requestFocus />
</EditText>
</android.support.constraint.ConstraintLayout>
ব্যবহার:
new InputSenderDialog(getActivity(), new InputSenderDialog.InputSenderDialogListener() {
@Override
public void onOK(final String number) {
Log.d(TAG, "The user tapped OK, number is "+number);
}
@Override
public void onCancel(String number) {
Log.d(TAG, "The user tapped Cancel, number is "+number);
}
}).setNumber(someNumberVariable).show();
@ লুকে টেলর: আমার কাছে বর্তমানে একই কাজ রয়েছে (একটি পপআপ / ডায়ালগ তৈরি করা হচ্ছে যাতে একটি সম্পাদনা পাঠ রয়েছে) ..
ব্যক্তিগতভাবে, আমি সৃজনশীলতার দিক থেকে সম্পূর্ণ গতিশীল রুটটি কিছুটা সীমাবদ্ধ দেখতে পেয়েছি।
সম্পূর্ণ কাস্টম ডায়ালগ
লেআউট: ডায়ালগ তৈরির জন্য কোডের
উপর সম্পূর্ণ নির্ভরতার পরিবর্তে আপনি এটিকে সম্পূর্ণরূপে কাস্টমাইজ করতে পারেন:
1) - একটি নতুন Layout Resource
ফাইল তৈরি করুন .. এটি সম্পূর্ণ সৃজনশীল স্বাধীনতার অনুমতি দিয়ে আপনার ডায়ালগ হিসাবে কাজ করবে!
দ্রষ্টব্য: জিনিসগুলি পরিষ্কার এবং বিন্দুতে রাখতে সহায়তার জন্য মেটালিয়াল ডিজাইনের নির্দেশিকা দেখুন।
2) - আপনার সমস্ত View
উপাদানগুলিকে আইডি দিন .. নীচে আমার উদাহরণ কোডে আমার কাছে 1 EditText
এবং 2 আছে Buttons
।
3) - একটি তৈরি করুনActivity
দিয়ে একটিButton
, পরীক্ষার উদ্দেশ্যে .. আমাদের এটি সংলাপ এবং আপনার ডায়ালগ চালু করতে হবে!
public void buttonClick_DialogTest(View view) {
AlertDialog.Builder mBuilder = new AlertDialog.Builder(MainActivity.this);
// Inflate the Layout Resource file you created in Step 1
View mView = getLayoutInflater().inflate(R.layout.timer_dialog_layout, null);
// Get View elements from Layout file. Be sure to include inflated view name (mView)
final EditText mTimerMinutes = (EditText) mView.findViewById(R.id.etTimerValue);
Button mTimerOk = (Button) mView.findViewById(R.id.btnTimerOk);
Button mTimerCancel = (Button) mView.findViewById(R.id.btnTimerCancel);
// Create the AlertDialog using everything we needed from above
mBuilder.setView(mView);
final AlertDialog timerDialog = mBuilder.create();
// Set Listener for the OK Button
mTimerOk.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick (View view) {
if (!mTimerMinutes.getText().toString().isEmpty()) {
Toast.makeText(MainActivity.this, "You entered a Value!,", Toast.LENGTH_LONG).show();
} else {
Toast.makeText(MainActivity.this, "Please enter a Value!", Toast.LENGTH_LONG).show();
}
}
});
// Set Listener for the CANCEL Button
mTimerCancel.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick (View view) {
timerDialog.dismiss();
}
});
// Finally, SHOW your Dialog!
timerDialog.show();
// END OF buttonClick_DialogTest
}
খুবই সহজ! সম্পূর্ণ সৃজনশীল স্বাধীনতা! কেবলমাত্র উপাদান নির্দেশিকা অনুসরণ করতে ভুলবেন না;)
আমি আশা করি এটি কারও সহায়তা করে! আমাকে জানতে দিন বন্ধুরা কি ভাবছে!
এটা আমার জন্য কাজ
private void showForgotDialog(Context c) {
final EditText taskEditText = new EditText(c);
AlertDialog dialog = new AlertDialog.Builder(c)
.setTitle("Forgot Password")
.setMessage("Enter your mobile number?")
.setView(taskEditText)
.setPositiveButton("Reset", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
String task = String.valueOf(taskEditText.getText());
}
})
.setNegativeButton("Cancel", null)
.create();
dialog.show();
}
কিভাবে ফোন করবেন? (বর্তমান ক্রিয়াকলাপের নাম)
showForgotDialog (current_activity_name.this);