Intereting Posts
Скрыть группу без дочернего элемента – ExpandableListView Как создать макет для пользовательских предпочтений, используя атрибут android: layout Как пересылать смс выбранным контактам в whatsapp из моего приложения для Android? Пользовательский экран предпочтений с кнопками SVN-подключенный проект, не отображающий информацию о версии в eclipse Fix Android (Studio) Вход Активность Шаблон сгенерированной активности Попросите кнопку выполнить OnClickListener в конце анимации пульсации (Тема материала) Visual Studio не может отлаживать приложение Android Xamarin Динамические ссылки Firebase обрабатываются дважды Как правильно внедрить linkedIn login? Как протестировать скриншоты пейджера вида в Android с помощью Espresso 2.2 Android против Linux для встроенного приложения для сенсорного экрана Java.io.IOException: чтение не выполнено, сокет может быть закрыт или таймаут, прочитать ret: -1 на Android 5.0.1 версия Lollipop Распознавание лиц с помощью JavaCV Проблема с пользовательскими обратными вызовами AsyncTaskLoader

Показывать виджет тоста под представлением

Для тех, кто раньше помогал мне в этом проекте, большое спасибо! У моего кода больше нет никаких проблем, и я сделал дополнительные настройки. Теперь, когда приложение действительно надежное, я хочу сделать еще одну вещь.

Смотрите скриншот макета здесь.

Обычно в нижней части экрана отображается тост. Я хочу, чтобы он отображался чуть ниже (8dp) кнопки «Отправить» после вызова OnClick. Как я могу это сделать.

См. Мой обновленный полный проект здесь.

package com.lookjohn.guessnumber; import java.util.Random; import android.app.Activity; import android.os.Bundle; import android.view.Menu; import android.view.View; import android.widget.Button; import android.widget.EditText; import android.widget.Toast; public class MainActivity extends Activity { Random random; Button button; EditText text; int input; int MIN, MAX; int comp; int guesses; public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); random = new Random(); button = (Button)findViewById(R.id.button1); text = (EditText)findViewById(R.id.editText1); MIN = 1; MAX = 100; comp = random.nextInt(MAX - MIN + 1) + MIN; // Generate random number between 1 and 100. guesses = 0; button.setOnClickListener(myhandler1); } View.OnClickListener myhandler1 = new View.OnClickListener() { public void onClick(View v) { // Implemented max number of guesses, detect // number of guesses and return from the method. String value = text.getText().toString(); // Get value from input from editTextView // If user submits an empty EditText, return to prevent a crash. if (value.isEmpty()) { Toast.makeText(MainActivity.this, "You must enter a guess!", Toast.LENGTH_SHORT); return; } input = Integer.parseInt(value); // Turn string into integer guesses++; if (input > 100) { Toast.makeText(MainActivity.this, "That number is greater than 100. Not Valid!", Toast.LENGTH_SHORT).show(); return; } else if (input < comp) Toast.makeText(MainActivity.this, "Your number is too small.", Toast.LENGTH_SHORT).show(); else if (input > comp) Toast.makeText(MainActivity.this, "Your number is too big.", Toast.LENGTH_SHORT).show(); else Toast.makeText(MainActivity.this, "Good job! The answer was " + comp + ".\n" + "You made " + guesses + " guesses.\n" + "Restart the app to try again.", Toast.LENGTH_LONG).show(); } }; @Override public boolean onCreateOptionsMenu(Menu menu) { // Inflate the menu; this adds items to the action bar if it is present. getMenuInflater().inflate(R.menu.main, menu); return true; } } 

