เมื่อฉันใช้Toast
เพื่อแสดงข้อความป๊อปอัพบางอย่างบนหน้าจอมันจะแสดงข้อความเล็กน้อยเหนือด้านล่างของหน้าจอซึ่งเป็นตำแหน่งเริ่มต้น
ตอนนี้ฉันต้องการแสดงในหน้าจอตรงกลางหรือบางแห่งตามที่ฉันเลือก
ใครช่วยแนะนำฉันให้บรรลุถึงสิ่งนี้ได้บ้าง
เมื่อฉันใช้Toast
เพื่อแสดงข้อความป๊อปอัพบางอย่างบนหน้าจอมันจะแสดงข้อความเล็กน้อยเหนือด้านล่างของหน้าจอซึ่งเป็นตำแหน่งเริ่มต้น
ตอนนี้ฉันต้องการแสดงในหน้าจอตรงกลางหรือบางแห่งตามที่ฉันเลือก
ใครช่วยแนะนำฉันให้บรรลุถึงสิ่งนี้ได้บ้าง
คำตอบ:
จากเอกสาร ,
วางตำแหน่งขนมปังปิ้งของคุณ
การแจ้งเตือนมาตรฐานของขนมปังจะปรากฏขึ้นใกล้กับด้านล่างของหน้าจอโดยมีศูนย์กลางอยู่ในแนวนอน คุณสามารถเปลี่ยนตำแหน่งนี้ด้วย
setGravity(int, int, int)
วิธีการ สิ่งนี้ยอมรับพารามิเตอร์สามตัว:Gravity
ค่าคงที่x-position
ค่าชดเชยและy-position
ค่าชดเชยตัวอย่างเช่นหากคุณตัดสินใจว่าขนมปังควรปรากฏที่มุมบนซ้ายคุณสามารถกำหนดแรงโน้มถ่วงเช่นนี้:
toast.setGravity(Gravity.TOP|Gravity.LEFT, 0, 0);
หากคุณต้องการเลื่อนตำแหน่งไปทางขวาให้เพิ่มค่าของพารามิเตอร์ที่สอง ในการเขยิบมันลงให้เพิ่มค่าของพารามิเตอร์สุดท้าย
Gravity.CENTER_VERTICAL
จะทำให้ขนมปังอยู่ตรงกลางของหน้าจอ
หากคุณได้รับข้อผิดพลาดที่ระบุว่าคุณต้องเรียกใช้ makeText รหัสต่อไปนี้จะแก้ไข:
Toast toast= Toast.makeText(getApplicationContext(),
"Your string here", Toast.LENGTH_SHORT);
toast.setGravity(Gravity.TOP|Gravity.CENTER_HORIZONTAL, 0, 0);
toast.show();
new Toast(context)
แทนที่จะเป็นToast.makeText(...)
คุณสามารถปรับแต่งตำแหน่งของขนมปังของคุณโดยใช้:
setGravity(int gravity, int xOffset, int yOffset)
สิ่งนี้ช่วยให้คุณมีความเฉพาะเจาะจงมากเกี่ยวกับตำแหน่งที่คุณต้องการให้ Toast เป็น
หนึ่งในสิ่งที่มีประโยชน์มากที่สุดเกี่ยวกับพารามิเตอร์ xOffset และ yOffset คือคุณสามารถใช้เพื่อวาง Toast ที่สัมพันธ์กับมุมมองที่แน่นอน
ตัวอย่างเช่นหากคุณต้องการสร้าง Toast แบบกำหนดเองที่ปรากฏอยู่ด้านบนของปุ่มคุณสามารถสร้างฟังก์ชันดังนี้:
// v is the Button view that you want the Toast to appear above
// and messageId is the id of your string resource for the message
private void displayToastAboveButton(View v, int messageId)
{
int xOffset = 0;
int yOffset = 0;
Rect gvr = new Rect();
View parent = (View) v.getParent();
int parentHeight = parent.getHeight();
if (v.getGlobalVisibleRect(gvr))
{
View root = v.getRootView();
int halfWidth = root.getRight() / 2;
int halfHeight = root.getBottom() / 2;
int parentCenterX = ((gvr.right - gvr.left) / 2) + gvr.left;
int parentCenterY = ((gvr.bottom - gvr.top) / 2) + gvr.top;
if (parentCenterY <= halfHeight)
{
yOffset = -(halfHeight - parentCenterY) - parentHeight;
}
else
{
yOffset = (parentCenterY - halfHeight) - parentHeight;
}
if (parentCenterX < halfWidth)
{
xOffset = -(halfWidth - parentCenterX);
}
if (parentCenterX >= halfWidth)
{
xOffset = parentCenterX - halfWidth;
}
}
Toast toast = Toast.makeText(getActivity(), messageId, Toast.LENGTH_SHORT);
toast.setGravity(Gravity.CENTER, xOffset, yOffset);
toast.show();
}
Toast toast = Toast.makeText(test.this,"bbb", Toast.LENGTH_LONG);
toast.setGravity(Gravity.CENTER, 0, 0);
toast.show();
Toast mytoast= Toast.makeText(getApplicationContext(), "Toast Message", 1);
mytoast.setGravity(Gravity.CENTER_HORIZONTAL, 0, 0); // for center horizontal
//mytoast.setGravity(Gravity.CENTER_VERTICAL); // for center vertical
//mytoast.setGravity(Gravity.TOP); // for top
mytoast.show();
โค้ดด้านบนจะช่วยให้คุณแสดงขนมปังที่อยู่ตรงกลางของหน้าจอหรือตามทางเลือกของคุณสำหรับการตั้งค่าแรงโน้มถ่วงของขนมปังตามที่คุณต้องการ
หมายเหตุ: สำหรับกระบวนการนี้คุณต้องใช้ object ของ Toast
วิธีการเปลี่ยนสีตำแหน่งและสีพื้นหลังของขนมปังคือ:
Toast toast=Toast.makeText(getApplicationContext(),"This is advanced toast",Toast.LENGTH_LONG);
toast.setGravity(Gravity.BOTTOM | Gravity.RIGHT,0,0);
View view=toast.getView();
TextView view1=(TextView)view.findViewById(android.R.id.message);
view1.setTextColor(Color.YELLOW);
view.setBackgroundResource(R.color.colorPrimary);
toast.show();
สำหรับคำอธิบายทีละบรรทัด: https://www.youtube.com/watch?v=5bzhGd1HZOc
การตั้งค่าขนมปังที่หน้าจอด้านบน
toast.setView(view);
toast.setGravity(Gravity.BOTTOM , 0, 0); // here i am setting toast at bottom
toast.setDuration(Toast.LENGTH_LONG);
toast.show();
ตอนนี้ที่ด้านล่าง
toast.setView(view);
toast.setGravity(Gravity.BOTTOM , 0, 0); // here i am setting toast at bottom
toast.setDuration(Toast.LENGTH_LONG);
toast.show();
เช่นเดียวกับที่เราสามารถตั้งขนมปังปิ้งในซ้ายขวาและตรงกลาง
คลิกที่นี่
// คลาสขนมปังปิ้งแบบกำหนดเองที่คุณสามารถแสดงขนมปังแบบกำหนดเองหรือค่าเริ่มต้นตามต้องการ)
public class ToastMessage {
private Context context;
private static ToastMessage instance;
/**
* @param context
*/
private ToastMessage(Context context) {
this.context = context;
}
/**
* @param context
* @return
*/
public synchronized static ToastMessage getInstance(Context context) {
if (instance == null) {
instance = new ToastMessage(context);
}
return instance;
}
/**
* @param message
*/
public void showLongMessage(String message) {
Toast.makeText(context, message, Toast.LENGTH_SHORT).show();
}
/**
* @param message
*/
public void showSmallMessage(String message) {
Toast.makeText(context, message, Toast.LENGTH_LONG).show();
}
/**
* The Toast displayed via this method will display it for short period of time
*
* @param message
*/
public void showLongCustomToast(String message) {
LayoutInflater inflater = ((Activity) context).getLayoutInflater();
View layout = inflater.inflate(R.layout.layout_custom_toast, (ViewGroup) ((Activity) context).findViewById(R.id.ll_toast));
TextView msgTv = (TextView) layout.findViewById(R.id.tv_msg);
msgTv.setText(message);
Toast toast = new Toast(context);
toast.setGravity(Gravity.FILL_HORIZONTAL | Gravity.BOTTOM, 0, 0);
toast.setDuration(Toast.LENGTH_LONG);
toast.setView(layout);
toast.show();
}
/**
* The toast displayed by this class will display it for long period of time
*
* @param message
*/
public void showSmallCustomToast(String message) {
LayoutInflater inflater = ((Activity) context).getLayoutInflater();
View layout = inflater.inflate(R.layout.layout_custom_toast, (ViewGroup) ((Activity) context).findViewById(R.id.ll_toast));
TextView msgTv = (TextView) layout.findViewById(R.id.tv_msg);
msgTv.setText(message);
Toast toast = new Toast(context);
toast.setGravity(Gravity.FILL_HORIZONTAL | Gravity.BOTTOM, 0, 0);
toast.setDuration(Toast.LENGTH_SHORT);
toast.setView(layout);
toast.show();
}
}