Android.widget.Toast определяет кучу полезных методов, которые позволяют настраивать внешний вид сообщения тоста. Метод, который вы должны изучить, – setGravity (int, int, int) . При 0 смещениях кода ниже будет прикрепляться тост сверху до нижней части предоставленного вида и тост-центр в центр представления.

 public static void positionToast(Toast toast, View view, Window window, int offsetX, int offsetY) { // toasts are positioned relatively to decor view, views relatively to their parents, we have to gather additional data to have a common coordinate system Rect rect = new Rect(); window.getDecorView().getWindowVisibleDisplayFrame(rect); // covert anchor view absolute position to a position which is relative to decor view int[] viewLocation = new int[2]; view.getLocationInWindow(viewLocation); int viewLeft = viewLocation[0] - rect.left; int viewTop = viewLocation[1] - rect.top; // measure toast to center it relatively to the anchor view DisplayMetrics metrics = new DisplayMetrics(); window.getWindowManager().getDefaultDisplay().getMetrics(metrics); int widthMeasureSpec = MeasureSpec.makeMeasureSpec(metrics.widthPixels, MeasureSpec.UNSPECIFIED); int heightMeasureSpec = MeasureSpec.makeMeasureSpec(metrics.heightPixels, MeasureSpec.UNSPECIFIED); toast.getView().measure(widthMeasureSpec, heightMeasureSpec); int toastWidth = toast.getView().getMeasuredWidth(); // compute toast offsets int toastX = viewLeft + (view.getWidth() - toastWidth) / 2 + offsetX; int toastY = viewTop + view.getHeight() + offsetY; toast.setGravity(Gravity.LEFT | Gravity.TOP, toastX, toastY); } 

Для этого вам понадобится модифицировать связанные тосты в вашем методе onClick :

 int offsetY = getResources().getDimensionPixelSize(R.dimen.toast_offset_y); Toast toast = Toast.makeText(MainActivity.this, "That number is greater than 100. Not Valid!", Toast.LENGTH_SHORT); positionToast(toast, v, getWindow(), 0, offsetY); toast.show(); 

На ваш вопрос, как показать тост в определенной позиции, вы можете сделать это: –

 Toast toast = new Toast(); toast.setGravity(Gravity.TOP|Gravity.LEFT, 0, 0); toast.makeText(getApplicationContextt(),"Text",Toast.LENGTH_SHORT); toast.show(); 

Вы можете вносить изменения в код кода, чтобы изменить положение тоста:

  toast.setGravity(Gravity.TOP|Gravity.LEFT, 0, 0); 

Я просто хотел бы добавить к солмаксу ответ.

In positionToast:

  ... int toastHeight= toast.getView().getMeasuredHeight(); // compute toast offsets ... int toastY = viewTop + (view.getHeight() - toastHeight) / 2 + offsetY; 

В onClick:

  positionToast(toast, view, getWindow(), 0, 0); 

На мой взгляд, это похоже на тост, независимо от того, где находится точка зрения. В моем коде есть предположение, что Toast всегда будет меньше, чем вид, в котором он находится.

Из руководства разработчика вы можете разместить свой Toast, используя toast.setGravity (). Я нахожу это на http://developer.android.com/guide/topics/ui/notifiers/toasts.html

Расположение вашего тоста В нижней части экрана появляется стандартное уведомление тоста, расположенное по горизонтали. Вы можете изменить эту позицию с помощью метода setGravity (int, int, int). Он принимает три параметра: константу силы тяжести, смещение по оси x и смещение по оси y.

Например, если вы решите, что тост должен появиться в верхнем левом углу, вы можете установить гравитацию следующим образом:

Toast.setGravity (Gravity.TOP | Gravity.LEFT, 0, 0); Если вы хотите подтолкнуть позицию вправо, увеличьте значение второго параметра. Чтобы подтолкнуть его, увеличьте значение последнего параметра.

Я думаю, вы можете получить позицию своей кнопки и переслать ее указанному методу

Из того, что я узнал, это лучшее, что я придумал для программы. Это делает сообщение Toast в центре телефона.

 if(input > 100) { Toast toast = Toast.makeText(MainActivity.this, R.string.over_guess, Toast.LENGTH_SHORT); toast.setGravity(Gravity.CENTER, 0, 0); toast.show(); return; } else if(input < comp) { Toast toast = Toast.makeText(MainActivity.this, getString(R.string.guess_low, input), Toast.LENGTH_SHORT); toast.setGravity(Gravity.CENTER, 0, 0); toast.show(); } else if(input > comp) { Toast toast = Toast.makeText(MainActivity.this, getString(R.string.guess_high, input), Toast.LENGTH_SHORT); toast.setGravity(Gravity.CENTER, 0, 0); toast.show(); } else { Toast toast = Toast.makeText(MainActivity.this, getString(R.string.correct, comp, guesses), Toast.LENGTH_LONG); toast.setGravity(Gravity.CENTER, 0, 0); toast.show(); } 

Ни один из ответов не помог мне, я сделал комбинацию из вышеперечисленных ответов, и я получил решение.

Введите описание изображения здесь

Второй таймер – это целевой вид.

  public static void displayToastUnderView(Activity activity, View view, String text) { Toast toast = Toast.makeText(activity, text, Toast.LENGTH_SHORT); toast.setGravity( Gravity.TOP, view.getLeft() - view.getWidth() / 2 - toast.getView().getWidth() / 2, view.getBottom()); toast.show(); }